From b7b93ccb8b6520820e33891b94ac5b6831a7d7b8 Mon Sep 17 00:00:00 2001 From: Manuel Segura Date: Mon, 27 May 2019 20:27:23 +0200 Subject: [PATCH 01/11] Trigger primitive phase2 @maseguracern --- L1Trigger/RPCTriggerPrimitives/BuildFile.xml | 37 + L1Trigger/RPCTriggerPrimitives/README.md | 63 + ...Linkboard_rpc_roll_mapping_lb_chamber2.txt | 1487 +++++++++++++++++ .../interface/PrimitiveAlgoFactory.h | 9 + .../interface/PrimitivePreprocess.h | 78 + .../interface/RPCProcessor.h | 88 + .../plugins/BuildFile.xml | 5 + .../L1TMuonRPCTriggerPrimitivesProducer.cc | 37 + .../L1TMuonRPCTriggerPrimitivesProducer.h | 40 + .../python/primitiveRPCProducer_cfi.py | 19 + .../src/PrimitiveAlgoFactory.cc | 4 + .../src/PrimitivePreprocess.cc | 160 ++ .../RPCTriggerPrimitives/src/RPCProcessor.cc | 307 ++++ .../test/rpcprimitive_MC.py | 140 ++ .../test/rpcprimitive_PhaseII_RAW.py | 81 + .../test/rpcprimitive_RAW.py | 103 ++ 16 files changed, 2658 insertions(+) create mode 100644 L1Trigger/RPCTriggerPrimitives/BuildFile.xml create mode 100644 L1Trigger/RPCTriggerPrimitives/README.md create mode 100644 L1Trigger/RPCTriggerPrimitives/input/Linkboard_rpc_roll_mapping_lb_chamber2.txt create mode 100644 L1Trigger/RPCTriggerPrimitives/interface/PrimitiveAlgoFactory.h create mode 100644 L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h create mode 100644 L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h create mode 100644 L1Trigger/RPCTriggerPrimitives/plugins/BuildFile.xml create mode 100644 L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.cc create mode 100644 L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.h create mode 100644 L1Trigger/RPCTriggerPrimitives/python/primitiveRPCProducer_cfi.py create mode 100644 L1Trigger/RPCTriggerPrimitives/src/PrimitiveAlgoFactory.cc create mode 100644 L1Trigger/RPCTriggerPrimitives/src/PrimitivePreprocess.cc create mode 100644 L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc create mode 100644 L1Trigger/RPCTriggerPrimitives/test/rpcprimitive_MC.py create mode 100644 L1Trigger/RPCTriggerPrimitives/test/rpcprimitive_PhaseII_RAW.py create mode 100644 L1Trigger/RPCTriggerPrimitives/test/rpcprimitive_RAW.py diff --git a/L1Trigger/RPCTriggerPrimitives/BuildFile.xml b/L1Trigger/RPCTriggerPrimitives/BuildFile.xml new file mode 100644 index 0000000000000..34472708e2649 --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/BuildFile.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L1Trigger/RPCTriggerPrimitives/README.md b/L1Trigger/RPCTriggerPrimitives/README.md new file mode 100644 index 0000000000000..480364f8c15ff --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/README.md @@ -0,0 +1,63 @@ +# RPCTriggerPrimitives + +This is the first version of the RPCTriggerPrimitives for the RPC detector. Which uses as a input the RPCDigis as an input and the RPCRecHits (New collection) as a output. +The output of this module is an edm branch named RPCPrimitivesDigis, following the RPCRecHit format already committed in CMSSW_10_6_0_pre1. +We apply the cluster size cut and emulate max two clusters per link board. The module can be tuned by the parameters LinkBoardCut and ClusterSizeCut. + +# Out of the box instructions + +``` +ssh -XY username@lxplus7.cern.ch +SCRAM_ARCH=slc7_amd64_gcc700; export SCRAM_ARCH (in .bashrc file) +scram list CMSSW_10_6_0 +cmsrel CMSSW_10_6_0 +cd CMSSW_10_6_0/src +cmsenv +``` + +``` +You need to do a fork from your githut repository to cmssw-offline repository. The url is: +https://github.com/cms-sw/cmssw +``` + + +``` +git cms-init +git cms-addpkg L1Trigger/L1TMuonEndCap +git cms-addpkg CondTools/RPC + +cd CondTools/RPC +cp /eos/cms/store/group/dpg_rpc/comm_rpc/Run-II/cppf_payloads/RPCLinkMap.db data +for analyser in test/RPC*LinkMapPopConAnalyzer_cfg.py; do + cmsRun $analyser +done; # <- this produces RPCLinkMap.db sqlite file yourself +cd - + +git remote add YourGitHubName git@github.com:YourGitHubName/cmssw.git +git fetch YourGitHubName +git checkout -b PrimitiveTrigger +scram b -j6 + +``` + +## Set your environment with my branch + +``` +git remote add maseguracern git@github.com:maseguracern/cmssw.git +git cms-merge-topic -u maseguracern:PrimitiveTrigger +scram b -j6 +``` + +# Run test producer +``` +cd test +cmsRun rpcprimitive_MC.py +``` + +## Modifying files +``` +git add +git commit -m "Commit message" +git push my-cmssw YourBranchName +``` + diff --git a/L1Trigger/RPCTriggerPrimitives/input/Linkboard_rpc_roll_mapping_lb_chamber2.txt b/L1Trigger/RPCTriggerPrimitives/input/Linkboard_rpc_roll_mapping_lb_chamber2.txt new file mode 100644 index 0000000000000..255e29a365abc --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/input/Linkboard_rpc_roll_mapping_lb_chamber2.txt @@ -0,0 +1,1487 @@ +LB_RB+1_S1_BP1E_CH0 2 W+1/RB4/1+Forward W+1/RB4/1-Forward +LB_RB+1_S1_BP1E_CH2 3 W+1/RB3/1+Forward W+1/RB3/1-Forward +LB_RB+1_S1_BP1D_CH0 5 W+1/RB4/1+Backward W+1/RB4/1-Backward +LB_RB+1_S1_BP1D_CH2 6 W+1/RB3/1+Backward W+1/RB3/1-Backward +LB_RB+1_S1_BP1C_CH1 7 W+1/RB2in/1Forward _ +LB_RB+1_S1_BP1C_CH0 8 W+1/RB2in/1Central _ +LB_RB+1_S1_BP1C_CH2 9 W+1/RB2in/1Backward _ +LB_RB+1_S1_BP1B_CH1 14 W+1/RB2out/1Forward _ +LB_RB+1_S1_BP1B_CH0 15 W+1/RB1out/1Forward _ +LB_RB+1_S1_BP1B_CH2 16 W+1/RB1in/1Forward _ +LB_RB+1_S1_BP1A_CH1 17 W+1/RB2out/1Backward _ +LB_RB+1_S1_BP1A_CH0 18 W+1/RB1out/1Backward _ +LB_RB+1_S1_BP1A_CH2 19 W+1/RB1in/1Backward _ + +LB_RB+1_S10_BP1E_CH1 1 W+1/RB4/10-Forward _ +LB_RB+1_S10_BP1E_CH0 2 W+1/RB4/10+Forward _ +LB_RB+1_S10_BP1E_CH2 3 W+1/RB3/10+Forward W+1/RB3/10-Forward +LB_RB+1_S10_BP1D_CH1 4 W+1/RB4/10-Backward _ +LB_RB+1_S10_BP1D_CH0 5 W+1/RB4/10+Backward _ +LB_RB+1_S10_BP1D_CH2 6 W+1/RB3/10+Backward W+1/RB3/10-Backward +LB_RB+1_S10_BP1C_CH1 7 W+1/RB2in/10Forward _ +LB_RB+1_S10_BP1C_CH0 8 W+1/RB2in/10Central _ +LB_RB+1_S10_BP1C_CH2 9 W+1/RB2in/10Backward _ +LB_RB+1_S10_BP1B_CH1 14 W+1/RB2out/10Forward _ +LB_RB+1_S10_BP1B_CH0 15 W+1/RB1out/10Forward _ +LB_RB+1_S10_BP1B_CH2 16 W+1/RB1in/10Forward _ +LB_RB+1_S10_BP1A_CH1 17 W+1/RB2out/10Backward _ +LB_RB+1_S10_BP1A_CH0 18 W+1/RB1out/10Backward _ +LB_RB+1_S10_BP1A_CH2 19 W+1/RB1in/10Backward _ + +LB_RB+1_S11_BP1E_CH0 2 W+1/RB4/11Forward _ +LB_RB+1_S11_BP1E_CH2 3 W+1/RB3/11+Forward W+1/RB3/11-Forward +LB_RB+1_S11_BP1D_CH0 5 W+1/RB4/11Backward _ +LB_RB+1_S11_BP1D_CH2 6 W+1/RB3/11+Backward W+1/RB3/11-Backward +LB_RB+1_S11_BP1C_CH1 7 W+1/RB2in/11Forward _ +LB_RB+1_S11_BP1C_CH0 8 W+1/RB2in/11Central _ +LB_RB+1_S11_BP1C_CH2 9 W+1/RB2in/11Backward _ +LB_RB+1_S11_BP1B_CH1 14 W+1/RB2out/11Forward _ +LB_RB+1_S11_BP1B_CH0 15 W+1/RB1out/11Forward _ +LB_RB+1_S11_BP1B_CH2 16 W+1/RB1in/11Forward _ +LB_RB+1_S11_BP1A_CH1 17 W+1/RB2out/11Backward _ +LB_RB+1_S11_BP1A_CH0 18 W+1/RB1out/11Backward _ +LB_RB+1_S11_BP1A_CH2 19 W+1/RB1in/11Backward _ + +LB_RB+1_S12_BP1E_CH0 2 W+1/RB4/12+Forward W+1/RB4/12-Forward +LB_RB+1_S12_BP1E_CH2 3 W+1/RB3/12+Forward W+1/RB3/12-Forward +LB_RB+1_S12_BP1D_CH0 5 W+1/RB4/12+Backward W+1/RB4/12-Backward +LB_RB+1_S12_BP1D_CH2 6 W+1/RB3/12+Backward W+1/RB3/12-Backward +LB_RB+1_S12_BP1C_CH1 7 W+1/RB2in/12Forward _ +LB_RB+1_S12_BP1C_CH0 8 W+1/RB2in/12Central _ +LB_RB+1_S12_BP1C_CH2 9 W+1/RB2in/12Backward _ +LB_RB+1_S12_BP1B_CH1 14 W+1/RB2out/12Forward _ +LB_RB+1_S12_BP1B_CH0 15 W+1/RB1out/12Forward _ +LB_RB+1_S12_BP1B_CH2 16 W+1/RB1in/12Forward _ +LB_RB+1_S12_BP1A_CH1 17 W+1/RB2out/12Backward _ +LB_RB+1_S12_BP1A_CH0 18 W+1/RB1out/12Backward _ +LB_RB+1_S12_BP1A_CH2 19 W+1/RB1in/12Backward _ + +LB_RB+1_S2_BP1E_CH0 2 W+1/RB4/2+Forward W+1/RB4/2-Forward +LB_RB+1_S2_BP1E_CH2 3 W+1/RB3/2+Forward W+1/RB3/2-Forward +LB_RB+1_S2_BP1D_CH0 5 W+1/RB4/2+Backward W+1/RB4/2-Backward +LB_RB+1_S2_BP1D_CH2 6 W+1/RB3/2+Backward W+1/RB3/2-Backward +LB_RB+1_S2_BP1C_CH1 7 W+1/RB2in/2Forward _ +LB_RB+1_S2_BP1C_CH0 8 W+1/RB2in/2Central _ +LB_RB+1_S2_BP1C_CH2 9 W+1/RB2in/2Backward _ +LB_RB+1_S2_BP1B_CH1 14 W+1/RB2out/2Forward _ +LB_RB+1_S2_BP1B_CH0 15 W+1/RB1out/2Forward _ +LB_RB+1_S2_BP1B_CH2 16 W+1/RB1in/2Forward _ +LB_RB+1_S2_BP1A_CH1 17 W+1/RB2out/2Backward _ +LB_RB+1_S2_BP1A_CH0 18 W+1/RB1out/2Backward _ +LB_RB+1_S2_BP1A_CH2 19 W+1/RB1in/2Backward _ + +LB_RB+1_S3_BP1E_CH0 2 W+1/RB4/3+Forward W+1/RB4/3-Forward +LB_RB+1_S3_BP1E_CH2 3 W+1/RB3/3+Forward W+1/RB3/3-Forward +LB_RB+1_S3_BP1D_CH0 5 W+1/RB4/3+Backward W+1/RB4/3-Backward +LB_RB+1_S3_BP1D_CH2 6 W+1/RB3/3+Backward W+1/RB3/3-Backward +LB_RB+1_S3_BP1C_CH1 7 W+1/RB2in/3Forward _ +LB_RB+1_S3_BP1C_CH0 8 W+1/RB2in/3Central _ +LB_RB+1_S3_BP1C_CH2 9 W+1/RB2in/3Backward _ +LB_RB+1_S3_BP1B_CH1 14 W+1/RB2out/3Forward _ +LB_RB+1_S3_BP1B_CH0 15 W+1/RB1out/3Forward _ +LB_RB+1_S3_BP1B_CH2 16 W+1/RB1in/3Forward _ +LB_RB+1_S3_BP1A_CH1 17 W+1/RB2out/3Backward _ +LB_RB+1_S3_BP1A_CH0 18 W+1/RB1out/3Backward _ +LB_RB+1_S3_BP1A_CH2 19 W+1/RB1in/3Backward _ + +LB_RB+1_S4_BP1E_CH1 1 W+1/RB4/4-Forward W+1/RB4/4--Forward +LB_RB+1_S4_BP1E_CH0 2 W+1/RB4/4+Forward W+1/RB4/4++Forward +LB_RB+1_S4_BP1E_CH2 3 W+1/RB3/4+Forward W+1/RB3/4-Forward +LB_RB+1_S4_BP1D_CH1 4 W+1/RB4/4-Backward W+1/RB4/4--Backward +LB_RB+1_S4_BP1D_CH0 5 W+1/RB4/4+Backward W+1/RB4/4++Backward +LB_RB+1_S4_BP1D_CH2 6 W+1/RB3/4+Backward W+1/RB3/4-Backward +LB_RB+1_S4_BP1C_CH1 7 W+1/RB2in/4Forward _ +LB_RB+1_S4_BP1C_CH0 8 W+1/RB2in/4Central _ +LB_RB+1_S4_BP1C_CH2 9 W+1/RB2in/4Backward _ +LB_RB+1_S4_BP1B_CH1 14 W+1/RB2out/4Forward _ +LB_RB+1_S4_BP1B_CH0 15 W+1/RB1out/4Forward _ +LB_RB+1_S4_BP1B_CH2 16 W+1/RB1in/4Forward _ +LB_RB+1_S4_BP1A_CH1 17 W+1/RB2out/4Backward _ +LB_RB+1_S4_BP1A_CH0 18 W+1/RB1out/4Backward _ +LB_RB+1_S4_BP1A_CH2 19 W+1/RB1in/4Backward _ + +LB_RB+1_S5_BP1E_CH0 2 W+1/RB4/5+Forward W+1/RB4/5-Forward +LB_RB+1_S5_BP1E_CH2 3 W+1/RB3/5+Forward W+1/RB3/5-Forward +LB_RB+1_S5_BP1D_CH0 5 W+1/RB4/5+Backward W+1/RB4/5-Backward +LB_RB+1_S5_BP1D_CH2 6 W+1/RB3/5+Backward W+1/RB3/5-Backward +LB_RB+1_S5_BP1C_CH1 7 W+1/RB2in/5Forward _ +LB_RB+1_S5_BP1C_CH0 8 W+1/RB2in/5Central _ +LB_RB+1_S5_BP1C_CH2 9 W+1/RB2in/5Backward _ +LB_RB+1_S5_BP1B_CH1 14 W+1/RB2out/5Forward _ +LB_RB+1_S5_BP1B_CH0 15 W+1/RB1out/5Forward _ +LB_RB+1_S5_BP1B_CH2 16 W+1/RB1in/5Forward _ +LB_RB+1_S5_BP1A_CH1 17 W+1/RB2out/5Backward _ +LB_RB+1_S5_BP1A_CH0 18 W+1/RB1out/5Backward _ +LB_RB+1_S5_BP1A_CH2 19 W+1/RB1in/5Backward _ + +LB_RB+1_S6_BP1E_CH0 2 W+1/RB4/6+Forward W+1/RB4/6-Forward +LB_RB+1_S6_BP1E_CH2 3 W+1/RB3/6+Forward W+1/RB3/6-Forward +LB_RB+1_S6_BP1D_CH0 5 W+1/RB4/6+Backward W+1/RB4/6-Backward +LB_RB+1_S6_BP1D_CH2 6 W+1/RB3/6+Backward W+1/RB3/6-Backward +LB_RB+1_S6_BP1C_CH1 7 W+1/RB2in/6Forward _ +LB_RB+1_S6_BP1C_CH0 8 W+1/RB2in/6Central _ +LB_RB+1_S6_BP1C_CH2 9 W+1/RB2in/6Backward _ +LB_RB+1_S6_BP1B_CH1 14 W+1/RB2out/6Forward _ +LB_RB+1_S6_BP1B_CH0 15 W+1/RB1out/6Forward _ +LB_RB+1_S6_BP1B_CH2 16 W+1/RB1in/6Forward _ +LB_RB+1_S6_BP1A_CH1 17 W+1/RB2out/6Backward _ +LB_RB+1_S6_BP1A_CH0 18 W+1/RB1out/6Backward _ +LB_RB+1_S6_BP1A_CH2 19 W+1/RB1in/6Backward _ + +LB_RB+1_S7_BP1E_CH0 2 W+1/RB4/7+Forward W+1/RB4/7-Forward +LB_RB+1_S7_BP1E_CH2 3 W+1/RB3/7+Forward W+1/RB3/7-Forward +LB_RB+1_S7_BP1D_CH0 5 W+1/RB4/7+Backward W+1/RB4/7-Backward +LB_RB+1_S7_BP1D_CH2 6 W+1/RB3/7+Backward W+1/RB3/7-Backward +LB_RB+1_S7_BP1C_CH1 7 W+1/RB2in/7Forward _ +LB_RB+1_S7_BP1C_CH0 8 W+1/RB2in/7Central _ +LB_RB+1_S7_BP1C_CH2 9 W+1/RB2in/7Backward _ +LB_RB+1_S7_BP1B_CH1 14 W+1/RB2out/7Forward _ +LB_RB+1_S7_BP1B_CH0 15 W+1/RB1out/7Forward _ +LB_RB+1_S7_BP1B_CH2 16 W+1/RB1in/7Forward _ +LB_RB+1_S7_BP1A_CH1 17 W+1/RB2out/7Backward _ +LB_RB+1_S7_BP1A_CH0 18 W+1/RB1out/7Backward _ +LB_RB+1_S7_BP1A_CH2 19 W+1/RB1in/7Backward _ + +LB_RB+1_S8_BP1E_CH0 2 W+1/RB4/8+Forward W+1/RB4/8-Forward +LB_RB+1_S8_BP1E_CH2 3 W+1/RB3/8+Forward W+1/RB3/8-Forward +LB_RB+1_S8_BP1D_CH0 5 W+1/RB4/8+Backward W+1/RB4/8-Backward +LB_RB+1_S8_BP1D_CH2 6 W+1/RB3/8+Backward W+1/RB3/8-Backward +LB_RB+1_S8_BP1C_CH1 7 W+1/RB2in/8Forward _ +LB_RB+1_S8_BP1C_CH0 8 W+1/RB2in/8Central _ +LB_RB+1_S8_BP1C_CH2 9 W+1/RB2in/8Backward _ +LB_RB+1_S8_BP1B_CH1 14 W+1/RB2out/8Forward _ +LB_RB+1_S8_BP1B_CH0 15 W+1/RB1out/8Forward _ +LB_RB+1_S8_BP1B_CH2 16 W+1/RB1in/8Forward _ +LB_RB+1_S8_BP1A_CH1 17 W+1/RB2out/8Backward _ +LB_RB+1_S8_BP1A_CH0 18 W+1/RB1out/8Backward _ +LB_RB+1_S8_BP1A_CH2 19 W+1/RB1in/8Backward _ + +LB_RB+1_S9_BP1E_CH0 2 W+1/RB4/9Forward _ +LB_RB+1_S9_BP1E_CH2 3 W+1/RB3/9+Forward W+1/RB3/9-Forward +LB_RB+1_S9_BP1D_CH0 5 W+1/RB4/9Backward _ +LB_RB+1_S9_BP1D_CH2 6 W+1/RB3/9+Backward W+1/RB3/9-Backward +LB_RB+1_S9_BP1C_CH1 7 W+1/RB2in/9Forward _ +LB_RB+1_S9_BP1C_CH0 8 W+1/RB2in/9Central _ +LB_RB+1_S9_BP1C_CH2 9 W+1/RB2in/9Backward _ +LB_RB+1_S9_BP1B_CH1 14 W+1/RB2out/9Forward _ +LB_RB+1_S9_BP1B_CH0 15 W+1/RB1out/9Forward _ +LB_RB+1_S9_BP1B_CH2 16 W+1/RB1in/9Forward _ +LB_RB+1_S9_BP1A_CH1 17 W+1/RB2out/9Backward _ +LB_RB+1_S9_BP1A_CH0 18 W+1/RB1out/9Backward _ +LB_RB+1_S9_BP1A_CH2 19 W+1/RB1in/9Backward _ + +LB_RB+2_S1_BP2E_CH0 2 W+2/RB4/1+Forward W+2/RB4/1-Forward +LB_RB+2_S1_BP2E_CH2 3 W+2/RB3/1+Forward W+2/RB3/1-Forward +LB_RB+2_S1_BP2D_CH0 5 W+2/RB4/1+Backward W+2/RB4/1-Backward +LB_RB+2_S1_BP2D_CH2 6 W+2/RB3/1+Backward W+2/RB3/1-Backward +LB_RB+2_S1_BP2C_CH1 7 W+2/RB2out/1Forward _ +LB_RB+2_S1_BP2C_CH0 8 W+2/RB2out/1Central _ +LB_RB+2_S1_BP2C_CH2 9 W+2/RB2out/1Backward _ +LB_RB+2_S1_BP2B_CH1 14 W+2/RB2in/1Forward _ +LB_RB+2_S1_BP2B_CH0 15 W+2/RB1out/1Forward _ +LB_RB+2_S1_BP2B_CH2 16 W+2/RB1in/1Forward _ +LB_RB+2_S1_BP2A_CH1 17 W+2/RB2in/1Backward _ +LB_RB+2_S1_BP2A_CH0 18 W+2/RB1out/1Backward _ +LB_RB+2_S1_BP2A_CH2 19 W+2/RB1in/1Backward _ + +LB_RB+2_S10_BP2E_CH1 1 W+2/RB4/10-Forward _ +LB_RB+2_S10_BP2E_CH0 2 W+2/RB4/10+Forward _ +LB_RB+2_S10_BP2E_CH2 3 W+2/RB3/10+Forward W+2/RB3/10-Forward +LB_RB+2_S10_BP2D_CH1 4 W+2/RB4/10-Backward _ +LB_RB+2_S10_BP2D_CH0 5 W+2/RB4/10+Backward _ +LB_RB+2_S10_BP2D_CH2 6 W+2/RB3/10+Backward W+2/RB3/10-Backward +LB_RB+2_S10_BP2C_CH1 7 W+2/RB2out/10Forward _ +LB_RB+2_S10_BP2C_CH0 8 W+2/RB2out/10Central _ +LB_RB+2_S10_BP2C_CH2 9 W+2/RB2out/10Backward _ +LB_RB+2_S10_BP2B_CH1 14 W+2/RB2in/10Forward _ +LB_RB+2_S10_BP2B_CH0 15 W+2/RB1out/10Forward _ +LB_RB+2_S10_BP2B_CH2 16 W+2/RB1in/10Forward _ +LB_RB+2_S10_BP2A_CH1 17 W+2/RB2in/10Backward _ +LB_RB+2_S10_BP2A_CH0 18 W+2/RB1out/10Backward _ +LB_RB+2_S10_BP2A_CH2 19 W+2/RB1in/10Backward _ + +LB_RB+2_S11_BP2E_CH0 2 W+2/RB4/11Forward _ +LB_RB+2_S11_BP2E_CH2 3 W+2/RB3/11+Forward W+2/RB3/11-Forward +LB_RB+2_S11_BP2D_CH0 5 W+2/RB4/11Backward _ +LB_RB+2_S11_BP2D_CH2 6 W+2/RB3/11+Backward W+2/RB3/11-Backward +LB_RB+2_S11_BP2C_CH1 7 W+2/RB2out/11Forward _ +LB_RB+2_S11_BP2C_CH0 8 W+2/RB2out/11Central _ +LB_RB+2_S11_BP2C_CH2 9 W+2/RB2out/11Backward _ +LB_RB+2_S11_BP2B_CH1 14 W+2/RB2in/11Forward _ +LB_RB+2_S11_BP2B_CH0 15 W+2/RB1out/11Forward _ +LB_RB+2_S11_BP2B_CH2 16 W+2/RB1in/11Forward _ +LB_RB+2_S11_BP2A_CH1 17 W+2/RB2in/11Backward _ +LB_RB+2_S11_BP2A_CH0 18 W+2/RB1out/11Backward _ +LB_RB+2_S11_BP2A_CH2 19 W+2/RB1in/11Backward _ + +LB_RB+2_S12_BP2E_CH0 2 W+2/RB4/12+Forward W+2/RB4/12-Forward +LB_RB+2_S12_BP2E_CH2 3 W+2/RB3/12+Forward W+2/RB3/12-Forward +LB_RB+2_S12_BP2D_CH0 5 W+2/RB4/12+Backward W+2/RB4/12-Backward +LB_RB+2_S12_BP2D_CH2 6 W+2/RB3/12+Backward W+2/RB3/12-Backward +LB_RB+2_S12_BP2C_CH1 7 W+2/RB2out/12Forward _ +LB_RB+2_S12_BP2C_CH0 8 W+2/RB2out/12Central _ +LB_RB+2_S12_BP2C_CH2 9 W+2/RB2out/12Backward _ +LB_RB+2_S12_BP2B_CH1 14 W+2/RB2in/12Forward _ +LB_RB+2_S12_BP2B_CH0 15 W+2/RB1out/12Forward _ +LB_RB+2_S12_BP2B_CH2 16 W+2/RB1in/12Forward _ +LB_RB+2_S12_BP2A_CH1 17 W+2/RB2in/12Backward _ +LB_RB+2_S12_BP2A_CH0 18 W+2/RB1out/12Backward _ +LB_RB+2_S12_BP2A_CH2 19 W+2/RB1in/12Backward _ + +LB_RB+2_S2_BP2E_CH0 2 W+2/RB4/2+Forward W+2/RB4/2-Forward +LB_RB+2_S2_BP2E_CH2 3 W+2/RB3/2+Forward W+2/RB3/2-Forward +LB_RB+2_S2_BP2D_CH0 5 W+2/RB4/2+Backward W+2/RB4/2-Backward +LB_RB+2_S2_BP2D_CH2 6 W+2/RB3/2+Backward W+2/RB3/2-Backward +LB_RB+2_S2_BP2C_CH1 7 W+2/RB2out/2Forward _ +LB_RB+2_S2_BP2C_CH0 8 W+2/RB2out/2Central _ +LB_RB+2_S2_BP2C_CH2 9 W+2/RB2out/2Backward _ +LB_RB+2_S2_BP2B_CH1 14 W+2/RB2in/2Forward _ +LB_RB+2_S2_BP2B_CH0 15 W+2/RB1out/2Forward _ +LB_RB+2_S2_BP2B_CH2 16 W+2/RB1in/2Forward _ +LB_RB+2_S2_BP2A_CH1 17 W+2/RB2in/2Backward _ +LB_RB+2_S2_BP2A_CH0 18 W+2/RB1out/2Backward _ +LB_RB+2_S2_BP2A_CH2 19 W+2/RB1in/2Backward _ + +LB_RB+2_S3_BP2E_CH0 2 W+2/RB4/3+Forward W+2/RB4/3-Forward +LB_RB+2_S3_BP2E_CH2 3 W+2/RB3/3+Forward W+2/RB3/3-Forward +LB_RB+2_S3_BP2D_CH0 5 W+2/RB4/3+Backward W+2/RB4/3-Backward +LB_RB+2_S3_BP2D_CH2 6 W+2/RB3/3+Backward W+2/RB3/3-Backward +LB_RB+2_S3_BP2C_CH1 7 W+2/RB2out/3Forward _ +LB_RB+2_S3_BP2C_CH0 8 W+2/RB2out/3Central _ +LB_RB+2_S3_BP2C_CH2 9 W+2/RB2out/3Backward _ +LB_RB+2_S3_BP2B_CH1 14 W+2/RB2in/3Forward _ +LB_RB+2_S3_BP2B_CH0 15 W+2/RB1out/3Forward _ +LB_RB+2_S3_BP2B_CH2 16 W+2/RB1in/3Forward _ +LB_RB+2_S3_BP2A_CH1 17 W+2/RB2in/3Backward _ +LB_RB+2_S3_BP2A_CH0 18 W+2/RB1out/3Backward _ +LB_RB+2_S3_BP2A_CH2 19 W+2/RB1in/3Backward _ + +LB_RB+2_S4_BP2E_CH1 1 W+2/RB4/4-Forward W+2/RB4/4--Forward +LB_RB+2_S4_BP2E_CH0 2 W+2/RB4/4+Forward W+2/RB4/4++Forward +LB_RB+2_S4_BP2E_CH2 3 W+2/RB3/4+Forward W+2/RB3/4-Forward +LB_RB+2_S4_BP2D_CH1 4 W+2/RB4/4-Backward W+2/RB4/4--Backward +LB_RB+2_S4_BP2D_CH0 5 W+2/RB4/4+Backward W+2/RB4/4++Backward +LB_RB+2_S4_BP2D_CH2 6 W+2/RB3/4+Backward W+2/RB3/4-Backward +LB_RB+2_S4_BP2C_CH1 7 W+2/RB2out/4Forward _ +LB_RB+2_S4_BP2C_CH0 8 W+2/RB2out/4Central _ +LB_RB+2_S4_BP2C_CH2 9 W+2/RB2out/4Backward _ +LB_RB+2_S4_BP2B_CH1 14 W+2/RB2in/4Forward _ +LB_RB+2_S4_BP2B_CH0 15 W+2/RB1out/4Forward _ +LB_RB+2_S4_BP2B_CH2 16 W+2/RB1in/4Forward _ +LB_RB+2_S4_BP2A_CH1 17 W+2/RB2in/4Backward _ +LB_RB+2_S4_BP2A_CH0 18 W+2/RB1out/4Backward _ +LB_RB+2_S4_BP2A_CH2 19 W+2/RB1in/4Backward _ + +LB_RB+2_S5_BP2E_CH0 2 W+2/RB4/5+Forward W+2/RB4/5-Forward +LB_RB+2_S5_BP2E_CH2 3 W+2/RB3/5+Forward W+2/RB3/5-Forward +LB_RB+2_S5_BP2D_CH0 5 W+2/RB4/5+Backward W+2/RB4/5-Backward +LB_RB+2_S5_BP2D_CH2 6 W+2/RB3/5+Backward W+2/RB3/5-Backward +LB_RB+2_S5_BP2C_CH1 7 W+2/RB2out/5Forward _ +LB_RB+2_S5_BP2C_CH0 8 W+2/RB2out/5Central _ +LB_RB+2_S5_BP2C_CH2 9 W+2/RB2out/5Backward _ +LB_RB+2_S5_BP2B_CH1 14 W+2/RB2in/5Forward _ +LB_RB+2_S5_BP2B_CH0 15 W+2/RB1out/5Forward _ +LB_RB+2_S5_BP2B_CH2 16 W+2/RB1in/5Forward _ +LB_RB+2_S5_BP2A_CH1 17 W+2/RB2in/5Backward _ +LB_RB+2_S5_BP2A_CH0 18 W+2/RB1out/5Backward _ +LB_RB+2_S5_BP2A_CH2 19 W+2/RB1in/5Backward _ + +LB_RB+2_S6_BP2E_CH0 2 W+2/RB4/6+Forward W+2/RB4/6-Forward +LB_RB+2_S6_BP2E_CH2 3 W+2/RB3/6+Forward W+2/RB3/6-Forward +LB_RB+2_S6_BP2D_CH0 5 W+2/RB4/6+Backward W+2/RB4/6-Backward +LB_RB+2_S6_BP2D_CH2 6 W+2/RB3/6+Backward W+2/RB3/6-Backward +LB_RB+2_S6_BP2C_CH1 7 W+2/RB2out/6Forward _ +LB_RB+2_S6_BP2C_CH0 8 W+2/RB2out/6Central _ +LB_RB+2_S6_BP2C_CH2 9 W+2/RB2out/6Backward _ +LB_RB+2_S6_BP2B_CH1 14 W+2/RB2in/6Forward _ +LB_RB+2_S6_BP2B_CH0 15 W+2/RB1out/6Forward _ +LB_RB+2_S6_BP2B_CH2 16 W+2/RB1in/6Forward _ +LB_RB+2_S6_BP2A_CH1 17 W+2/RB2in/6Backward _ +LB_RB+2_S6_BP2A_CH0 18 W+2/RB1out/6Backward _ +LB_RB+2_S6_BP2A_CH2 19 W+2/RB1in/6Backward _ + +LB_RB+2_S7_BP2E_CH0 2 W+2/RB4/7+Forward W+2/RB4/7-Forward +LB_RB+2_S7_BP2E_CH2 3 W+2/RB3/7+Forward W+2/RB3/7-Forward +LB_RB+2_S7_BP2D_CH0 5 W+2/RB4/7+Backward W+2/RB4/7-Backward +LB_RB+2_S7_BP2D_CH2 6 W+2/RB3/7+Backward W+2/RB3/7-Backward +LB_RB+2_S7_BP2C_CH1 7 W+2/RB2out/7Forward _ +LB_RB+2_S7_BP2C_CH0 8 W+2/RB2out/7Central _ +LB_RB+2_S7_BP2C_CH2 9 W+2/RB2out/7Backward _ +LB_RB+2_S7_BP2B_CH1 14 W+2/RB2in/7Forward _ +LB_RB+2_S7_BP2B_CH0 15 W+2/RB1out/7Forward _ +LB_RB+2_S7_BP2B_CH2 16 W+2/RB1in/7Forward _ +LB_RB+2_S7_BP2A_CH1 17 W+2/RB2in/7Backward _ +LB_RB+2_S7_BP2A_CH0 18 W+2/RB1out/7Backward _ +LB_RB+2_S7_BP2A_CH2 19 W+2/RB1in/7Backward _ + +LB_RB+2_S8_BP2E_CH0 2 W+2/RB4/8+Forward W+2/RB4/8-Forward +LB_RB+2_S8_BP2E_CH2 3 W+2/RB3/8+Forward W+2/RB3/8-Forward +LB_RB+2_S8_BP2D_CH0 5 W+2/RB4/8+Backward W+2/RB4/8-Backward +LB_RB+2_S8_BP2D_CH2 6 W+2/RB3/8+Backward W+2/RB3/8-Backward +LB_RB+2_S8_BP2C_CH1 7 W+2/RB2out/8Forward _ +LB_RB+2_S8_BP2C_CH0 8 W+2/RB2out/8Central _ +LB_RB+2_S8_BP2C_CH2 9 W+2/RB2out/8Backward _ +LB_RB+2_S8_BP2B_CH1 14 W+2/RB2in/8Forward _ +LB_RB+2_S8_BP2B_CH0 15 W+2/RB1out/8Forward _ +LB_RB+2_S8_BP2B_CH2 16 W+2/RB1in/8Forward _ +LB_RB+2_S8_BP2A_CH1 17 W+2/RB2in/8Backward _ +LB_RB+2_S8_BP2A_CH0 18 W+2/RB1out/8Backward _ +LB_RB+2_S8_BP2A_CH2 19 W+2/RB1in/8Backward _ + +LB_RB+2_S9_BP2E_CH0 2 W+2/RB4/9Forward _ +LB_RB+2_S9_BP2E_CH2 3 W+2/RB3/9+Forward W+2/RB3/9-Forward +LB_RB+2_S9_BP2D_CH0 5 W+2/RB4/9Backward _ +LB_RB+2_S9_BP2D_CH2 6 W+2/RB3/9+Backward W+2/RB3/9-Backward +LB_RB+2_S9_BP2C_CH1 7 W+2/RB2out/9Forward _ +LB_RB+2_S9_BP2C_CH0 8 W+2/RB2out/9Central _ +LB_RB+2_S9_BP2C_CH2 9 W+2/RB2out/9Backward _ +LB_RB+2_S9_BP2B_CH1 14 W+2/RB2in/9Forward _ +LB_RB+2_S9_BP2B_CH0 15 W+2/RB1out/9Forward _ +LB_RB+2_S9_BP2B_CH2 16 W+2/RB1in/9Forward _ +LB_RB+2_S9_BP2A_CH1 17 W+2/RB2in/9Backward _ +LB_RB+2_S9_BP2A_CH0 18 W+2/RB1out/9Backward _ +LB_RB+2_S9_BP2A_CH2 19 W+2/RB1in/9Backward _ + +LB_RB-1_S1_BN1E_CH0 2 W-1/RB4/1+Forward W-1/RB4/1-Forward +LB_RB-1_S1_BN1E_CH2 3 W-1/RB3/1+Forward W-1/RB3/1-Forward +LB_RB-1_S1_BN1D_CH0 5 W-1/RB4/1+Backward W-1/RB4/1-Backward +LB_RB-1_S1_BN1D_CH2 6 W-1/RB3/1+Backward W-1/RB3/1-Backward +LB_RB-1_S1_BN1C_CH1 7 W-1/RB2in/1Forward _ +LB_RB-1_S1_BN1C_CH0 8 W-1/RB2in/1Central _ +LB_RB-1_S1_BN1C_CH2 9 W-1/RB2in/1Backward _ +LB_RB-1_S1_BN1B_CH1 14 W-1/RB2out/1Forward _ +LB_RB-1_S1_BN1B_CH0 15 W-1/RB1out/1Forward _ +LB_RB-1_S1_BN1B_CH2 16 W-1/RB1in/1Forward _ +LB_RB-1_S1_BN1A_CH1 17 W-1/RB2out/1Backward _ +LB_RB-1_S1_BN1A_CH0 18 W-1/RB1out/1Backward _ +LB_RB-1_S1_BN1A_CH2 19 W-1/RB1in/1Backward _ + +LB_RB-1_S10_BN1E_CH1 1 W-1/RB4/10+Forward _ +LB_RB-1_S10_BN1E_CH0 2 W-1/RB4/10-Forward _ +LB_RB-1_S10_BN1E_CH2 3 W-1/RB3/10+Forward W-1/RB3/10-Forward +LB_RB-1_S10_BN1D_CH1 4 W-1/RB4/10+Backward _ +LB_RB-1_S10_BN1D_CH0 5 W-1/RB4/10-Backward _ +LB_RB-1_S10_BN1D_CH2 6 W-1/RB3/10+Backward W-1/RB3/10-Backward +LB_RB-1_S10_BN1C_CH1 7 W-1/RB2in/10Forward _ +LB_RB-1_S10_BN1C_CH0 8 W-1/RB2in/10Central _ +LB_RB-1_S10_BN1C_CH2 9 W-1/RB2in/10Backward _ +LB_RB-1_S10_BN1B_CH1 14 W-1/RB2out/10Forward _ +LB_RB-1_S10_BN1B_CH0 15 W-1/RB1out/10Forward _ +LB_RB-1_S10_BN1B_CH2 16 W-1/RB1in/10Forward _ +LB_RB-1_S10_BN1A_CH1 17 W-1/RB2out/10Backward _ +LB_RB-1_S10_BN1A_CH0 18 W-1/RB1out/10Backward _ +LB_RB-1_S10_BN1A_CH2 19 W-1/RB1in/10Backward _ + +LB_RB-1_S11_BN1E_CH0 2 W-1/RB4/11Forward _ +LB_RB-1_S11_BN1E_CH2 3 W-1/RB3/11+Forward W-1/RB3/11-Forward +LB_RB-1_S11_BN1D_CH0 5 W-1/RB4/11Backward _ +LB_RB-1_S11_BN1D_CH2 6 W-1/RB3/11+Backward W-1/RB3/11-Backward +LB_RB-1_S11_BN1C_CH1 7 W-1/RB2in/11Forward _ +LB_RB-1_S11_BN1C_CH0 8 W-1/RB2in/11Central _ +LB_RB-1_S11_BN1C_CH2 9 W-1/RB2in/11Backward _ +LB_RB-1_S11_BN1B_CH1 14 W-1/RB2out/11Forward _ +LB_RB-1_S11_BN1B_CH0 15 W-1/RB1out/11Forward _ +LB_RB-1_S11_BN1B_CH2 16 W-1/RB1in/11Forward _ +LB_RB-1_S11_BN1A_CH1 17 W-1/RB2out/11Backward _ +LB_RB-1_S11_BN1A_CH0 18 W-1/RB1out/11Backward _ +LB_RB-1_S11_BN1A_CH2 19 W-1/RB1in/11Backward _ + +LB_RB-1_S12_BN1E_CH0 2 W-1/RB4/12+Forward W-1/RB4/12-Forward +LB_RB-1_S12_BN1E_CH2 3 W-1/RB3/12+Forward W-1/RB3/12-Forward +LB_RB-1_S12_BN1D_CH0 5 W-1/RB4/12+Backward W-1/RB4/12-Backward +LB_RB-1_S12_BN1D_CH2 6 W-1/RB3/12+Backward W-1/RB3/12-Backward +LB_RB-1_S12_BN1C_CH1 7 W-1/RB2in/12Forward _ +LB_RB-1_S12_BN1C_CH0 8 W-1/RB2in/12Central _ +LB_RB-1_S12_BN1C_CH2 9 W-1/RB2in/12Backward _ +LB_RB-1_S12_BN1B_CH1 14 W-1/RB2out/12Forward _ +LB_RB-1_S12_BN1B_CH0 15 W-1/RB1out/12Forward _ +LB_RB-1_S12_BN1B_CH2 16 W-1/RB1in/12Forward _ +LB_RB-1_S12_BN1A_CH1 17 W-1/RB2out/12Backward _ +LB_RB-1_S12_BN1A_CH0 18 W-1/RB1out/12Backward _ +LB_RB-1_S12_BN1A_CH2 19 W-1/RB1in/12Backward _ + +LB_RB-1_S2_BN1E_CH0 2 W-1/RB4/2+Forward W-1/RB4/2-Forward +LB_RB-1_S2_BN1E_CH2 3 W-1/RB3/2+Forward W-1/RB3/2-Forward +LB_RB-1_S2_BN1D_CH0 5 W-1/RB4/2+Backward W-1/RB4/2-Backward +LB_RB-1_S2_BN1D_CH2 6 W-1/RB3/2+Backward W-1/RB3/2-Backward +LB_RB-1_S2_BN1C_CH1 7 W-1/RB2in/2Forward _ +LB_RB-1_S2_BN1C_CH0 8 W-1/RB2in/2Central _ +LB_RB-1_S2_BN1C_CH2 9 W-1/RB2in/2Backward _ +LB_RB-1_S2_BN1B_CH1 14 W-1/RB2out/2Forward _ +LB_RB-1_S2_BN1B_CH0 15 W-1/RB1out/2Forward _ +LB_RB-1_S2_BN1B_CH2 16 W-1/RB1in/2Forward _ +LB_RB-1_S2_BN1A_CH1 17 W-1/RB2out/2Backward _ +LB_RB-1_S2_BN1A_CH0 18 W-1/RB1out/2Backward _ +LB_RB-1_S2_BN1A_CH2 19 W-1/RB1in/2Backward _ + +LB_RB-1_S3_BN1E_CH0 2 W-1/RB4/3+Forward W-1/RB4/3-Forward +LB_RB-1_S3_BN1E_CH2 3 W-1/RB3/3+Forward W-1/RB3/3-Forward +LB_RB-1_S3_BN1D_CH0 5 W-1/RB4/3+Backward W-1/RB4/3-Backward +LB_RB-1_S3_BN1D_CH2 6 W-1/RB3/3+Backward W-1/RB3/3-Backward +LB_RB-1_S3_BN1C_CH1 7 W-1/RB2in/3Forward _ +LB_RB-1_S3_BN1C_CH0 8 W-1/RB2in/3Central _ +LB_RB-1_S3_BN1C_CH2 9 W-1/RB2in/3Backward _ +LB_RB-1_S3_BN1B_CH1 14 W-1/RB2out/3Forward _ +LB_RB-1_S3_BN1B_CH0 15 W-1/RB1out/3Forward _ +LB_RB-1_S3_BN1B_CH2 16 W-1/RB1in/3Forward _ +LB_RB-1_S3_BN1A_CH1 17 W-1/RB2out/3Backward _ +LB_RB-1_S3_BN1A_CH0 18 W-1/RB1out/3Backward _ +LB_RB-1_S3_BN1A_CH2 19 W-1/RB1in/3Backward _ + +LB_RB-1_S4_BN1E_CH1 1 W-1/RB4/4+Forward W-1/RB4/4++Forward +LB_RB-1_S4_BN1E_CH0 2 W-1/RB4/4-Forward W-1/RB4/4--Forward +LB_RB-1_S4_BN1E_CH2 3 W-1/RB3/4+Forward W-1/RB3/4-Forward +LB_RB-1_S4_BN1D_CH1 4 W-1/RB4/4+Backward W-1/RB4/4++Backward +LB_RB-1_S4_BN1D_CH0 5 W-1/RB4/4-Backward W-1/RB4/4--Backward +LB_RB-1_S4_BN1D_CH2 6 W-1/RB3/4+Backward W-1/RB3/4-Backward +LB_RB-1_S4_BN1C_CH1 7 W-1/RB2in/4Forward _ +LB_RB-1_S4_BN1C_CH0 8 W-1/RB2in/4Central _ +LB_RB-1_S4_BN1C_CH2 9 W-1/RB2in/4Backward _ +LB_RB-1_S4_BN1B_CH1 14 W-1/RB2out/4Forward _ +LB_RB-1_S4_BN1B_CH0 15 W-1/RB1out/4Forward _ +LB_RB-1_S4_BN1B_CH2 16 W-1/RB1in/4Forward _ +LB_RB-1_S4_BN1A_CH1 17 W-1/RB2out/4Backward _ +LB_RB-1_S4_BN1A_CH0 18 W-1/RB1out/4Backward _ +LB_RB-1_S4_BN1A_CH2 19 W-1/RB1in/4Backward _ + +LB_RB-1_S5_BN1E_CH0 2 W-1/RB4/5+Forward W-1/RB4/5-Forward +LB_RB-1_S5_BN1E_CH2 3 W-1/RB3/5+Forward W-1/RB3/5-Forward +LB_RB-1_S5_BN1D_CH0 5 W-1/RB4/5+Backward W-1/RB4/5-Backward +LB_RB-1_S5_BN1D_CH2 6 W-1/RB3/5+Backward W-1/RB3/5-Backward +LB_RB-1_S5_BN1C_CH1 7 W-1/RB2in/5Forward _ +LB_RB-1_S5_BN1C_CH0 8 W-1/RB2in/5Central _ +LB_RB-1_S5_BN1C_CH2 9 W-1/RB2in/5Backward _ +LB_RB-1_S5_BN1B_CH1 14 W-1/RB2out/5Forward _ +LB_RB-1_S5_BN1B_CH0 15 W-1/RB1out/5Forward _ +LB_RB-1_S5_BN1B_CH2 16 W-1/RB1in/5Forward _ +LB_RB-1_S5_BN1A_CH1 17 W-1/RB2out/5Backward _ +LB_RB-1_S5_BN1A_CH0 18 W-1/RB1out/5Backward _ +LB_RB-1_S5_BN1A_CH2 19 W-1/RB1in/5Backward _ + +LB_RB-1_S6_BN1E_CH0 2 W-1/RB4/6+Forward W-1/RB4/6-Forward +LB_RB-1_S6_BN1E_CH2 3 W-1/RB3/6+Forward W-1/RB3/6-Forward +LB_RB-1_S6_BN1D_CH0 5 W-1/RB4/6+Backward W-1/RB4/6-Backward +LB_RB-1_S6_BN1D_CH2 6 W-1/RB3/6+Backward W-1/RB3/6-Backward +LB_RB-1_S6_BN1C_CH1 7 W-1/RB2in/6Forward _ +LB_RB-1_S6_BN1C_CH0 8 W-1/RB2in/6Central _ +LB_RB-1_S6_BN1C_CH2 9 W-1/RB2in/6Backward _ +LB_RB-1_S6_BN1B_CH1 14 W-1/RB2out/6Forward _ +LB_RB-1_S6_BN1B_CH0 15 W-1/RB1out/6Forward _ +LB_RB-1_S6_BN1B_CH2 16 W-1/RB1in/6Forward _ +LB_RB-1_S6_BN1A_CH1 17 W-1/RB2out/6Backward _ +LB_RB-1_S6_BN1A_CH0 18 W-1/RB1out/6Backward _ +LB_RB-1_S6_BN1A_CH2 19 W-1/RB1in/6Backward _ + +LB_RB-1_S7_BN1E_CH0 2 W-1/RB4/7+Forward W-1/RB4/7-Forward +LB_RB-1_S7_BN1E_CH2 3 W-1/RB3/7+Forward W-1/RB3/7-Forward +LB_RB-1_S7_BN1D_CH0 5 W-1/RB4/7+Backward W-1/RB4/7-Backward +LB_RB-1_S7_BN1D_CH2 6 W-1/RB3/7+Backward W-1/RB3/7-Backward +LB_RB-1_S7_BN1C_CH1 7 W-1/RB2in/7Forward _ +LB_RB-1_S7_BN1C_CH0 8 W-1/RB2in/7Central _ +LB_RB-1_S7_BN1C_CH2 9 W-1/RB2in/7Backward _ +LB_RB-1_S7_BN1B_CH1 14 W-1/RB2out/7Forward _ +LB_RB-1_S7_BN1B_CH0 15 W-1/RB1out/7Forward _ +LB_RB-1_S7_BN1B_CH2 16 W-1/RB1in/7Forward _ +LB_RB-1_S7_BN1A_CH1 17 W-1/RB2out/7Backward _ +LB_RB-1_S7_BN1A_CH0 18 W-1/RB1out/7Backward _ +LB_RB-1_S7_BN1A_CH2 19 W-1/RB1in/7Backward _ + +LB_RB-1_S8_BN1E_CH0 2 W-1/RB4/8+Forward W-1/RB4/8-Forward +LB_RB-1_S8_BN1E_CH2 3 W-1/RB3/8+Forward W-1/RB3/8-Forward +LB_RB-1_S8_BN1D_CH0 5 W-1/RB4/8+Backward W-1/RB4/8-Backward +LB_RB-1_S8_BN1D_CH2 6 W-1/RB3/8+Backward W-1/RB3/8-Backward +LB_RB-1_S8_BN1C_CH1 7 W-1/RB2in/8Forward _ +LB_RB-1_S8_BN1C_CH0 8 W-1/RB2in/8Central _ +LB_RB-1_S8_BN1C_CH2 9 W-1/RB2in/8Backward _ +LB_RB-1_S8_BN1B_CH1 14 W-1/RB2out/8Forward _ +LB_RB-1_S8_BN1B_CH0 15 W-1/RB1out/8Forward _ +LB_RB-1_S8_BN1B_CH2 16 W-1/RB1in/8Forward _ +LB_RB-1_S8_BN1A_CH1 17 W-1/RB2out/8Backward _ +LB_RB-1_S8_BN1A_CH0 18 W-1/RB1out/8Backward _ +LB_RB-1_S8_BN1A_CH2 19 W-1/RB1in/8Backward _ + +LB_RB-1_S9_BN1E_CH0 2 W-1/RB4/9Forward _ +LB_RB-1_S9_BN1E_CH2 3 W-1/RB3/9+Forward W-1/RB3/9-Forward +LB_RB-1_S9_BN1D_CH0 5 W-1/RB4/9Backward _ +LB_RB-1_S9_BN1D_CH2 6 W-1/RB3/9+Backward W-1/RB3/9-Backward +LB_RB-1_S9_BN1C_CH1 7 W-1/RB2in/9Forward _ +LB_RB-1_S9_BN1C_CH0 8 W-1/RB2in/9Central _ +LB_RB-1_S9_BN1C_CH2 9 W-1/RB2in/9Backward _ +LB_RB-1_S9_BN1B_CH1 14 W-1/RB2out/9Forward _ +LB_RB-1_S9_BN1B_CH0 15 W-1/RB1out/9Forward _ +LB_RB-1_S9_BN1B_CH2 16 W-1/RB1in/9Forward _ +LB_RB-1_S9_BN1A_CH1 17 W-1/RB2out/9Backward _ +LB_RB-1_S9_BN1A_CH0 18 W-1/RB1out/9Backward _ +LB_RB-1_S9_BN1A_CH2 19 W-1/RB1in/9Backward _ + +LB_RB-2_S1_BN2E_CH0 2 W-2/RB4/1+Forward W-2/RB4/1-Forward +LB_RB-2_S1_BN2E_CH2 3 W-2/RB3/1+Forward W-2/RB3/1-Forward +LB_RB-2_S1_BN2D_CH0 5 W-2/RB4/1+Backward W-2/RB4/1-Backward +LB_RB-2_S1_BN2D_CH2 6 W-2/RB3/1+Backward W-2/RB3/1-Backward +LB_RB-2_S1_BN2C_CH1 7 W-2/RB2out/1Forward _ +LB_RB-2_S1_BN2C_CH0 8 W-2/RB2out/1Central _ +LB_RB-2_S1_BN2C_CH2 9 W-2/RB2out/1Backward _ +LB_RB-2_S1_BN2B_CH1 14 W-2/RB2in/1Forward _ +LB_RB-2_S1_BN2B_CH0 15 W-2/RB1out/1Forward _ +LB_RB-2_S1_BN2B_CH2 16 W-2/RB1in/1Forward _ +LB_RB-2_S1_BN2A_CH1 17 W-2/RB2in/1Backward _ +LB_RB-2_S1_BN2A_CH0 18 W-2/RB1out/1Backward _ +LB_RB-2_S1_BN2A_CH2 19 W-2/RB1in/1Backward _ + +LB_RB-2_S10_BN2E_CH1 1 W-2/RB4/10+Forward _ +LB_RB-2_S10_BN2E_CH0 2 W-2/RB4/10-Forward _ +LB_RB-2_S10_BN2E_CH2 3 W-2/RB3/10+Forward W-2/RB3/10-Forward +LB_RB-2_S10_BN2D_CH1 4 W-2/RB4/10+Backward _ +LB_RB-2_S10_BN2D_CH0 5 W-2/RB4/10-Backward _ +LB_RB-2_S10_BN2D_CH2 6 W-2/RB3/10+Backward W-2/RB3/10-Backward +LB_RB-2_S10_BN2C_CH1 7 W-2/RB2out/10Forward _ +LB_RB-2_S10_BN2C_CH0 8 W-2/RB2out/10Central _ +LB_RB-2_S10_BN2C_CH2 9 W-2/RB2out/10Backward _ +LB_RB-2_S10_BN2B_CH1 14 W-2/RB2in/10Forward _ +LB_RB-2_S10_BN2B_CH0 15 W-2/RB1out/10Forward _ +LB_RB-2_S10_BN2B_CH2 16 W-2/RB1in/10Forward _ +LB_RB-2_S10_BN2A_CH1 17 W-2/RB2in/10Backward _ +LB_RB-2_S10_BN2A_CH0 18 W-2/RB1out/10Backward _ +LB_RB-2_S10_BN2A_CH2 19 W-2/RB1in/10Backward _ + +LB_RB-2_S11_BN2E_CH0 2 W-2/RB4/11Forward _ +LB_RB-2_S11_BN2E_CH2 3 W-2/RB3/11+Forward W-2/RB3/11-Forward +LB_RB-2_S11_BN2D_CH0 5 W-2/RB4/11Backward _ +LB_RB-2_S11_BN2D_CH2 6 W-2/RB3/11+Backward W-2/RB3/11-Backward +LB_RB-2_S11_BN2C_CH1 7 W-2/RB2out/11Forward _ +LB_RB-2_S11_BN2C_CH0 8 W-2/RB2out/11Central _ +LB_RB-2_S11_BN2C_CH2 9 W-2/RB2out/11Backward _ +LB_RB-2_S11_BN2B_CH1 14 W-2/RB2in/11Forward _ +LB_RB-2_S11_BN2B_CH0 15 W-2/RB1out/11Forward _ +LB_RB-2_S11_BN2B_CH2 16 W-2/RB1in/11Forward _ +LB_RB-2_S11_BN2A_CH1 17 W-2/RB2in/11Backward _ +LB_RB-2_S11_BN2A_CH0 18 W-2/RB1out/11Backward _ +LB_RB-2_S11_BN2A_CH2 19 W-2/RB1in/11Backward _ + +LB_RB-2_S12_BN2E_CH0 2 W-2/RB4/12+Forward W-2/RB4/12-Forward +LB_RB-2_S12_BN2E_CH2 3 W-2/RB3/12+Forward W-2/RB3/12-Forward +LB_RB-2_S12_BN2D_CH0 5 W-2/RB4/12+Backward W-2/RB4/12-Backward +LB_RB-2_S12_BN2D_CH2 6 W-2/RB3/12+Backward W-2/RB3/12-Backward +LB_RB-2_S12_BN2C_CH1 7 W-2/RB2out/12Forward _ +LB_RB-2_S12_BN2C_CH0 8 W-2/RB2out/12Central _ +LB_RB-2_S12_BN2C_CH2 9 W-2/RB2out/12Backward _ +LB_RB-2_S12_BN2B_CH1 14 W-2/RB2in/12Forward _ +LB_RB-2_S12_BN2B_CH0 15 W-2/RB1out/12Forward _ +LB_RB-2_S12_BN2B_CH2 16 W-2/RB1in/12Forward _ +LB_RB-2_S12_BN2A_CH1 17 W-2/RB2in/12Backward _ +LB_RB-2_S12_BN2A_CH0 18 W-2/RB1out/12Backward _ +LB_RB-2_S12_BN2A_CH2 19 W-2/RB1in/12Backward _ + +LB_RB-2_S2_BN2E_CH0 2 W-2/RB4/2+Forward W-2/RB4/2-Forward +LB_RB-2_S2_BN2E_CH2 3 W-2/RB3/2+Forward W-2/RB3/2-Forward +LB_RB-2_S2_BN2D_CH0 5 W-2/RB4/2+Backward W-2/RB4/2-Backward +LB_RB-2_S2_BN2D_CH2 6 W-2/RB3/2+Backward W-2/RB3/2-Backward +LB_RB-2_S2_BN2C_CH1 7 W-2/RB2out/2Forward _ +LB_RB-2_S2_BN2C_CH0 8 W-2/RB2out/2Central _ +LB_RB-2_S2_BN2C_CH2 9 W-2/RB2out/2Backward _ +LB_RB-2_S2_BN2B_CH1 14 W-2/RB2in/2Forward _ +LB_RB-2_S2_BN2B_CH0 15 W-2/RB1out/2Forward _ +LB_RB-2_S2_BN2B_CH2 16 W-2/RB1in/2Forward _ +LB_RB-2_S2_BN2A_CH1 17 W-2/RB2in/2Backward _ +LB_RB-2_S2_BN2A_CH0 18 W-2/RB1out/2Backward _ +LB_RB-2_S2_BN2A_CH2 19 W-2/RB1in/2Backward _ + +LB_RB-2_S3_BN2E_CH0 2 W-2/RB4/3+Forward W-2/RB4/3-Forward +LB_RB-2_S3_BN2E_CH2 3 W-2/RB3/3+Forward W-2/RB3/3-Forward +LB_RB-2_S3_BN2D_CH0 5 W-2/RB4/3+Backward W-2/RB4/3-Backward +LB_RB-2_S3_BN2D_CH2 6 W-2/RB3/3+Backward W-2/RB3/3-Backward +LB_RB-2_S3_BN2C_CH1 7 W-2/RB2out/3Forward _ +LB_RB-2_S3_BN2C_CH0 8 W-2/RB2out/3Central _ +LB_RB-2_S3_BN2C_CH2 9 W-2/RB2out/3Backward _ +LB_RB-2_S3_BN2B_CH1 14 W-2/RB2in/3Forward _ +LB_RB-2_S3_BN2B_CH0 15 W-2/RB1out/3Forward _ +LB_RB-2_S3_BN2B_CH2 16 W-2/RB1in/3Forward _ +LB_RB-2_S3_BN2A_CH1 17 W-2/RB2in/3Backward _ +LB_RB-2_S3_BN2A_CH0 18 W-2/RB1out/3Backward _ +LB_RB-2_S3_BN2A_CH2 19 W-2/RB1in/3Backward _ + +LB_RB-2_S4_BN2E_CH1 1 W-2/RB4/4+Forward W-2/RB4/4++Forward +LB_RB-2_S4_BN2E_CH0 2 W-2/RB4/4-Forward W-2/RB4/4--Forward +LB_RB-2_S4_BN2E_CH2 3 W-2/RB3/4+Forward W-2/RB3/4-Forward +LB_RB-2_S4_BN2D_CH1 4 W-2/RB4/4+Backward W-2/RB4/4++Backward +LB_RB-2_S4_BN2D_CH0 5 W-2/RB4/4-Backward W-2/RB4/4--Backward +LB_RB-2_S4_BN2D_CH2 6 W-2/RB3/4+Backward W-2/RB3/4-Backward +LB_RB-2_S4_BN2C_CH1 7 W-2/RB2out/4Forward _ +LB_RB-2_S4_BN2C_CH0 8 W-2/RB2out/4Central _ +LB_RB-2_S4_BN2C_CH2 9 W-2/RB2out/4Backward _ +LB_RB-2_S4_BN2B_CH1 14 W-2/RB2in/4Forward _ +LB_RB-2_S4_BN2B_CH0 15 W-2/RB1out/4Forward _ +LB_RB-2_S4_BN2B_CH2 16 W-2/RB1in/4Forward _ +LB_RB-2_S4_BN2A_CH1 17 W-2/RB2in/4Backward _ +LB_RB-2_S4_BN2A_CH0 18 W-2/RB1out/4Backward _ +LB_RB-2_S4_BN2A_CH2 19 W-2/RB1in/4Backward _ + +LB_RB-2_S5_BN2E_CH0 2 W-2/RB4/5+Forward W-2/RB4/5-Forward +LB_RB-2_S5_BN2E_CH2 3 W-2/RB3/5+Forward W-2/RB3/5-Forward +LB_RB-2_S5_BN2D_CH0 5 W-2/RB4/5+Backward W-2/RB4/5-Backward +LB_RB-2_S5_BN2D_CH2 6 W-2/RB3/5+Backward W-2/RB3/5-Backward +LB_RB-2_S5_BN2C_CH1 7 W-2/RB2out/5Forward _ +LB_RB-2_S5_BN2C_CH0 8 W-2/RB2out/5Central _ +LB_RB-2_S5_BN2C_CH2 9 W-2/RB2out/5Backward _ +LB_RB-2_S5_BN2B_CH1 14 W-2/RB2in/5Forward _ +LB_RB-2_S5_BN2B_CH0 15 W-2/RB1out/5Forward _ +LB_RB-2_S5_BN2B_CH2 16 W-2/RB1in/5Forward _ +LB_RB-2_S5_BN2A_CH1 17 W-2/RB2in/5Backward _ +LB_RB-2_S5_BN2A_CH0 18 W-2/RB1out/5Backward _ +LB_RB-2_S5_BN2A_CH2 19 W-2/RB1in/5Backward _ + +LB_RB-2_S6_BN2E_CH0 2 W-2/RB4/6+Forward W-2/RB4/6-Forward +LB_RB-2_S6_BN2E_CH2 3 W-2/RB3/6+Forward W-2/RB3/6-Forward +LB_RB-2_S6_BN2D_CH0 5 W-2/RB4/6+Backward W-2/RB4/6-Backward +LB_RB-2_S6_BN2D_CH2 6 W-2/RB3/6+Backward W-2/RB3/6-Backward +LB_RB-2_S6_BN2C_CH1 7 W-2/RB2out/6Forward _ +LB_RB-2_S6_BN2C_CH0 8 W-2/RB2out/6Central _ +LB_RB-2_S6_BN2C_CH2 9 W-2/RB2out/6Backward _ +LB_RB-2_S6_BN2B_CH1 14 W-2/RB2in/6Forward _ +LB_RB-2_S6_BN2B_CH0 15 W-2/RB1out/6Forward _ +LB_RB-2_S6_BN2B_CH2 16 W-2/RB1in/6Forward _ +LB_RB-2_S6_BN2A_CH1 17 W-2/RB2in/6Backward _ +LB_RB-2_S6_BN2A_CH0 18 W-2/RB1out/6Backward _ +LB_RB-2_S6_BN2A_CH2 19 W-2/RB1in/6Backward _ + +LB_RB-2_S7_BN2E_CH0 2 W-2/RB4/7+Forward W-2/RB4/7-Forward +LB_RB-2_S7_BN2E_CH2 3 W-2/RB3/7+Forward W-2/RB3/7-Forward +LB_RB-2_S7_BN2D_CH0 5 W-2/RB4/7+Backward W-2/RB4/7-Backward +LB_RB-2_S7_BN2D_CH2 6 W-2/RB3/7+Backward W-2/RB3/7-Backward +LB_RB-2_S7_BN2C_CH1 7 W-2/RB2out/7Forward _ +LB_RB-2_S7_BN2C_CH0 8 W-2/RB2out/7Central _ +LB_RB-2_S7_BN2C_CH2 9 W-2/RB2out/7Backward _ +LB_RB-2_S7_BN2B_CH1 14 W-2/RB2in/7Forward _ +LB_RB-2_S7_BN2B_CH0 15 W-2/RB1out/7Forward _ +LB_RB-2_S7_BN2B_CH2 16 W-2/RB1in/7Forward _ +LB_RB-2_S7_BN2A_CH1 17 W-2/RB2in/7Backward _ +LB_RB-2_S7_BN2A_CH0 18 W-2/RB1out/7Backward _ +LB_RB-2_S7_BN2A_CH2 19 W-2/RB1in/7Backward _ + +LB_RB-2_S8_BN2E_CH0 2 W-2/RB4/8+Forward W-2/RB4/8-Forward +LB_RB-2_S8_BN2E_CH2 3 W-2/RB3/8+Forward W-2/RB3/8-Forward +LB_RB-2_S8_BN2D_CH0 5 W-2/RB4/8+Backward W-2/RB4/8-Backward +LB_RB-2_S8_BN2D_CH2 6 W-2/RB3/8+Backward W-2/RB3/8-Backward +LB_RB-2_S8_BN2C_CH1 7 W-2/RB2out/8Forward _ +LB_RB-2_S8_BN2C_CH0 8 W-2/RB2out/8Central _ +LB_RB-2_S8_BN2C_CH2 9 W-2/RB2out/8Backward _ +LB_RB-2_S8_BN2B_CH1 14 W-2/RB2in/8Forward _ +LB_RB-2_S8_BN2B_CH0 15 W-2/RB1out/8Forward _ +LB_RB-2_S8_BN2B_CH2 16 W-2/RB1in/8Forward _ +LB_RB-2_S8_BN2A_CH1 17 W-2/RB2in/8Backward _ +LB_RB-2_S8_BN2A_CH0 18 W-2/RB1out/8Backward _ +LB_RB-2_S8_BN2A_CH2 19 W-2/RB1in/8Backward _ + +LB_RB-2_S9_BN2E_CH0 2 W-2/RB4/9Forward _ +LB_RB-2_S9_BN2E_CH2 3 W-2/RB3/9+Forward W-2/RB3/9-Forward +LB_RB-2_S9_BN2D_CH0 5 W-2/RB4/9Backward _ +LB_RB-2_S9_BN2D_CH2 6 W-2/RB3/9+Backward W-2/RB3/9-Backward +LB_RB-2_S9_BN2C_CH1 7 W-2/RB2out/9Forward _ +LB_RB-2_S9_BN2C_CH0 8 W-2/RB2out/9Central _ +LB_RB-2_S9_BN2C_CH2 9 W-2/RB2out/9Backward _ +LB_RB-2_S9_BN2B_CH1 14 W-2/RB2in/9Forward _ +LB_RB-2_S9_BN2B_CH0 15 W-2/RB1out/9Forward _ +LB_RB-2_S9_BN2B_CH2 16 W-2/RB1in/9Forward _ +LB_RB-2_S9_BN2A_CH1 17 W-2/RB2in/9Backward _ +LB_RB-2_S9_BN2A_CH0 18 W-2/RB1out/9Backward _ +LB_RB-2_S9_BN2A_CH2 19 W-2/RB1in/9Backward _ + +LB_RB0_S1_BN0E_CH0 2 W0/RB4/1+Forward W0/RB4/1-Forward +LB_RB0_S1_BN0E_CH2 3 W0/RB3/1+Forward W0/RB3/1-Forward +LB_RB0_S1_BP0E_CH0 5 W0/RB4/1+Backward W0/RB4/1-Backward +LB_RB0_S1_BP0E_CH2 6 W0/RB3/1+Backward W0/RB3/1-Backward +LB_RB0_S1_BM0C_CH1 7 W0/RB2in/1Forward _ +LB_RB0_S1_BM0C_CH0 8 W0/RB2in/1Central _ +LB_RB0_S1_BM0C_CH2 9 W0/RB2in/1Backward _ +LB_RB0_S1_BN0B_CH1 14 W0/RB2out/1Forward _ +LB_RB0_S1_BN0B_CH0 15 W0/RB1out/1Forward _ +LB_RB0_S1_BN0B_CH2 16 W0/RB1in/1Forward _ +LB_RB0_S1_BP0B_CH1 17 W0/RB2out/1Backward _ +LB_RB0_S1_BP0B_CH0 18 W0/RB1out/1Backward _ +LB_RB0_S1_BP0B_CH2 19 W0/RB1in/1Backward _ + +LB_RB0_S10_BN0E_CH1 1 W0/RB4/10-Forward _ +LB_RB0_S10_BN0E_CH0 2 W0/RB4/10+Forward _ +LB_RB0_S10_BN0E_CH2 3 W0/RB3/10+Forward W0/RB3/10-Forward +LB_RB0_S10_BP0E_CH1 4 W0/RB4/10-Backward _ +LB_RB0_S10_BP0E_CH0 5 W0/RB4/10+Backward _ +LB_RB0_S10_BP0E_CH2 6 W0/RB3/10+Backward W0/RB3/10-Backward +LB_RB0_S10_BM0C_CH1 7 W0/RB2in/10Forward _ +LB_RB0_S10_BM0C_CH0 8 W0/RB2in/10Central _ +LB_RB0_S10_BM0C_CH2 9 W0/RB2in/10Backward _ +LB_RB0_S10_BN0B_CH1 14 W0/RB2out/10Forward _ +LB_RB0_S10_BN0B_CH0 15 W0/RB1out/10Forward _ +LB_RB0_S10_BN0B_CH2 16 W0/RB1in/10Forward _ +LB_RB0_S10_BP0B_CH1 17 W0/RB2out/10Backward _ +LB_RB0_S10_BP0B_CH0 18 W0/RB1out/10Backward _ +LB_RB0_S10_BP0B_CH2 19 W0/RB1in/10Backward _ + +LB_RB0_S11_BN0E_CH0 2 W0/RB4/11Forward _ +LB_RB0_S11_BN0E_CH2 3 W0/RB3/11+Forward W0/RB3/11-Forward +LB_RB0_S11_BP0E_CH0 5 W0/RB4/11Backward _ +LB_RB0_S11_BP0E_CH2 6 W0/RB3/11+Backward W0/RB3/11-Backward +LB_RB0_S11_BM0C_CH1 7 W0/RB2in/11Forward _ +LB_RB0_S11_BM0C_CH0 8 W0/RB2in/11Central _ +LB_RB0_S11_BM0C_CH2 9 W0/RB2in/11Backward _ +LB_RB0_S11_BN0B_CH1 14 W0/RB2out/11Forward _ +LB_RB0_S11_BN0B_CH0 15 W0/RB1out/11Forward _ +LB_RB0_S11_BN0B_CH2 16 W0/RB1in/11Forward _ +LB_RB0_S11_BP0B_CH1 17 W0/RB2out/11Backward _ +LB_RB0_S11_BP0B_CH0 18 W0/RB1out/11Backward _ +LB_RB0_S11_BP0B_CH2 19 W0/RB1in/11Backward _ + +LB_RB0_S12_BN0E_CH0 2 W0/RB4/12+Forward W0/RB4/12-Forward +LB_RB0_S12_BN0E_CH2 3 W0/RB3/12+Forward W0/RB3/12-Forward +LB_RB0_S12_BP0E_CH0 5 W0/RB4/12+Backward W0/RB4/12-Backward +LB_RB0_S12_BP0E_CH2 6 W0/RB3/12+Backward W0/RB3/12-Backward +LB_RB0_S12_BM0C_CH1 7 W0/RB2in/12Forward _ +LB_RB0_S12_BM0C_CH0 8 W0/RB2in/12Central _ +LB_RB0_S12_BM0C_CH2 9 W0/RB2in/12Backward _ +LB_RB0_S12_BN0B_CH1 14 W0/RB2out/12Forward _ +LB_RB0_S12_BN0B_CH0 15 W0/RB1out/12Forward _ +LB_RB0_S12_BN0B_CH2 16 W0/RB1in/12Forward _ +LB_RB0_S12_BP0B_CH1 17 W0/RB2out/12Backward _ +LB_RB0_S12_BP0B_CH0 18 W0/RB1out/12Backward _ +LB_RB0_S12_BP0B_CH2 19 W0/RB1in/12Backward _ + +LB_RB0_S2_BN0E_CH0 2 W0/RB4/2+Forward W0/RB4/2-Forward +LB_RB0_S2_BN0E_CH2 3 W0/RB3/2+Forward W0/RB3/2-Forward +LB_RB0_S2_BP0E_CH0 5 W0/RB4/2+Backward W0/RB4/2-Backward +LB_RB0_S2_BP0E_CH2 6 W0/RB3/2+Backward W0/RB3/2-Backward +LB_RB0_S2_BM0C_CH1 7 W0/RB2in/2Forward _ +LB_RB0_S2_BM0C_CH0 8 W0/RB2in/2Central _ +LB_RB0_S2_BM0C_CH2 9 W0/RB2in/2Backward _ +LB_RB0_S2_BN0B_CH1 14 W0/RB2out/2Forward _ +LB_RB0_S2_BN0B_CH0 15 W0/RB1out/2Forward _ +LB_RB0_S2_BN0B_CH2 16 W0/RB1in/2Forward _ +LB_RB0_S2_BP0B_CH1 17 W0/RB2out/2Backward _ +LB_RB0_S2_BP0B_CH0 18 W0/RB1out/2Backward _ +LB_RB0_S2_BP0B_CH2 19 W0/RB1in/2Backward _ + +LB_RB0_S3_BN0E_CH0 2 W0/RB4/3+Forward W0/RB4/3-Forward +LB_RB0_S3_BN0E_CH2 3 W0/RB3/3+Forward W0/RB3/3-Forward +LB_RB0_S3_BP0E_CH0 5 W0/RB4/3+Backward W0/RB4/3-Backward +LB_RB0_S3_BP0E_CH2 6 W0/RB3/3+Backward W0/RB3/3-Backward +LB_RB0_S3_BM0C_CH1 7 W0/RB2in/3Forward _ +LB_RB0_S3_BM0C_CH0 8 W0/RB2in/3Central _ +LB_RB0_S3_BM0C_CH2 9 W0/RB2in/3Backward _ +LB_RB0_S3_BN0B_CH1 14 W0/RB2out/3Forward _ +LB_RB0_S3_BN0B_CH0 15 W0/RB1out/3Forward _ +LB_RB0_S3_BN0B_CH2 16 W0/RB1in/3Forward _ +LB_RB0_S3_BP0B_CH1 17 W0/RB2out/3Backward _ +LB_RB0_S3_BP0B_CH0 18 W0/RB1out/3Backward _ +LB_RB0_S3_BP0B_CH2 19 W0/RB1in/3Backward _ + +LB_RB0_S4_BN0E_CH1 1 W0/RB4/4+Forward W0/RB4/4++Forward +LB_RB0_S4_BN0E_CH0 2 W0/RB4/4-Forward W0/RB4/4--Forward +LB_RB0_S4_BN0E_CH2 3 W0/RB3/4+Forward W0/RB3/4-Forward +LB_RB0_S4_BP0E_CH1 4 W0/RB4/4+Backward W0/RB4/4++Backward +LB_RB0_S4_BP0E_CH0 5 W0/RB4/4-Backward W0/RB4/4--Backward +LB_RB0_S4_BP0E_CH2 6 W0/RB3/4+Backward W0/RB3/4-Backward +LB_RB0_S4_BM0C_CH1 7 W0/RB2in/4Forward _ +LB_RB0_S4_BM0C_CH0 8 W0/RB2in/4Central _ +LB_RB0_S4_BM0C_CH2 9 W0/RB2in/4Backward _ +LB_RB0_S4_BN0B_CH1 14 W0/RB2out/4Forward _ +LB_RB0_S4_BN0B_CH0 15 W0/RB1out/4Forward _ +LB_RB0_S4_BN0B_CH2 16 W0/RB1in/4Forward _ +LB_RB0_S4_BP0B_CH1 17 W0/RB2out/4Backward _ +LB_RB0_S4_BP0B_CH0 18 W0/RB1out/4Backward _ +LB_RB0_S4_BP0B_CH2 19 W0/RB1in/4Backward _ + +LB_RB0_S5_BN0E_CH0 2 W0/RB4/5+Forward W0/RB4/5-Forward +LB_RB0_S5_BN0E_CH2 3 W0/RB3/5+Forward W0/RB3/5-Forward +LB_RB0_S5_BP0E_CH0 5 W0/RB4/5+Backward W0/RB4/5-Backward +LB_RB0_S5_BP0E_CH2 6 W0/RB3/5+Backward W0/RB3/5-Backward +LB_RB0_S5_BM0C_CH1 7 W0/RB2in/5Forward _ +LB_RB0_S5_BM0C_CH0 8 W0/RB2in/5Central _ +LB_RB0_S5_BM0C_CH2 9 W0/RB2in/5Backward _ +LB_RB0_S5_BN0B_CH1 14 W0/RB2out/5Forward _ +LB_RB0_S5_BN0B_CH0 15 W0/RB1out/5Forward _ +LB_RB0_S5_BN0B_CH2 16 W0/RB1in/5Forward _ +LB_RB0_S5_BP0B_CH1 17 W0/RB2out/5Backward _ +LB_RB0_S5_BP0B_CH0 18 W0/RB1out/5Backward _ +LB_RB0_S5_BP0B_CH2 19 W0/RB1in/5Backward _ + +LB_RB0_S6_BN0E_CH0 2 W0/RB4/6+Forward W0/RB4/6-Forward +LB_RB0_S6_BN0E_CH2 3 W0/RB3/6+Forward W0/RB3/6-Forward +LB_RB0_S6_BP0E_CH0 5 W0/RB4/6+Backward W0/RB4/6-Backward +LB_RB0_S6_BP0E_CH2 6 W0/RB3/6+Backward W0/RB3/6-Backward +LB_RB0_S6_BM0C_CH1 7 W0/RB2in/6Forward _ +LB_RB0_S6_BM0C_CH0 8 W0/RB2in/6Central _ +LB_RB0_S6_BM0C_CH2 9 W0/RB2in/6Backward _ +LB_RB0_S6_BN0B_CH1 14 W0/RB2out/6Forward _ +LB_RB0_S6_BN0B_CH0 15 W0/RB1out/6Forward _ +LB_RB0_S6_BN0B_CH2 16 W0/RB1in/6Forward _ +LB_RB0_S6_BP0B_CH1 17 W0/RB2out/6Backward _ +LB_RB0_S6_BP0B_CH0 18 W0/RB1out/6Backward _ +LB_RB0_S6_BP0B_CH2 19 W0/RB1in/6Backward _ + +LB_RB0_S7_BN0E_CH0 2 W0/RB4/7+Forward W0/RB4/7-Forward +LB_RB0_S7_BN0E_CH2 3 W0/RB3/7+Forward W0/RB3/7-Forward +LB_RB0_S7_BP0E_CH0 5 W0/RB4/7+Backward W0/RB4/7-Backward +LB_RB0_S7_BP0E_CH2 6 W0/RB3/7+Backward W0/RB3/7-Backward +LB_RB0_S7_BM0C_CH1 7 W0/RB2in/7Forward _ +LB_RB0_S7_BM0C_CH0 8 W0/RB2in/7Central _ +LB_RB0_S7_BM0C_CH2 9 W0/RB2in/7Backward _ +LB_RB0_S7_BN0B_CH1 14 W0/RB2out/7Forward _ +LB_RB0_S7_BN0B_CH0 15 W0/RB1out/7Forward _ +LB_RB0_S7_BN0B_CH2 16 W0/RB1in/7Forward _ +LB_RB0_S7_BP0B_CH1 17 W0/RB2out/7Backward _ +LB_RB0_S7_BP0B_CH0 18 W0/RB1out/7Backward _ +LB_RB0_S7_BP0B_CH2 19 W0/RB1in/7Backward _ + +LB_RB0_S8_BN0E_CH0 2 W0/RB4/8+Forward W0/RB4/8-Forward +LB_RB0_S8_BN0E_CH2 3 W0/RB3/8+Forward W0/RB3/8-Forward +LB_RB0_S8_BP0E_CH0 5 W0/RB4/8+Backward W0/RB4/8-Backward +LB_RB0_S8_BP0E_CH2 6 W0/RB3/8+Backward W0/RB3/8-Backward +LB_RB0_S8_BM0C_CH1 7 W0/RB2in/8Forward _ +LB_RB0_S8_BM0C_CH0 8 W0/RB2in/8Central _ +LB_RB0_S8_BM0C_CH2 9 W0/RB2in/8Backward _ +LB_RB0_S8_BN0B_CH1 14 W0/RB2out/8Forward _ +LB_RB0_S8_BN0B_CH0 15 W0/RB1out/8Forward _ +LB_RB0_S8_BN0B_CH2 16 W0/RB1in/8Forward _ +LB_RB0_S8_BP0B_CH1 17 W0/RB2out/8Backward _ +LB_RB0_S8_BP0B_CH0 18 W0/RB1out/8Backward _ +LB_RB0_S8_BP0B_CH2 19 W0/RB1in/8Backward _ + +LB_RB0_S9_BN0E_CH0 2 W0/RB4/9Forward _ +LB_RB0_S9_BN0E_CH2 3 W0/RB3/9+Forward W0/RB3/9-Forward +LB_RB0_S9_BP0E_CH0 5 W0/RB4/9Backward _ +LB_RB0_S9_BP0E_CH2 6 W0/RB3/9+Backward W0/RB3/9-Backward +LB_RB0_S9_BM0C_CH1 7 W0/RB2in/9Forward _ +LB_RB0_S9_BM0C_CH0 8 W0/RB2in/9Central _ +LB_RB0_S9_BM0C_CH2 9 W0/RB2in/9Backward _ +LB_RB0_S9_BN0B_CH1 14 W0/RB2out/9Forward _ +LB_RB0_S9_BN0B_CH0 15 W0/RB1out/9Forward _ +LB_RB0_S9_BN0B_CH2 16 W0/RB1in/9Forward _ +LB_RB0_S9_BP0B_CH1 17 W0/RB2out/9Backward _ +LB_RB0_S9_BP0B_CH0 18 W0/RB1out/9Backward _ +LB_RB0_S9_BP0B_CH2 19 W0/RB1in/9Backward _ + +LB_RE-1_S1_EN12_CH1 4 RE-1/2/36 _ +LB_RE-1_S1_EN12_CH0 5 RE-1/2/1 _ +LB_RE-1_S1_EN12_CH2 6 RE-1/2/2 _ +LB_RE-1_S1_EN13_CH1 7 RE-1/3/36 _ +LB_RE-1_S1_EN13_CH0 8 RE-1/3/1 _ +LB_RE-1_S1_EN13_CH2 9 RE-1/3/2 _ +LB_RE-1_S1_EN22_CH1 14 RE-2/2/2 _ +LB_RE-1_S1_EN22_CH0 15 RE-2/2/3 _ +LB_RE-1_S1_EN22_CH2 16 RE-2/2/4 _ +LB_RE-1_S1_EN23_CH1 17 RE-2/3/2 _ +LB_RE-1_S1_EN23_CH0 18 RE-2/3/3 _ +LB_RE-1_S1_EN23_CH2 19 RE-2/3/4 _ + +LB_RE-1_S10_EN12_CH1 4 RE-1/2/27 _ +LB_RE-1_S10_EN12_CH0 5 RE-1/2/28 _ +LB_RE-1_S10_EN12_CH2 6 RE-1/2/29 _ +LB_RE-1_S10_EN13_CH1 7 RE-1/3/27 _ +LB_RE-1_S10_EN13_CH0 8 RE-1/3/28 _ +LB_RE-1_S10_EN13_CH2 9 RE-1/3/29 _ +LB_RE-1_S10_EN22_CH1 14 RE-2/2/29 _ +LB_RE-1_S10_EN22_CH0 15 RE-2/2/30 _ +LB_RE-1_S10_EN22_CH2 16 RE-2/2/31 _ +LB_RE-1_S10_EN23_CH1 17 RE-2/3/29 _ +LB_RE-1_S10_EN23_CH0 18 RE-2/3/30 _ +LB_RE-1_S10_EN23_CH2 19 RE-2/3/31 _ + +LB_RE-1_S11_EN12_CH1 4 RE-1/2/30 _ +LB_RE-1_S11_EN12_CH0 5 RE-1/2/31 _ +LB_RE-1_S11_EN12_CH2 6 RE-1/2/32 _ +LB_RE-1_S11_EN13_CH1 7 RE-1/3/30 _ +LB_RE-1_S11_EN13_CH0 8 RE-1/3/31 _ +LB_RE-1_S11_EN13_CH2 9 RE-1/3/32 _ +LB_RE-1_S11_EN22_CH1 14 RE-2/2/32 _ +LB_RE-1_S11_EN22_CH0 15 RE-2/2/33 _ +LB_RE-1_S11_EN22_CH2 16 RE-2/2/34 _ +LB_RE-1_S11_EN23_CH1 17 RE-2/3/32 _ +LB_RE-1_S11_EN23_CH0 18 RE-2/3/33 _ +LB_RE-1_S11_EN23_CH2 19 RE-2/3/34 _ + +LB_RE-1_S12_EN12_CH1 4 RE-1/2/33 _ +LB_RE-1_S12_EN12_CH0 5 RE-1/2/34 _ +LB_RE-1_S12_EN12_CH2 6 RE-1/2/35 _ +LB_RE-1_S12_EN13_CH1 7 RE-1/3/33 _ +LB_RE-1_S12_EN13_CH0 8 RE-1/3/34 _ +LB_RE-1_S12_EN13_CH2 9 RE-1/3/35 _ +LB_RE-1_S12_EN22_CH1 14 RE-2/2/35 _ +LB_RE-1_S12_EN22_CH0 15 RE-2/2/36 _ +LB_RE-1_S12_EN22_CH2 16 RE-2/2/1 _ +LB_RE-1_S12_EN23_CH1 17 RE-2/3/35 _ +LB_RE-1_S12_EN23_CH0 18 RE-2/3/36 _ +LB_RE-1_S12_EN23_CH2 19 RE-2/3/1 _ + +LB_RE-1_S2_EN12_CH1 4 RE-1/2/3 _ +LB_RE-1_S2_EN12_CH0 5 RE-1/2/4 _ +LB_RE-1_S2_EN12_CH2 6 RE-1/2/5 _ +LB_RE-1_S2_EN13_CH1 7 RE-1/3/3 _ +LB_RE-1_S2_EN13_CH0 8 RE-1/3/4 _ +LB_RE-1_S2_EN13_CH2 9 RE-1/3/5 _ +LB_RE-1_S2_EN22_CH1 14 RE-2/2/5 _ +LB_RE-1_S2_EN22_CH0 15 RE-2/2/6 _ +LB_RE-1_S2_EN22_CH2 16 RE-2/2/7 _ +LB_RE-1_S2_EN23_CH1 17 RE-2/3/5 _ +LB_RE-1_S2_EN23_CH0 18 RE-2/3/6 _ +LB_RE-1_S2_EN23_CH2 19 RE-2/3/7 _ + +LB_RE-1_S3_EN12_CH1 4 RE-1/2/6 _ +LB_RE-1_S3_EN12_CH0 5 RE-1/2/7 _ +LB_RE-1_S3_EN12_CH2 6 RE-1/2/8 _ +LB_RE-1_S3_EN13_CH1 7 RE-1/3/6 _ +LB_RE-1_S3_EN13_CH0 8 RE-1/3/7 _ +LB_RE-1_S3_EN13_CH2 9 RE-1/3/8 _ +LB_RE-1_S3_EN22_CH1 14 RE-2/2/8 _ +LB_RE-1_S3_EN22_CH0 15 RE-2/2/9 _ +LB_RE-1_S3_EN22_CH2 16 RE-2/2/10 _ +LB_RE-1_S3_EN23_CH1 17 RE-2/3/8 _ +LB_RE-1_S3_EN23_CH0 18 RE-2/3/9 _ +LB_RE-1_S3_EN23_CH2 19 RE-2/3/10 _ + +LB_RE-1_S4_EN12_CH1 4 RE-1/2/9 _ +LB_RE-1_S4_EN12_CH0 5 RE-1/2/10 _ +LB_RE-1_S4_EN12_CH2 6 RE-1/2/11 _ +LB_RE-1_S4_EN13_CH1 7 RE-1/3/9 _ +LB_RE-1_S4_EN13_CH0 8 RE-1/3/10 _ +LB_RE-1_S4_EN13_CH2 9 RE-1/3/11 _ +LB_RE-1_S4_EN22_CH1 14 RE-2/2/11 _ +LB_RE-1_S4_EN22_CH0 15 RE-2/2/12 _ +LB_RE-1_S4_EN22_CH2 16 RE-2/2/13 _ +LB_RE-1_S4_EN23_CH1 17 RE-2/3/11 _ +LB_RE-1_S4_EN23_CH0 18 RE-2/3/12 _ +LB_RE-1_S4_EN23_CH2 19 RE-2/3/13 _ + +LB_RE-1_S5_EN12_CH1 4 RE-1/2/12 _ +LB_RE-1_S5_EN12_CH0 5 RE-1/2/13 _ +LB_RE-1_S5_EN12_CH2 6 RE-1/2/14 _ +LB_RE-1_S5_EN13_CH1 7 RE-1/3/12 _ +LB_RE-1_S5_EN13_CH0 8 RE-1/3/13 _ +LB_RE-1_S5_EN13_CH2 9 RE-1/3/14 _ +LB_RE-1_S5_EN22_CH1 14 RE-2/2/14 _ +LB_RE-1_S5_EN22_CH0 15 RE-2/2/15 _ +LB_RE-1_S5_EN22_CH2 16 RE-2/2/16 _ +LB_RE-1_S5_EN23_CH1 17 RE-2/3/14 _ +LB_RE-1_S5_EN23_CH0 18 RE-2/3/15 _ +LB_RE-1_S5_EN23_CH2 19 RE-2/3/16 _ + +LB_RE-1_S6_EN12_CH1 4 RE-1/2/15 _ +LB_RE-1_S6_EN12_CH0 5 RE-1/2/16 _ +LB_RE-1_S6_EN12_CH2 6 RE-1/2/17 _ +LB_RE-1_S6_EN13_CH1 7 RE-1/3/15 _ +LB_RE-1_S6_EN13_CH0 8 RE-1/3/16 _ +LB_RE-1_S6_EN13_CH2 9 RE-1/3/17 _ +LB_RE-1_S6_EN22_CH1 14 RE-2/2/17 _ +LB_RE-1_S6_EN22_CH0 15 RE-2/2/18 _ +LB_RE-1_S6_EN22_CH2 16 RE-2/2/19 _ +LB_RE-1_S6_EN23_CH1 17 RE-2/3/17 _ +LB_RE-1_S6_EN23_CH0 18 RE-2/3/18 _ +LB_RE-1_S6_EN23_CH2 19 RE-2/3/19 _ + +LB_RE-1_S7_EN12_CH1 4 RE-1/2/18 _ +LB_RE-1_S7_EN12_CH0 5 RE-1/2/19 _ +LB_RE-1_S7_EN12_CH2 6 RE-1/2/20 _ +LB_RE-1_S7_EN13_CH1 7 RE-1/3/18 _ +LB_RE-1_S7_EN13_CH0 8 RE-1/3/19 _ +LB_RE-1_S7_EN13_CH2 9 RE-1/3/20 _ +LB_RE-1_S7_EN22_CH1 14 RE-2/2/20 _ +LB_RE-1_S7_EN22_CH0 15 RE-2/2/21 _ +LB_RE-1_S7_EN22_CH2 16 RE-2/2/22 _ +LB_RE-1_S7_EN23_CH1 17 RE-2/3/20 _ +LB_RE-1_S7_EN23_CH0 18 RE-2/3/21 _ +LB_RE-1_S7_EN23_CH2 19 RE-2/3/22 _ + +LB_RE-1_S8_EN12_CH1 4 RE-1/2/21 _ +LB_RE-1_S8_EN12_CH0 5 RE-1/2/22 _ +LB_RE-1_S8_EN12_CH2 6 RE-1/2/23 _ +LB_RE-1_S8_EN13_CH1 7 RE-1/3/21 _ +LB_RE-1_S8_EN13_CH0 8 RE-1/3/22 _ +LB_RE-1_S8_EN13_CH2 9 RE-1/3/23 _ +LB_RE-1_S8_EN22_CH1 14 RE-2/2/23 _ +LB_RE-1_S8_EN22_CH0 15 RE-2/2/24 _ +LB_RE-1_S8_EN22_CH2 16 RE-2/2/25 _ +LB_RE-1_S8_EN23_CH1 17 RE-2/3/23 _ +LB_RE-1_S8_EN23_CH0 18 RE-2/3/24 _ +LB_RE-1_S8_EN23_CH2 19 RE-2/3/25 _ + +LB_RE-1_S9_EN12_CH1 4 RE-1/2/24 _ +LB_RE-1_S9_EN12_CH0 5 RE-1/2/25 _ +LB_RE-1_S9_EN12_CH2 6 RE-1/2/26 _ +LB_RE-1_S9_EN13_CH1 7 RE-1/3/24 _ +LB_RE-1_S9_EN13_CH0 8 RE-1/3/25 _ +LB_RE-1_S9_EN13_CH2 9 RE-1/3/26 _ +LB_RE-1_S9_EN22_CH1 14 RE-2/2/26 _ +LB_RE-1_S9_EN22_CH0 15 RE-2/2/27 _ +LB_RE-1_S9_EN22_CH2 16 RE-2/2/28 _ +LB_RE-1_S9_EN23_CH1 17 RE-2/3/26 _ +LB_RE-1_S9_EN23_CH0 18 RE-2/3/27 _ +LB_RE-1_S9_EN23_CH2 19 RE-2/3/28 _ + +LB_RE-4_S10_EN42_CH1 4 RE-4/2/27 _ +LB_RE-4_S10_EN42_CH0 5 RE-4/2/28 _ +LB_RE-4_S10_EN42_CH2 6 RE-4/2/29 _ +LB_RE-4_S10_EN43_CH1 7 RE-4/3/27 _ +LB_RE-4_S10_EN43_CH0 8 RE-4/3/28 _ +LB_RE-4_S10_EN43_CH2 9 RE-4/3/29 _ +LB_RE-4_S11_EN42_CH1 14 RE-4/2/30 _ +LB_RE-4_S11_EN42_CH0 15 RE-4/2/31 _ +LB_RE-4_S11_EN42_CH2 16 RE-4/2/32 _ +LB_RE-4_S11_EN43_CH1 17 RE-4/3/30 _ +LB_RE-4_S11_EN43_CH0 18 RE-4/3/31 _ +LB_RE-4_S11_EN43_CH2 19 RE-4/3/32 _ + +LB_RE-4_S12_EN42_CH1 4 RE-4/2/33 _ +LB_RE-4_S12_EN42_CH0 5 RE-4/2/34 _ +LB_RE-4_S12_EN42_CH2 6 RE-4/2/35 _ +LB_RE-4_S12_EN43_CH1 7 RE-4/3/33 _ +LB_RE-4_S12_EN43_CH0 8 RE-4/3/34 _ +LB_RE-4_S12_EN43_CH2 9 RE-4/3/35 _ +LB_RE-4_S1_EN42_CH1 14 RE-4/2/36 _ +LB_RE-4_S1_EN42_CH0 15 RE-4/2/1 _ +LB_RE-4_S1_EN42_CH2 16 RE-4/2/2 _ +LB_RE-4_S1_EN43_CH1 17 RE-4/3/36 _ +LB_RE-4_S1_EN43_CH0 18 RE-4/3/1 _ +LB_RE-4_S1_EN43_CH2 19 RE-4/3/2 _ + +LB_RE-4_S2_EN42_CH1 4 RE-4/2/3 _ +LB_RE-4_S2_EN42_CH0 5 RE-4/2/4 _ +LB_RE-4_S2_EN42_CH2 6 RE-4/2/5 _ +LB_RE-4_S2_EN43_CH1 7 RE-4/3/3 _ +LB_RE-4_S2_EN43_CH0 8 RE-4/3/4 _ +LB_RE-4_S2_EN43_CH2 9 RE-4/3/5 _ +LB_RE-4_S3_EN42_CH1 14 RE-4/2/6 _ +LB_RE-4_S3_EN42_CH0 15 RE-4/2/7 _ +LB_RE-4_S3_EN42_CH2 16 RE-4/2/8 _ +LB_RE-4_S3_EN43_CH1 17 RE-4/3/6 _ +LB_RE-4_S3_EN43_CH0 18 RE-4/3/7 _ +LB_RE-4_S3_EN43_CH2 19 RE-4/3/8 _ + +LB_RE-4_S4_EN42_CH1 4 RE-4/2/9 _ +LB_RE-4_S4_EN42_CH0 5 RE-4/2/10 _ +LB_RE-4_S4_EN42_CH2 6 RE-4/2/11 _ +LB_RE-4_S4_EN43_CH1 7 RE-4/3/9 _ +LB_RE-4_S4_EN43_CH0 8 RE-4/3/10 _ +LB_RE-4_S4_EN43_CH2 9 RE-4/3/11 _ +LB_RE-4_S5_EN42_CH1 14 RE-4/2/12 _ +LB_RE-4_S5_EN42_CH0 15 RE-4/2/13 _ +LB_RE-4_S5_EN42_CH2 16 RE-4/2/14 _ +LB_RE-4_S5_EN43_CH1 17 RE-4/3/12 _ +LB_RE-4_S5_EN43_CH0 18 RE-4/3/13 _ +LB_RE-4_S5_EN43_CH2 19 RE-4/3/14 _ + +LB_RE-4_S6_EN42_CH1 4 RE-4/2/15 _ +LB_RE-4_S6_EN42_CH0 5 RE-4/2/16 _ +LB_RE-4_S6_EN42_CH2 6 RE-4/2/17 _ +LB_RE-4_S6_EN43_CH1 7 RE-4/3/15 _ +LB_RE-4_S6_EN43_CH0 8 RE-4/3/16 _ +LB_RE-4_S6_EN43_CH2 9 RE-4/3/17 _ +LB_RE-4_S7_EN42_CH1 14 RE-4/2/18 _ +LB_RE-4_S7_EN42_CH0 15 RE-4/2/19 _ +LB_RE-4_S7_EN42_CH2 16 RE-4/2/20 _ +LB_RE-4_S7_EN43_CH1 17 RE-4/3/18 _ +LB_RE-4_S7_EN43_CH0 18 RE-4/3/19 _ +LB_RE-4_S7_EN43_CH2 19 RE-4/3/20 _ + +LB_RE-4_S8_EN42_CH1 4 RE-4/2/21 _ +LB_RE-4_S8_EN42_CH0 5 RE-4/2/22 _ +LB_RE-4_S8_EN42_CH2 6 RE-4/2/23 _ +LB_RE-4_S8_EN43_CH1 7 RE-4/3/21 _ +LB_RE-4_S8_EN43_CH0 8 RE-4/3/22 _ +LB_RE-4_S8_EN43_CH2 9 RE-4/3/23 _ +LB_RE-4_S9_EN42_CH1 14 RE-4/2/24 _ +LB_RE-4_S9_EN42_CH0 15 RE-4/2/25 _ +LB_RE-4_S9_EN42_CH2 16 RE-4/2/26 _ +LB_RE-4_S9_EN43_CH1 17 RE-4/3/24 _ +LB_RE-4_S9_EN43_CH0 18 RE-4/3/25 _ +LB_RE-4_S9_EN43_CH2 19 RE-4/3/26 _ + +LB_RE-3_S10_EN32_CH1 4 RE-3/2/27 _ +LB_RE-3_S10_EN32_CH0 5 RE-3/2/28 _ +LB_RE-3_S10_EN32_CH2 6 RE-3/2/29 _ +LB_RE-3_S10_EN33_CH1 7 RE-3/3/27 _ +LB_RE-3_S10_EN33_CH0 8 RE-3/3/28 _ +LB_RE-3_S10_EN33_CH2 9 RE-3/3/29 _ +LB_RE-3_S11_EN32_CH1 14 RE-3/2/30 _ +LB_RE-3_S11_EN32_CH0 15 RE-3/2/31 _ +LB_RE-3_S11_EN32_CH2 16 RE-3/2/32 _ +LB_RE-3_S11_EN33_CH1 17 RE-3/3/30 _ +LB_RE-3_S11_EN33_CH0 18 RE-3/3/31 _ +LB_RE-3_S11_EN33_CH2 19 RE-3/3/32 _ + +LB_RE-3_S12_EN32_CH1 4 RE-3/2/33 _ +LB_RE-3_S12_EN32_CH0 5 RE-3/2/34 _ +LB_RE-3_S12_EN32_CH2 6 RE-3/2/35 _ +LB_RE-3_S12_EN33_CH1 7 RE-3/3/33 _ +LB_RE-3_S12_EN33_CH0 8 RE-3/3/34 _ +LB_RE-3_S12_EN33_CH2 9 RE-3/3/35 _ +LB_RE-3_S1_EN32_CH1 14 RE-3/2/36 _ +LB_RE-3_S1_EN32_CH0 15 RE-3/2/1 _ +LB_RE-3_S1_EN32_CH2 16 RE-3/2/2 _ +LB_RE-3_S1_EN33_CH1 17 RE-3/3/36 _ +LB_RE-3_S1_EN33_CH0 18 RE-3/3/1 _ +LB_RE-3_S1_EN33_CH2 19 RE-3/3/2 _ + +LB_RE-3_S2_EN32_CH1 4 RE-3/2/3 _ +LB_RE-3_S2_EN32_CH0 5 RE-3/2/4 _ +LB_RE-3_S2_EN32_CH2 6 RE-3/2/5 _ +LB_RE-3_S2_EN33_CH1 7 RE-3/3/3 _ +LB_RE-3_S2_EN33_CH0 8 RE-3/3/4 _ +LB_RE-3_S2_EN33_CH2 9 RE-3/3/5 _ +LB_RE-3_S3_EN32_CH1 14 RE-3/2/6 _ +LB_RE-3_S3_EN32_CH0 15 RE-3/2/7 _ +LB_RE-3_S3_EN32_CH2 16 RE-3/2/8 _ +LB_RE-3_S3_EN33_CH1 17 RE-3/3/6 _ +LB_RE-3_S3_EN33_CH0 18 RE-3/3/7 _ +LB_RE-3_S3_EN33_CH2 19 RE-3/3/8 _ + +LB_RE-3_S4_EN32_CH1 4 RE-3/2/9 _ +LB_RE-3_S4_EN32_CH0 5 RE-3/2/10 _ +LB_RE-3_S4_EN32_CH2 6 RE-3/2/11 _ +LB_RE-3_S4_EN33_CH1 7 RE-3/3/9 _ +LB_RE-3_S4_EN33_CH0 8 RE-3/3/10 _ +LB_RE-3_S4_EN33_CH2 9 RE-3/3/11 _ +LB_RE-3_S5_EN32_CH1 14 RE-3/2/12 _ +LB_RE-3_S5_EN32_CH0 15 RE-3/2/13 _ +LB_RE-3_S5_EN32_CH2 16 RE-3/2/14 _ +LB_RE-3_S5_EN33_CH1 17 RE-3/3/12 _ +LB_RE-3_S5_EN33_CH0 18 RE-3/3/13 _ +LB_RE-3_S5_EN33_CH2 19 RE-3/3/14 _ + +LB_RE-3_S6_EN32_CH1 4 RE-3/2/15 _ +LB_RE-3_S6_EN32_CH0 5 RE-3/2/16 _ +LB_RE-3_S6_EN32_CH2 6 RE-3/2/17 _ +LB_RE-3_S6_EN33_CH1 7 RE-3/3/15 _ +LB_RE-3_S6_EN33_CH0 8 RE-3/3/16 _ +LB_RE-3_S6_EN33_CH2 9 RE-3/3/17 _ +LB_RE-3_S7_EN32_CH1 14 RE-3/2/18 _ +LB_RE-3_S7_EN32_CH0 15 RE-3/2/19 _ +LB_RE-3_S7_EN32_CH2 16 RE-3/2/20 _ +LB_RE-3_S7_EN33_CH1 17 RE-3/3/18 _ +LB_RE-3_S7_EN33_CH0 18 RE-3/3/19 _ +LB_RE-3_S7_EN33_CH2 19 RE-3/3/20 _ + +LB_RE-3_S8_EN32_CH1 4 RE-3/2/21 _ +LB_RE-3_S8_EN32_CH0 5 RE-3/2/22 _ +LB_RE-3_S8_EN32_CH2 6 RE-3/2/23 _ +LB_RE-3_S8_EN33_CH1 7 RE-3/3/21 _ +LB_RE-3_S8_EN33_CH0 8 RE-3/3/22 _ +LB_RE-3_S8_EN33_CH2 9 RE-3/3/23 _ +LB_RE-3_S9_EN32_CH1 14 RE-3/2/24 _ +LB_RE-3_S9_EN32_CH0 15 RE-3/2/25 _ +LB_RE-3_S9_EN32_CH2 16 RE-3/2/26 _ +LB_RE-3_S9_EN33_CH1 17 RE-3/3/24 _ +LB_RE-3_S9_EN33_CH0 18 RE-3/3/25 _ +LB_RE-3_S9_EN33_CH2 19 RE-3/3/26 _ + +LB_RE+1_S1_EP12_CH1 4 RE+1/2/36 _ +LB_RE+1_S1_EP12_CH0 5 RE+1/2/1 _ +LB_RE+1_S1_EP12_CH2 6 RE+1/2/2 _ +LB_RE+1_S1_EP13_CH1 7 RE+1/3/36 _ +LB_RE+1_S1_EP13_CH0 8 RE+1/3/1 _ +LB_RE+1_S1_EP13_CH2 9 RE+1/3/2 _ +LB_RE+1_S1_EP22_CH1 14 RE+2/2/2 _ +LB_RE+1_S1_EP22_CH0 15 RE+2/2/3 _ +LB_RE+1_S1_EP22_CH2 16 RE+2/2/4 _ +LB_RE+1_S1_EP23_CH1 17 RE+2/3/2 _ +LB_RE+1_S1_EP23_CH0 18 RE+2/3/3 _ +LB_RE+1_S1_EP23_CH2 19 RE+2/3/4 _ + +LB_RE+1_S10_EP12_CH1 4 RE+1/2/27 _ +LB_RE+1_S10_EP12_CH0 5 RE+1/2/28 _ +LB_RE+1_S10_EP12_CH2 6 RE+1/2/29 _ +LB_RE+1_S10_EP13_CH1 7 RE+1/3/27 _ +LB_RE+1_S10_EP13_CH0 8 RE+1/3/28 _ +LB_RE+1_S10_EP13_CH2 9 RE+1/3/29 _ +LB_RE+1_S10_EP22_CH1 14 RE+2/2/29 _ +LB_RE+1_S10_EP22_CH0 15 RE+2/2/30 _ +LB_RE+1_S10_EP22_CH2 16 RE+2/2/31 _ +LB_RE+1_S10_EP23_CH1 17 RE+2/3/29 _ +LB_RE+1_S10_EP23_CH0 18 RE+2/3/30 _ +LB_RE+1_S10_EP23_CH2 19 RE+2/3/31 _ + +LB_RE+1_S11_EP12_CH1 4 RE+1/2/30 _ +LB_RE+1_S11_EP12_CH0 5 RE+1/2/31 _ +LB_RE+1_S11_EP12_CH2 6 RE+1/2/32 _ +LB_RE+1_S11_EP13_CH1 7 RE+1/3/30 _ +LB_RE+1_S11_EP13_CH0 8 RE+1/3/31 _ +LB_RE+1_S11_EP13_CH2 9 RE+1/3/32 _ +LB_RE+1_S11_EP22_CH1 14 RE+2/2/32 _ +LB_RE+1_S11_EP22_CH0 15 RE+2/2/33 _ +LB_RE+1_S11_EP22_CH2 16 RE+2/2/34 _ +LB_RE+1_S11_EP23_CH1 17 RE+2/3/32 _ +LB_RE+1_S11_EP23_CH0 18 RE+2/3/33 _ +LB_RE+1_S11_EP23_CH2 19 RE+2/3/34 _ + +LB_RE+1_S12_EP12_CH1 4 RE+1/2/33 _ +LB_RE+1_S12_EP12_CH0 5 RE+1/2/34 _ +LB_RE+1_S12_EP12_CH2 6 RE+1/2/35 _ +LB_RE+1_S12_EP13_CH1 7 RE+1/3/33 _ +LB_RE+1_S12_EP13_CH0 8 RE+1/3/34 _ +LB_RE+1_S12_EP13_CH2 9 RE+1/3/35 _ +LB_RE+1_S12_EP22_CH1 14 RE+2/2/35 _ +LB_RE+1_S12_EP22_CH0 15 RE+2/2/36 _ +LB_RE+1_S12_EP22_CH2 16 RE+2/2/1 _ +LB_RE+1_S12_EP23_CH1 17 RE+2/3/35 _ +LB_RE+1_S12_EP23_CH0 18 RE+2/3/36 _ +LB_RE+1_S12_EP23_CH2 19 RE+2/3/1 _ + +LB_RE+1_S2_EP12_CH1 4 RE+1/2/3 _ +LB_RE+1_S2_EP12_CH0 5 RE+1/2/4 _ +LB_RE+1_S2_EP12_CH2 6 RE+1/2/5 _ +LB_RE+1_S2_EP13_CH1 7 RE+1/3/3 _ +LB_RE+1_S2_EP13_CH0 8 RE+1/3/4 _ +LB_RE+1_S2_EP13_CH2 9 RE+1/3/5 _ +LB_RE+1_S2_EP22_CH1 14 RE+2/2/5 _ +LB_RE+1_S2_EP22_CH0 15 RE+2/2/6 _ +LB_RE+1_S2_EP22_CH2 16 RE+2/2/7 _ +LB_RE+1_S2_EP23_CH1 17 RE+2/3/5 _ +LB_RE+1_S2_EP23_CH0 18 RE+2/3/6 _ +LB_RE+1_S2_EP23_CH2 19 RE+2/3/7 _ + +LB_RE+1_S2_EP11_CH0 2 RE+1/1/3 _ +LB_RE+1_S2_EP11_CH2 3 RE+1/1/4 _ +LB_RE+1_S3_EP12_CH1 4 RE+1/2/6 _ +LB_RE+1_S3_EP12_CH0 5 RE+1/2/7 _ +LB_RE+1_S3_EP12_CH2 6 RE+1/2/8 _ +LB_RE+1_S3_EP13_CH1 7 RE+1/3/6 _ +LB_RE+1_S3_EP13_CH0 8 RE+1/3/7 _ +LB_RE+1_S3_EP13_CH2 9 RE+1/3/8 _ +LB_RE+1_S1_EP11_CH0 12 RE+1/1/1 _ +LB_RE+1_S1_EP11_CH2 13 RE+1/1/2 _ +LB_RE+1_S3_EP22_CH1 14 RE+2/2/8 _ +LB_RE+1_S3_EP22_CH0 15 RE+2/2/9 _ +LB_RE+1_S3_EP22_CH2 16 RE+2/2/10 _ +LB_RE+1_S3_EP23_CH1 17 RE+2/3/8 _ +LB_RE+1_S3_EP23_CH0 18 RE+2/3/9 _ +LB_RE+1_S3_EP23_CH2 19 RE+2/3/10 _ + +LB_RE+1_S4_EP12_CH1 4 RE+1/2/9 _ +LB_RE+1_S4_EP12_CH0 5 RE+1/2/10 _ +LB_RE+1_S4_EP12_CH2 6 RE+1/2/11 _ +LB_RE+1_S4_EP13_CH1 7 RE+1/3/9 _ +LB_RE+1_S4_EP13_CH0 8 RE+1/3/10 _ +LB_RE+1_S4_EP13_CH2 9 RE+1/3/11 _ +LB_RE+1_S4_EP22_CH1 14 RE+2/2/11 _ +LB_RE+1_S4_EP22_CH0 15 RE+2/2/12 _ +LB_RE+1_S4_EP22_CH2 16 RE+2/2/13 _ +LB_RE+1_S4_EP23_CH1 17 RE+2/3/11 _ +LB_RE+1_S4_EP23_CH0 18 RE+2/3/12 _ +LB_RE+1_S4_EP23_CH2 19 RE+2/3/13 _ + +LB_RE+1_S5_EP12_CH1 4 RE+1/2/12 _ +LB_RE+1_S5_EP12_CH0 5 RE+1/2/13 _ +LB_RE+1_S5_EP12_CH2 6 RE+1/2/14 _ +LB_RE+1_S5_EP13_CH1 7 RE+1/3/12 _ +LB_RE+1_S5_EP13_CH0 8 RE+1/3/13 _ +LB_RE+1_S5_EP13_CH2 9 RE+1/3/14 _ +LB_RE+1_S5_EP22_CH1 14 RE+2/2/14 _ +LB_RE+1_S5_EP22_CH0 15 RE+2/2/15 _ +LB_RE+1_S5_EP22_CH2 16 RE+2/2/16 _ +LB_RE+1_S5_EP23_CH1 17 RE+2/3/14 _ +LB_RE+1_S5_EP23_CH0 18 RE+2/3/15 _ +LB_RE+1_S5_EP23_CH2 19 RE+2/3/16 _ + +LB_RE+1_S6_EP12_CH1 4 RE+1/2/15 _ +LB_RE+1_S6_EP12_CH0 5 RE+1/2/16 _ +LB_RE+1_S6_EP12_CH2 6 RE+1/2/17 _ +LB_RE+1_S6_EP13_CH1 7 RE+1/3/15 _ +LB_RE+1_S6_EP13_CH0 8 RE+1/3/16 _ +LB_RE+1_S6_EP13_CH2 9 RE+1/3/17 _ +LB_RE+1_S6_EP22_CH1 14 RE+2/2/17 _ +LB_RE+1_S6_EP22_CH0 15 RE+2/2/18 _ +LB_RE+1_S6_EP22_CH2 16 RE+2/2/19 _ +LB_RE+1_S6_EP23_CH1 17 RE+2/3/17 _ +LB_RE+1_S6_EP23_CH0 18 RE+2/3/18 _ +LB_RE+1_S6_EP23_CH2 19 RE+2/3/19 _ + +LB_RE+1_S7_EP12_CH1 4 RE+1/2/18 _ +LB_RE+1_S7_EP12_CH0 5 RE+1/2/19 _ +LB_RE+1_S7_EP12_CH2 6 RE+1/2/20 _ +LB_RE+1_S7_EP13_CH1 7 RE+1/3/18 _ +LB_RE+1_S7_EP13_CH0 8 RE+1/3/19 _ +LB_RE+1_S7_EP13_CH2 9 RE+1/3/20 _ +LB_RE+1_S7_EP22_CH1 14 RE+2/2/20 _ +LB_RE+1_S7_EP22_CH0 15 RE+2/2/21 _ +LB_RE+1_S7_EP22_CH2 16 RE+2/2/22 _ +LB_RE+1_S7_EP23_CH1 17 RE+2/3/20 _ +LB_RE+1_S7_EP23_CH0 18 RE+2/3/21 _ +LB_RE+1_S7_EP23_CH2 19 RE+2/3/22 _ + +LB_RE+1_S8_EP12_CH1 4 RE+1/2/21 _ +LB_RE+1_S8_EP12_CH0 5 RE+1/2/22 _ +LB_RE+1_S8_EP12_CH2 6 RE+1/2/23 _ +LB_RE+1_S8_EP13_CH1 7 RE+1/3/21 _ +LB_RE+1_S8_EP13_CH0 8 RE+1/3/22 _ +LB_RE+1_S8_EP13_CH2 9 RE+1/3/23 _ +LB_RE+1_S8_EP22_CH1 14 RE+2/2/23 _ +LB_RE+1_S8_EP22_CH0 15 RE+2/2/24 _ +LB_RE+1_S8_EP22_CH2 16 RE+2/2/25 _ +LB_RE+1_S8_EP23_CH1 17 RE+2/3/23 _ +LB_RE+1_S8_EP23_CH0 18 RE+2/3/24 _ +LB_RE+1_S8_EP23_CH2 19 RE+2/3/25 _ + +LB_RE+1_S9_EP12_CH1 4 RE+1/2/24 _ +LB_RE+1_S9_EP12_CH0 5 RE+1/2/25 _ +LB_RE+1_S9_EP12_CH2 6 RE+1/2/26 _ +LB_RE+1_S9_EP13_CH1 7 RE+1/3/24 _ +LB_RE+1_S9_EP13_CH0 8 RE+1/3/25 _ +LB_RE+1_S9_EP13_CH2 9 RE+1/3/26 _ +LB_RE+1_S9_EP22_CH1 14 RE+2/2/26 _ +LB_RE+1_S9_EP22_CH0 15 RE+2/2/27 _ +LB_RE+1_S9_EP22_CH2 16 RE+2/2/28 _ +LB_RE+1_S9_EP23_CH1 17 RE+2/3/26 _ +LB_RE+1_S9_EP23_CH0 18 RE+2/3/27 _ +LB_RE+1_S9_EP23_CH2 19 RE+2/3/28 _ + +LB_RE+4_S10_EP42_CH1 4 RE+4/2/27 _ +LB_RE+4_S10_EP42_CH0 5 RE+4/2/28 _ +LB_RE+4_S10_EP42_CH2 6 RE+4/2/29 _ +LB_RE+4_S10_EP43_CH1 7 RE+4/3/27 _ +LB_RE+4_S10_EP43_CH0 8 RE+4/3/28 _ +LB_RE+4_S10_EP43_CH2 9 RE+4/3/29 _ +LB_RE+4_S11_EP42_CH1 14 RE+4/2/30 _ +LB_RE+4_S11_EP42_CH0 15 RE+4/2/31 _ +LB_RE+4_S11_EP42_CH2 16 RE+4/2/32 _ +LB_RE+4_S11_EP43_CH1 17 RE+4/3/30 _ +LB_RE+4_S11_EP43_CH0 18 RE+4/3/31 _ +LB_RE+4_S11_EP43_CH2 19 RE+4/3/32 _ + +LB_RE+4_S12_EP42_CH1 4 RE+4/2/33 _ +LB_RE+4_S12_EP42_CH0 5 RE+4/2/34 _ +LB_RE+4_S12_EP42_CH2 6 RE+4/2/35 _ +LB_RE+4_S12_EP43_CH1 7 RE+4/3/33 _ +LB_RE+4_S12_EP43_CH0 8 RE+4/3/34 _ +LB_RE+4_S12_EP43_CH2 9 RE+4/3/35 _ +LB_RE+4_S1_EP42_CH1 14 RE+4/2/36 _ +LB_RE+4_S1_EP42_CH0 15 RE+4/2/1 _ +LB_RE+4_S1_EP42_CH2 16 RE+4/2/2 _ +LB_RE+4_S1_EP43_CH1 17 RE+4/3/36 _ +LB_RE+4_S1_EP43_CH0 18 RE+4/3/1 _ +LB_RE+4_S1_EP43_CH2 19 RE+4/3/2 _ + +LB_RE+4_S2_EP42_CH1 4 RE+4/2/3 _ +LB_RE+4_S2_EP42_CH0 5 RE+4/2/4 _ +LB_RE+4_S2_EP42_CH2 6 RE+4/2/5 _ +LB_RE+4_S2_EP43_CH1 7 RE+4/3/3 _ +LB_RE+4_S2_EP43_CH0 8 RE+4/3/4 _ +LB_RE+4_S2_EP43_CH2 9 RE+4/3/5 _ +LB_RE+4_S3_EP42_CH1 14 RE+4/2/6 _ +LB_RE+4_S3_EP42_CH0 15 RE+4/2/7 _ +LB_RE+4_S3_EP42_CH2 16 RE+4/2/8 _ +LB_RE+4_S3_EP43_CH1 17 RE+4/3/6 _ +LB_RE+4_S3_EP43_CH0 18 RE+4/3/7 _ +LB_RE+4_S3_EP43_CH2 19 RE+4/3/8 _ + +LB_RE+4_S4_EP42_CH1 4 RE+4/2/9 _ +LB_RE+4_S4_EP42_CH0 5 RE+4/2/10 _ +LB_RE+4_S4_EP42_CH2 6 RE+4/2/11 _ +LB_RE+4_S4_EP43_CH1 7 RE+4/3/9 _ +LB_RE+4_S4_EP43_CH0 8 RE+4/3/10 _ +LB_RE+4_S4_EP43_CH2 9 RE+4/3/11 _ +LB_RE+4_S5_EP42_CH1 14 RE+4/2/12 _ +LB_RE+4_S5_EP42_CH0 15 RE+4/2/13 _ +LB_RE+4_S5_EP42_CH2 16 RE+4/2/14 _ +LB_RE+4_S5_EP43_CH1 17 RE+4/3/12 _ +LB_RE+4_S5_EP43_CH0 18 RE+4/3/13 _ +LB_RE+4_S5_EP43_CH2 19 RE+4/3/14 _ + +LB_RE+4_S6_EP42_CH1 4 RE+4/2/15 _ +LB_RE+4_S6_EP42_CH0 5 RE+4/2/16 _ +LB_RE+4_S6_EP42_CH2 6 RE+4/2/17 _ +LB_RE+4_S6_EP43_CH1 7 RE+4/3/15 _ +LB_RE+4_S6_EP43_CH0 8 RE+4/3/16 _ +LB_RE+4_S6_EP43_CH2 9 RE+4/3/17 _ +LB_RE+4_S7_EP42_CH1 14 RE+4/2/18 _ +LB_RE+4_S7_EP42_CH0 15 RE+4/2/19 _ +LB_RE+4_S7_EP42_CH2 16 RE+4/2/20 _ +LB_RE+4_S7_EP43_CH1 17 RE+4/3/18 _ +LB_RE+4_S7_EP43_CH0 18 RE+4/3/19 _ +LB_RE+4_S7_EP43_CH2 19 RE+4/3/20 _ + +LB_RE+4_S8_EP42_CH1 4 RE+4/2/21 _ +LB_RE+4_S8_EP42_CH0 5 RE+4/2/22 _ +LB_RE+4_S8_EP42_CH2 6 RE+4/2/23 _ +LB_RE+4_S8_EP43_CH1 7 RE+4/3/21 _ +LB_RE+4_S8_EP43_CH0 8 RE+4/3/22 _ +LB_RE+4_S8_EP43_CH2 9 RE+4/3/23 _ +LB_RE+4_S9_EP42_CH1 14 RE+4/2/24 _ +LB_RE+4_S9_EP42_CH0 15 RE+4/2/25 _ +LB_RE+4_S9_EP42_CH2 16 RE+4/2/26 _ +LB_RE+4_S9_EP43_CH1 17 RE+4/3/24 _ +LB_RE+4_S9_EP43_CH0 18 RE+4/3/25 _ +LB_RE+4_S9_EP43_CH2 19 RE+4/3/26 _ + +LB_RE+3_S10_EP32_CH1 4 RE+3/2/27 _ +LB_RE+3_S10_EP32_CH0 5 RE+3/2/28 _ +LB_RE+3_S10_EP32_CH2 6 RE+3/2/29 _ +LB_RE+3_S10_EP33_CH1 7 RE+3/3/27 _ +LB_RE+3_S10_EP33_CH0 8 RE+3/3/28 _ +LB_RE+3_S10_EP33_CH2 9 RE+3/3/29 _ +LB_RE+3_S11_EP32_CH1 14 RE+3/2/30 _ +LB_RE+3_S11_EP32_CH0 15 RE+3/2/31 _ +LB_RE+3_S11_EP32_CH2 16 RE+3/2/32 _ +LB_RE+3_S11_EP33_CH1 17 RE+3/3/30 _ +LB_RE+3_S11_EP33_CH0 18 RE+3/3/31 _ +LB_RE+3_S11_EP33_CH2 19 RE+3/3/32 _ + +LB_RE+3_S12_EP32_CH1 4 RE+3/2/33 _ +LB_RE+3_S12_EP32_CH0 5 RE+3/2/34 _ +LB_RE+3_S12_EP32_CH2 6 RE+3/2/35 _ +LB_RE+3_S12_EP33_CH1 7 RE+3/3/33 _ +LB_RE+3_S12_EP33_CH0 8 RE+3/3/34 _ +LB_RE+3_S12_EP33_CH2 9 RE+3/3/35 _ +LB_RE+3_S1_EP32_CH1 14 RE+3/2/36 _ +LB_RE+3_S1_EP32_CH0 15 RE+3/2/1 _ +LB_RE+3_S1_EP32_CH2 16 RE+3/2/2 _ +LB_RE+3_S1_EP33_CH1 17 RE+3/3/36 _ +LB_RE+3_S1_EP33_CH0 18 RE+3/3/1 _ +LB_RE+3_S1_EP33_CH2 19 RE+3/3/2 _ + +LB_RE+3_S2_EP32_CH1 4 RE+3/2/3 _ +LB_RE+3_S2_EP32_CH0 5 RE+3/2/4 _ +LB_RE+3_S2_EP32_CH2 6 RE+3/2/5 _ +LB_RE+3_S2_EP33_CH1 7 RE+3/3/3 _ +LB_RE+3_S2_EP33_CH0 8 RE+3/3/4 _ +LB_RE+3_S2_EP33_CH2 9 RE+3/3/5 _ +LB_RE+3_S3_EP32_CH1 14 RE+3/2/6 _ +LB_RE+3_S3_EP32_CH0 15 RE+3/2/7 _ +LB_RE+3_S3_EP32_CH2 16 RE+3/2/8 _ +LB_RE+3_S3_EP33_CH1 17 RE+3/3/6 _ +LB_RE+3_S3_EP33_CH0 18 RE+3/3/7 _ +LB_RE+3_S3_EP33_CH2 19 RE+3/3/8 _ + +LB_RE+3_S4_EP32_CH1 4 RE+3/2/9 _ +LB_RE+3_S4_EP32_CH0 5 RE+3/2/10 _ +LB_RE+3_S4_EP32_CH2 6 RE+3/2/11 _ +LB_RE+3_S4_EP33_CH1 7 RE+3/3/9 _ +LB_RE+3_S4_EP33_CH0 8 RE+3/3/10 _ +LB_RE+3_S4_EP33_CH2 9 RE+3/3/11 _ +LB_RE+3_S5_EP32_CH1 14 RE+3/2/12 _ +LB_RE+3_S5_EP32_CH0 15 RE+3/2/13 _ +LB_RE+3_S5_EP32_CH2 16 RE+3/2/14 _ +LB_RE+3_S5_EP33_CH1 17 RE+3/3/12 _ +LB_RE+3_S5_EP33_CH0 18 RE+3/3/13 _ +LB_RE+3_S5_EP33_CH2 19 RE+3/3/14 _ + +LB_RE+3_S6_EP32_CH1 4 RE+3/2/15 _ +LB_RE+3_S6_EP32_CH0 5 RE+3/2/16 _ +LB_RE+3_S6_EP32_CH2 6 RE+3/2/17 _ +LB_RE+3_S6_EP33_CH1 7 RE+3/3/15 _ +LB_RE+3_S6_EP33_CH0 8 RE+3/3/16 _ +LB_RE+3_S6_EP33_CH2 9 RE+3/3/17 _ +LB_RE+3_S7_EP32_CH1 14 RE+3/2/18 _ +LB_RE+3_S7_EP32_CH0 15 RE+3/2/19 _ +LB_RE+3_S7_EP32_CH2 16 RE+3/2/20 _ +LB_RE+3_S7_EP33_CH1 17 RE+3/3/18 _ +LB_RE+3_S7_EP33_CH0 18 RE+3/3/19 _ +LB_RE+3_S7_EP33_CH2 19 RE+3/3/20 _ + +LB_RE+3_S8_EP32_CH1 4 RE+3/2/21 _ +LB_RE+3_S8_EP32_CH0 5 RE+3/2/22 _ +LB_RE+3_S8_EP32_CH2 6 RE+3/2/23 _ +LB_RE+3_S8_EP33_CH1 7 RE+3/3/21 _ +LB_RE+3_S8_EP33_CH0 8 RE+3/3/22 _ +LB_RE+3_S8_EP33_CH2 9 RE+3/3/23 _ +LB_RE+3_S9_EP32_CH1 14 RE+3/2/24 _ +LB_RE+3_S9_EP32_CH0 15 RE+3/2/25 _ +LB_RE+3_S9_EP32_CH2 16 RE+3/2/26 _ +LB_RE+3_S9_EP33_CH1 17 RE+3/3/24 _ +LB_RE+3_S9_EP33_CH0 18 RE+3/3/25 _ +LB_RE+3_S9_EP33_CH2 19 RE+3/3/26 _ diff --git a/L1Trigger/RPCTriggerPrimitives/interface/PrimitiveAlgoFactory.h b/L1Trigger/RPCTriggerPrimitives/interface/PrimitiveAlgoFactory.h new file mode 100644 index 0000000000000..1bb8aec5434ec --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/interface/PrimitiveAlgoFactory.h @@ -0,0 +1,9 @@ +#ifndef L1Trigger_PrimitiveAlgoFactory_H +#define L1Trigger_PrimitiveAlgoFactory_H + +#include "FWCore/PluginManager/interface/PluginFactory.h" +#include "RecoLocalMuon/RPCRecHit/interface/RPCRecHitBaseAlgo.h" + +typedef edmplugin::PluginFactory PrimitiveAlgoFactory; + +#endif diff --git a/L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h b/L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h new file mode 100644 index 0000000000000..ade7ee16723b5 --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h @@ -0,0 +1,78 @@ +#ifndef L1Trigger_RPCTriggerPrimitives_PrimitivePreprocess_h +#define L1Trigger_RPCTriggerPrimitives_PrimitivePreprocess_h + +#include "DataFormats/MuonDetId/interface/RPCDetId.h" +#include "DataFormats/RPCDigi/interface/RPCDigiCollection.h" +#include "DataFormats/RPCRecHit/interface/RPCRecHit.h" +#include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/PluginManager/interface/PluginFactory.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "CondFormats/RPCObjects/interface/RPCMaskedStrips.h" +#include "CondFormats/RPCObjects/interface/RPCDeadStrips.h" +#include "CondFormats/DataRecord/interface/RPCMaskedStripsRcd.h" +#include "CondFormats/DataRecord/interface/RPCDeadStripsRcd.h" + +#include "Geometry/RPCGeometry/interface/RPCRoll.h" +#include "Geometry/RPCGeometry/interface/RPCGeometry.h" +#include "Geometry/Records/interface/MuonGeometryRecord.h" + +#include "RecoLocalMuon/RPCRecHit/interface/RPCRecHitBaseAlgo.h" + + +#include "L1Trigger/RPCTriggerPrimitives/interface/PrimitiveAlgoFactory.h" +#include "L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h" + + +#include +#include +#include + +class PrimitivePreprocess{ + + public: + explicit PrimitivePreprocess(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iConsumes); + + ~PrimitivePreprocess(); + + void beginRun(const edm::EventSetup& ); + + void Preprocess(const edm::Event& iEvent, const edm::EventSetup& iSetup, RPCRecHitCollection& primitivedigi); + + + private: + + const edm::EDGetTokenT rpcToken_; + std::array processorvector_; + + edm::FileInPath Mapsource_; + bool ApplyLinkBoardCut_; + int LinkBoardCut_; + int ClusterSizeCut_; + + std::vector Final_MapVector; + + //masking from rpcrechit module + + std::vector MaskVec; + std::vector DeadVec; + + + std::unique_ptr theRPCMaskedStripsObj; + // Object with mask-strips-vector for all the RPC Detectors + + std::unique_ptr theRPCDeadStripsObj; + // Object with dead-strips-vector for all the RPC Detectors + + // The reconstruction algorithm + std::unique_ptr theAlgorithm; + + enum class MaskSource { File, EventSetup } maskSource_, deadSource_; +}; +#endif + diff --git a/L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h b/L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h new file mode 100644 index 0000000000000..4c74fcaeca302 --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h @@ -0,0 +1,88 @@ +#ifndef L1Trigger_RPCTriggerPrimitives_RPCProcessor_h +#define L1Trigger_RPCTriggerPrimitives_RPCProcessor_h + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "DataFormats/MuonDetId/interface/RPCDetId.h" +#include "DataFormats/RPCDigi/interface/RPCDigiCollection.h" +#include "DataFormats/RPCRecHit/interface/RPCRecHit.h" + +#include "DataFormats/RPCRecHit/interface/RPCRecHit.h" +#include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h" + +#include "Geometry/RPCGeometry/interface/RPCRoll.h" +#include "Geometry/RPCGeometry/interface/RPCGeometry.h" +#include "Geometry/Records/interface/MuonGeometryRecord.h" + +#include "RecoLocalMuon/RPCRecHit/interface/RPCRecHitAlgoFactory.h" + +#include "CondFormats/DataRecord/interface/RPCMaskedStripsRcd.h" +#include "CondFormats/DataRecord/interface/RPCDeadStripsRcd.h" +#include "CondFormats/RPCObjects/interface/RPCMaskedStrips.h" +#include "CondFormats/RPCObjects/interface/RPCDeadStrips.h" +#include "CondFormats/Serialization/interface/Serializable.h" + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class RPCProcessor{ + + public: + + explicit RPCProcessor(); + ~RPCProcessor(); + + struct Map_structure { + + std::string linkboard_; + std::string linkboard_ID; + std::string chamber1_; + std::string chamber2_; + COND_SERIALIZABLE; + }; + + void Process(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + const edm::EDGetToken& RPCDigiToken, + RPCRecHitCollection& primitivedigi, + std::unique_ptr& theRPCMaskedStripsObj, + std::unique_ptr& theRPCDeadStripsObj, + std::unique_ptr& theAlgo, + std::map LBName_ChamberID_Map_1, + std::map LBID_ChamberID_Map_1, + std::map LBName_ChamberID_Map_2, + std::map LBID_ChamberID_Map_2, + bool ApplyLinkBoardCut_, + int LinkboardCut, + int ClusterSizeCut ) const; + + static edm::OwnVector ApplyClusterSizeCut(const edm::OwnVector recHits_, int ClusterSizeCut_); + static bool ApplyLinkBoardCut(int NClusters, int LinkboardCut); + + std::vector const & GetMapVector() const {return MapVec;} + std::vector MapVec; + + std::string GetStringBarrel(const int ring_, const int station_, const int sector_, const int layer_, const int subsector_, const int roll_) const; + std::string GetStringEndCap(const int station_, const int ring_, const int chamberID_) const; + + + COND_SERIALIZABLE; + + private: + +}; +#endif + + diff --git a/L1Trigger/RPCTriggerPrimitives/plugins/BuildFile.xml b/L1Trigger/RPCTriggerPrimitives/plugins/BuildFile.xml new file mode 100644 index 0000000000000..98a3106ca3f15 --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/plugins/BuildFile.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.cc b/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.cc new file mode 100644 index 0000000000000..01b7886dce3f6 --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.cc @@ -0,0 +1,37 @@ +// RPCTriggerPrimitives producer for RPPRecHits in L1T Level +// Author Alejandro Segura -- Universidad de los Andes + +#include "L1TMuonRPCTriggerPrimitivesProducer.h" + +L1TMuonRPCTriggerPrimitivesProducer::L1TMuonRPCTriggerPrimitivesProducer(const edm::ParameterSet& iConfig): + preprocess_pointer_(std::make_unique(iConfig, consumesCollector())){ + + produces(); + +} + +L1TMuonRPCTriggerPrimitivesProducer::~L1TMuonRPCTriggerPrimitivesProducer(){ +} + +void L1TMuonRPCTriggerPrimitivesProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup){ + + // Create pointers to the collections which will store the new primitive digis + auto Tprimitive_digis = std::make_unique(); + + + preprocess_pointer_->beginRun(iSetup); + preprocess_pointer_->Preprocess(iEvent, iSetup, *Tprimitive_digis); + // Fill the output collections + iEvent.put(std::move(Tprimitive_digis)); + +} + +void L1TMuonRPCTriggerPrimitivesProducer::beginStream(edm::StreamID iID){ +} + +void L1TMuonRPCTriggerPrimitivesProducer::endStream(){ +} + +// Define this as a plug-in +DEFINE_FWK_MODULE(L1TMuonRPCTriggerPrimitivesProducer); + diff --git a/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.h b/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.h new file mode 100644 index 0000000000000..cc852f98bac5a --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.h @@ -0,0 +1,40 @@ +#ifndef L1Trigger_RPCTriggerPrimitives_L1TMuonRPCTriggerPrimitivesProducer_h +#define L1Trigger_RPCTriggerPrimitives_L1TMuonRPCTriggerPrimitivesProducer_h + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/MuonDetId/interface/RPCDetId.h" +#include "DataFormats/RPCDigi/interface/RPCDigiCollection.h" + +#include "DataFormats/RPCRecHit/interface/RPCRecHit.h" +#include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h" + +#include "TVector3.h" + +#include "L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h" + +// Class declaration + +class L1TMuonRPCTriggerPrimitivesProducer : public edm::stream::EDProducer<>{ + + public: + explicit L1TMuonRPCTriggerPrimitivesProducer(const edm::ParameterSet&); + ~L1TMuonRPCTriggerPrimitivesProducer() override; + + private: + void beginStream(edm::StreamID) override; + void endStream() override; + void produce(edm::Event& event, const edm::EventSetup& setup) override; + + std::unique_ptr preprocess_pointer_; + +}; + +#endif /* #define L1Trigger_RPCTriggerPrimitives_L1TMuonRPCTriggerPrimitivesProducer_h */ + diff --git a/L1Trigger/RPCTriggerPrimitives/python/primitiveRPCProducer_cfi.py b/L1Trigger/RPCTriggerPrimitives/python/primitiveRPCProducer_cfi.py new file mode 100644 index 0000000000000..8402584cea016 --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/python/primitiveRPCProducer_cfi.py @@ -0,0 +1,19 @@ +import FWCore.ParameterSet.Config as cms + +primitiveRPCProducer = cms.EDProducer("L1TMuonRPCTriggerPrimitivesProducer", + Primitiverechitlabel = cms.InputTag("rpcdigis"), + Mapsource = cms.string('L1Trigger/RPCTriggerPrimitives/input/Linkboard_rpc_roll_mapping_lb_chamber2.txt'), + ApplyLinkBoardCut = cms.bool(True), + LinkBoardCut = cms.int32(2), # Number of clusters per linkboard greater than (default >2) are rejected + ClusterSizeCut = cms.int32(3), # Clustersize greater than (default >3) is rejected + maskSource = cms.string('File'), + maskvecfile = cms.FileInPath('RecoLocalMuon/RPCRecHit/data/RPCMaskVec.dat'), + deadSource = cms.string('File'), + deadvecfile = cms.FileInPath('RecoLocalMuon/RPCRecHit/data/RPCDeadVec.dat'), + recAlgoConfig = cms.PSet(), + recAlgo = cms.string('RPCRecHitStandardAlgo') +) + +from Configuration.Eras.Modifier_phase2_muon_cff import phase2_muon +phase2_muon.toModify(primitiveRPCProducer, ApplyLinkBoardCut = cms.bool(False)) +phase2_muon.toModify(primitiveRPCProducer, ClusterSizeCut = cms.int32(4)) diff --git a/L1Trigger/RPCTriggerPrimitives/src/PrimitiveAlgoFactory.cc b/L1Trigger/RPCTriggerPrimitives/src/PrimitiveAlgoFactory.cc new file mode 100644 index 0000000000000..4bc14bca4b81c --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/src/PrimitiveAlgoFactory.cc @@ -0,0 +1,4 @@ +#include "FWCore/PluginManager/interface/PluginFactory.h" +#include "L1Trigger/RPCTriggerPrimitives/interface/PrimitiveAlgoFactory.h" + +EDM_REGISTER_PLUGINFACTORY(PrimitiveAlgoFactory,"PrimitiveAlgoFactory"); diff --git a/L1Trigger/RPCTriggerPrimitives/src/PrimitivePreprocess.cc b/L1Trigger/RPCTriggerPrimitives/src/PrimitivePreprocess.cc new file mode 100644 index 0000000000000..209948c1494fe --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/src/PrimitivePreprocess.cc @@ -0,0 +1,160 @@ +#include "L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h" + +PrimitivePreprocess::PrimitivePreprocess(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iConsumes): + rpcToken_(iConsumes.consumes(iConfig.getParameter("Primitiverechitlabel"))), + processorvector_(), + Mapsource_(iConfig.getParameter("Mapsource")), + ApplyLinkBoardCut_(iConfig.getParameter("ApplyLinkBoardCut")), + LinkBoardCut_(iConfig.getParameter("LinkBoardCut")), + ClusterSizeCut_(iConfig.getParameter("ClusterSizeCut")), + theRPCMaskedStripsObj(nullptr), + theRPCDeadStripsObj(nullptr), + maskSource_(MaskSource::EventSetup), + deadSource_(MaskSource::EventSetup){ + + // Get the concrete reconstruction algo from the factory + const std::string theAlgoName = iConfig.getParameter("recAlgo"); + theAlgorithm.reset(PrimitiveAlgoFactory::get()->create(theAlgoName, + iConfig.getParameter("recAlgoConfig"))); + + + //Get LUT for linkboard map + std::ifstream inputFile(Mapsource_.fullPath().c_str(), std::ios::in); + + if(!inputFile){ + throw cms::Exception("No LUT file") << "Error: Linkboard mapping cannot be opened"; + exit(1); + } + + while( inputFile.good() ){ + RPCProcessor::Map_structure temp; + inputFile >> temp.linkboard_ >> temp.linkboard_ID >> temp.chamber1_ >> temp.chamber2_; + Final_MapVector.push_back(temp); + } + Final_MapVector.pop_back(); + + inputFile.close(); + + + + const std::string maskSource = iConfig.getParameter("maskSource"); + + if (maskSource == "File") { + maskSource_ = MaskSource::File; + edm::FileInPath fp1 = iConfig.getParameter("maskvecfile"); + std::ifstream inputFile_1(fp1.fullPath().c_str(), std::ios::in); + if ( !inputFile_1 ) { + std::cerr << "Masked Strips File cannot not be opened" << std::endl; + exit(1); + } + while ( inputFile_1.good() ) { + RPCMaskedStrips::MaskItem Item; + inputFile_1 >> Item.rawId >> Item.strip; + if ( inputFile_1.good() ) MaskVec.push_back(Item); + } + inputFile_1.close(); + } + + const std::string deadSource = iConfig.getParameter("deadSource"); + + if (deadSource == "File") { + deadSource_ = MaskSource::File; + edm::FileInPath fp2 = iConfig.getParameter("deadvecfile"); + std::ifstream inputFile_2(fp2.fullPath().c_str(), std::ios::in); + if ( !inputFile_2 ) { + std::cerr << "Dead Strips File cannot not be opened" << std::endl; + exit(1); + } + while ( inputFile_2.good() ) { + RPCDeadStrips::DeadItem Item; + inputFile_2 >> Item.rawId >> Item.strip; + if ( inputFile_2.good() ) DeadVec.push_back(Item); + } + inputFile_2.close(); + + } + + //Closing the input files + } + +PrimitivePreprocess::~PrimitivePreprocess(){ +} + +void PrimitivePreprocess::beginRun(const edm::EventSetup& iSetup){ + + // Get masked- and dead-strip information + theRPCMaskedStripsObj = std::make_unique(); + theRPCDeadStripsObj = std::make_unique(); + + // Getting the masked-strip information + if ( maskSource_ == MaskSource::EventSetup ) { + edm::ESHandle readoutMaskedStrips; + iSetup.get().get(readoutMaskedStrips); + const RPCMaskedStrips* tmp_obj = readoutMaskedStrips.product(); + theRPCMaskedStripsObj->MaskVec = tmp_obj->MaskVec; + delete tmp_obj; + } + + + else if ( maskSource_ == MaskSource::File ) { + std::vector::iterator posVec; + for ( posVec = MaskVec.begin(); posVec != MaskVec.end(); ++posVec ) { + RPCMaskedStrips::MaskItem Item; + Item.rawId = (*posVec).rawId; + Item.strip = (*posVec).strip; + theRPCMaskedStripsObj->MaskVec.push_back(Item); + } + } + + // Getting the dead-strip information + + if ( deadSource_ == MaskSource::EventSetup ) { + edm::ESHandle readoutDeadStrips; + iSetup.get().get(readoutDeadStrips); + const RPCDeadStrips* tmp_obj = readoutDeadStrips.product(); + theRPCDeadStripsObj->DeadVec = tmp_obj->DeadVec; + delete tmp_obj; + } + else if ( deadSource_ == MaskSource::File ) { + std::vector::iterator posVec; + for ( posVec = DeadVec.begin(); posVec != DeadVec.end(); ++posVec ) { + RPCDeadStrips::DeadItem Item; + Item.rawId = (*posVec).rawId; + Item.strip = (*posVec).strip; + theRPCDeadStripsObj->DeadVec.push_back(Item); + } + } + +} + +void PrimitivePreprocess::Preprocess(const edm::Event& iEvent, const edm::EventSetup& iSetup, RPCRecHitCollection& primitivedigi){ + //loop over rpcdigis and cluster algorithm + + + std::map LBName_ChamberID_Map_1; + std::map LBID_ChamberID_Map_1; + std::map LBName_ChamberID_Map_2; + std::map LBID_ChamberID_Map_2; + + std::vector::iterator it; + for(it = Final_MapVector.begin(); it != Final_MapVector.end(); it++){ + LBName_ChamberID_Map_1[(*it).chamber1_]=(*it).linkboard_; + LBID_ChamberID_Map_1[(*it).chamber1_]=(*it).linkboard_ID; + if((*it).chamber2_ != "-"){ + LBName_ChamberID_Map_2[(*it).chamber2_]=(*it).linkboard_; + LBID_ChamberID_Map_2[(*it).chamber2_]=(*it).linkboard_ID; + } + } + // map_2 is only necessary for barrel + + + + for(auto& iterator_ : processorvector_){ + iterator_.Process(iEvent, iSetup, rpcToken_, primitivedigi, + theRPCMaskedStripsObj, theRPCDeadStripsObj, theAlgorithm, + LBName_ChamberID_Map_1, LBID_ChamberID_Map_1, LBName_ChamberID_Map_2, LBID_ChamberID_Map_2, + ApplyLinkBoardCut_, LinkBoardCut_, ClusterSizeCut_); + } +} + + diff --git a/L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc b/L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc new file mode 100644 index 0000000000000..ab41154e9ee6c --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc @@ -0,0 +1,307 @@ +#include "L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h" + +RPCProcessor::RPCProcessor(){ +} + +RPCProcessor::~RPCProcessor(){ +} + +void RPCProcessor::Process(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + const edm::EDGetToken& RPCDigiToken, + RPCRecHitCollection& primitivedigi, + std::unique_ptr& theRPCMaskedStripsObj, + std::unique_ptr& theRPCDeadStripsObj, + std::unique_ptr& theAlgo, + std::map LBName_ChamberID_Map_1, + std::map LBID_ChamberID_Map_1, + std::map LBName_ChamberID_Map_2, + std::map LBID_ChamberID_Map_2, + bool ApplyLinkBoardCut_, + int LinkboardCut, + int ClusterSizeCut ) const{ + + + // Get the RPC Geometry + edm::ESHandle rpcGeom; + iSetup.get().get(rpcGeom); + // Get the RPC Digis + edm::Handle rpcdigis; + iEvent.getByToken(RPCDigiToken, rpcdigis); + // Pass the EventSetup to the algo + theAlgo->setES(iSetup); + + + std::map FirstLinkBarrel; + std::map FirstLinkEndCap; + FirstLinkBarrel.clear(); + FirstLinkEndCap.clear(); + + bool PassLinkCutBarrel=true; + bool PassLinkCutEndCap=true; + + + for ( auto rpcdgIt = rpcdigis->begin(); rpcdgIt != rpcdigis->end(); ++rpcdgIt ) { + + // The layerId + const RPCDetId& rpcId = (*rpcdgIt).first; + + // Get the GeomDet from the setup + const RPCRoll* roll = rpcGeom->roll(rpcId); + if (roll == nullptr){ + edm::LogError("BadDigiInput")<<"Failed to find RPCRoll for ID "<MaskVec ) { + if ( tomask.rawId == rawId ) { + const int bit = tomask.strip; + mask.set(bit-1); + } + } + + for ( const auto& tomask : theRPCDeadStripsObj->DeadVec ) { + if ( tomask.rawId == rawId ) { + const int bit = tomask.strip; + mask.set(bit-1); + } + } + + + // Call the reconstruction algorithm + edm::OwnVector recHits = theAlgo->reconstruct(*roll, rpcId, range, mask); + + // LocalError tmpErr; + // LocalPoint point; + // auto digi_pointer = std::make_shared( RPCRecHit(rpcId, 0, 0, 0, point, tmpErr) ); + // recHits.push_back(*digi_pointer.get()); + + // Apply extra Cuts section. + + + //Final rechit vector + edm::OwnVector recHit_output; + + + //Loop over the recHit vector + for(auto &own : recHits){ + + const RPCDetId& rpcId_ = own.rpcId(); + const int region_ = rpcId_.region(); + const int ring_ = rpcId_.ring(); + const int station_ = rpcId_.station(); + const int sector_ = rpcId_.sector(); + const int subsector_ = rpcId_.subsector(); + const int layer_ = rpcId_.layer(); + const int roll_eta_ = rpcId_.roll(); + + //Apply linkboard cut + if(ApplyLinkBoardCut_==true){ + + std::string StringBarrel=""; + std::string StringEndCap=""; + + std::string LBNameEndCap=""; + std::string LBNameBarrel=""; + + /// Region id: 0 for Barrel, +/-1 For +/- Endcap + if(region_ == 0){ + StringBarrel=GetStringBarrel(ring_, station_, sector_, layer_, subsector_, roll_eta_); + std::string namemap1 = LBName_ChamberID_Map_1[StringBarrel]; + std::string namemap2 = LBName_ChamberID_Map_2[StringBarrel]; + LBNameBarrel=namemap1+namemap2; + + } else{ + //ChamberID only for EndCap region + int nsub = 6; + (ring_ == 1 && station_ > 1) ? nsub = 3 : nsub = 6; + const int chamberID = subsector_ + nsub * ( sector_ - 1); + + StringEndCap=GetStringEndCap(station_, ring_, chamberID); + //Getting linkboard name from map + LBNameEndCap=LBName_ChamberID_Map_1[StringEndCap]; + } + + + //maximum two cluster per linkboard + if(region_==0){//For Barrel + + std::map::iterator it; + it=FirstLinkBarrel.find(LBNameBarrel); + + int repetitions_Barrel=0; + if(it==FirstLinkBarrel.end()) { + FirstLinkBarrel[LBNameBarrel]=1; + } + else if (it != FirstLinkBarrel.end()){ + repetitions_Barrel=FirstLinkBarrel[LBNameBarrel]; + FirstLinkBarrel[LBNameBarrel]=repetitions_Barrel+1; + } + + PassLinkCutBarrel=ApplyLinkBoardCut(FirstLinkBarrel[LBNameBarrel],LinkboardCut); + if(PassLinkCutBarrel) recHit_output.push_back(own); + + } + + else{ //For endcap + + std::map::iterator it; + it=FirstLinkEndCap.find(LBNameEndCap); + + int repetitions_EndCap=0; + if(it==FirstLinkEndCap.end()) { + FirstLinkEndCap[LBNameEndCap]=1; + } + else if (it != FirstLinkEndCap.end()){ + repetitions_EndCap=FirstLinkEndCap[LBNameEndCap]; + FirstLinkEndCap[LBNameEndCap]=repetitions_EndCap+1; + } + PassLinkCutEndCap=ApplyLinkBoardCut(FirstLinkEndCap[LBNameEndCap],LinkboardCut); + if(PassLinkCutEndCap) recHit_output.push_back(own); + + } + + } else recHit_output = recHits; + + } //loop over temporal recHit vector + + + if (recHit_output.size() != 0){// Just to make sure + // clustersize cut: + recHit_output=ApplyClusterSizeCut(recHit_output, ClusterSizeCut); + primitivedigi.put(rpcId, recHit_output.begin(), recHit_output.end()); + } + + } // end for loop in RpcDigis +} + + + +edm::OwnVector RPCProcessor::ApplyClusterSizeCut(const edm::OwnVector recHits_, int ClusterSizeCut_){ + + edm::OwnVector final_; + + for(auto &own : recHits_){ + bool passcut=true; + if(own.clusterSize() > ClusterSizeCut_){ + passcut = false; + } + if(passcut) final_.push_back(own); + } + + return final_; +} + +bool RPCProcessor::ApplyLinkBoardCut(int NClusters, int LinkboardCut){ + + bool passCutsize = true; + if(NClusters > LinkboardCut) passCutsize = false; + + return passCutsize; + +} + + +std::string RPCProcessor::GetStringBarrel(const int ring_, const int station_, const int sector_, const int layer_, const int subsector_, const int roll_) const { + + std::string point=""; + std::map Wheel; + Wheel[-2]="W-2/"; + Wheel[-1]="W-1/"; + Wheel[0]="W0/"; + Wheel[1]="W+1/"; + Wheel[2]="W+2/"; + + point += Wheel[ring_]; + + std::map Station; + Station[1]="RB1"; + Station[2]="RB2"; + Station[3]="RB3"; + Station[4]="RB4"; + + + point += Station[station_]; + + std::map Layer; + Layer[1]="in"; + Layer[2]="out"; + //layer 1 is the inner chamber and layer 2 is the outer chamber + if(station_ == 1 || station_ == 2) point += Layer[layer_]; + + point += "/"; + + // Including the sector + point+= std::to_string(sector_); + + //Taken from CondFormats/RPCObjects/src/ChamberLocationSpec.cc + + std::map SubsecFour; + SubsecFour[1]="--"; + SubsecFour[2]="-"; + SubsecFour[3]="+"; + SubsecFour[4]="++"; + + std::map SubsecTwo; + SubsecTwo[1]="-"; + SubsecTwo[2]="+"; + + if(station_ == 3 || station_ == 4){ + + if(station_ == 4 && sector_ == 4){ + point+=SubsecFour[subsector_]; + } + + else if ((station_== 4) && (sector_ == 9 || sector_ == 11)){ + point+=""; + } + + else point+=SubsecTwo[subsector_]; + + } + + + //Taken from DataFormats/MuonDetId/src/RPCDetId.cc + + std::map ROLL; + ROLL[1]="Backward"; + ROLL[2]="Central"; + ROLL[3]="Forward"; + + point+=ROLL[roll_]; + + return point; +} + +std::string RPCProcessor::GetStringEndCap(const int station_, const int ring_, const int chamberID_) const { + + std::string point=""; + //Including station number + std::map Station; + Station[-4]="RE-4"; + Station[-3]="RE-3"; + Station[-2]="RE-2"; + Station[-1]="RE-1"; + Station[1]="RE+1"; + Station[2]="RE+2"; + Station[3]="RE+3"; + Station[4]="RE+4"; + + point+=Station[station_]; + + //Including ring number + point+="/"+std::to_string(ring_); + //Including chamberID number + point+="/"+std::to_string(chamberID_); + + return point; +} + + diff --git a/L1Trigger/RPCTriggerPrimitives/test/rpcprimitive_MC.py b/L1Trigger/RPCTriggerPrimitives/test/rpcprimitive_MC.py new file mode 100644 index 0000000000000..95b85dd58d64b --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/test/rpcprimitive_MC.py @@ -0,0 +1,140 @@ +# Auto generated configuration file +# using: +# Revision: 1.19 +# Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v +# with command line options: SingleMuPt10_pythia8_cfi.py -s GEN,SIM,DIGI --pileup=NoPileUp --geometry DB --conditions=auto:run1_mc --eventcontent FEVTDEBUGHLT --no_exec -n 30 +import FWCore.ParameterSet.Config as cms + +process = cms.Process('PrimitiveDigisMC') + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.Geometry.GeometryExtended2016_cff') +process.load('Configuration.Geometry.GeometryExtended2016Reco_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedRealistic50ns13TeVCollision_cfi') +process.load('GeneratorInterface.Core.genFilterSummary_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load('Configuration.StandardSequences.Digi_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +process.load('RecoLocalMuon.RPCRecHit.rpcRecHits_cfi') +from RecoLocalMuon.RPCRecHit.rpcRecHits_cfi import * + +process.load('L1Trigger.L1TMuonCPPF.emulatorCppfDigis_cfi') +from L1Trigger.L1TMuonCPPF.emulatorCppfDigis_cfi import * +process.emulatorCppfDigis.recHitLabel = 'rpcRecHits' + +process.load('L1Trigger.RPCTriggerPrimitives.primitiveRPCProducer_cfi') +from L1Trigger.RPCTriggerPrimitives.primitiveRPCProducer_cfi import * + +process.MessageLogger.cerr.FwkReport.reportEvery = cms.untracked.int32(10) +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(300) + ) + +# Input source +process.source = cms.Source("EmptySource", + firstEvent = cms.untracked.uint32(1), + firstRun = cms.untracked.uint32(2), + firstLuminosityBlock = cms.untracked.uint32(1) + ) +process.options = cms.untracked.PSet( + ) + +from IOMC.RandomEngine.RandomServiceHelper import RandomNumberServiceHelper +randHelper = RandomNumberServiceHelper(process.RandomNumberGeneratorService) +randHelper.populate() +process.RandomNumberGeneratorService.saveFileName = cms.untracked.string("RandomEngineState.log") + +# Production Info +process.configurationMetadata = cms.untracked.PSet( + annotation = cms.untracked.string('SingleMuPt10_pythia8_cfi.py nevts:100'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') + ) + +# Output definition + +process.FEVTDEBUGHLToutput = cms.OutputModule("PoolOutputModule", + SelectEvents = cms.untracked.PSet( + SelectEvents = cms.vstring('generation_step') + ), + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string(''), + filterName = cms.untracked.string('') + ), + eventAutoFlushCompressedSize = cms.untracked.int32(10485760), + fileName = cms.untracked.string('TriggerPrimitive_MC.root'), + outputCommands = cms.untracked.vstring('drop *', + "keep *_genParticles_*_*", + 'keep *_simMuonRPCDigis_*_*', + "keep *_rpcRecHits_*_*", + "keep *_emulatorCppfDigis_*_*", + 'keep *_primitiveRPCProducer_*_*'), + #outputCommands = process.FEVTDEBUGHLTEventContent.outputCommands, + splitLevel = cms.untracked.int32(0) + ) + +# Additional output definition + +# Other statements +process.genstepfilter.triggerConditions=cms.vstring("generation_step") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_mc', '') + +process.generator = cms.EDFilter("Pythia8PtGun", + PGunParameters = cms.PSet( + AddAntiParticle = cms.bool(True), + MaxEta = cms.double(1.6), + MaxPhi = cms.double(3.14159265359), + MaxPt = cms.double(100.01), + MinEta = cms.double(0.5), + MinPhi = cms.double(-3.14159265359), + MinPt = cms.double(1.1), + ParticleID = cms.vint32(-13) + ), + PythiaParameters = cms.PSet( + parameterSets = cms.vstring() + ), + Verbosity = cms.untracked.int32(0), + firstRun = cms.untracked.uint32(1), + psethack = cms.string('single mu pt 10') + ) + +process.rpcRecHits.rpcDigiLabel = 'simMuonRPCDigis' +process.primitiveRPCProducer.Primitiverechitlabel = 'simMuonRPCDigis' + +# Path and EndPath definitions +process.generation_step = cms.Path(process.pgen) +process.simulation_step = cms.Path(process.psim) +process.digitisation_step = cms.Path(process.pdigi) +process.primitivedigis_step = cms.Path(process.primitiveRPCProducer) +process.rpcrechits_step = cms.Path(process.rpcRecHits) +process.emulatorCppfDigis_step = cms.Path(process.emulatorCppfDigis) +process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.FEVTDEBUGHLToutput_step = cms.EndPath(process.FEVTDEBUGHLToutput) + + +# Schedule definition +process.schedule = cms.Schedule(process.generation_step,process.genfiltersummary_step,process.simulation_step,process.digitisation_step,process.rpcrechits_step,process.emulatorCppfDigis_step,process.primitivedigis_step,process.endjob_step,process.FEVTDEBUGHLToutput_step) +from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask +associatePatAlgosToolsTask(process) +# filter all path with the production filter sequence +for path in process.paths: + getattr(process,path)._seq = process.generator * getattr(process,path)._seq + + + # Customisation from command line + # Add early deletion of temporary data products to reduce peak memory need + from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete + process = customiseEarlyDelete(process) +# End adding early deletion + diff --git a/L1Trigger/RPCTriggerPrimitives/test/rpcprimitive_PhaseII_RAW.py b/L1Trigger/RPCTriggerPrimitives/test/rpcprimitive_PhaseII_RAW.py new file mode 100644 index 0000000000000..b909092bea42a --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/test/rpcprimitive_PhaseII_RAW.py @@ -0,0 +1,81 @@ +import FWCore.ParameterSet.Config as cms +import subprocess + +process = cms.Process("PrimitiveDigisUnpacker") + +process.load("FWCore.MessageService.MessageLogger_cfi") +process.MessageLogger.cerr.FwkReport.reportEvery = 100 + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.Geometry.GeometryExtended2023D38Reco_cff') +process.load('Configuration.Geometry.GeometryExtended2023D38_cff') +process.load('Configuration.StandardSequences.MagneticField_38T_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedRealistic50ns13TeVCollision_cfi') +process.load('Configuration.StandardSequences.EndOfProcess_cff') + +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic', '') + +process.load('RecoLocalMuon.RPCRecHit.rpcRecHits_cfi') +from RecoLocalMuon.RPCRecHit.rpcRecHits_cfi import * +process.rpcRecHits.rpcDigiLabel = 'simMuonRPCDigis' + +process.load('L1Trigger.RPCTriggerPrimitives.primitiveRPCProducer_cfi') +from L1Trigger.RPCTriggerPrimitives.primitiveRPCProducer_cfi import * +process.primitiveRPCProducer.Primitiverechitlabel = 'simMuonRPCDigis' +process.primitiveRPCProducer.ClusterSizeCut = 4 +process.primitiveRPCProducer.ApplyLinkBoardCut = False + +process.load('L1Trigger.L1TMuonCPPF.emulatorCppfDigis_cfi') +from L1Trigger.L1TMuonCPPF.emulatorCppfDigis_cfi import * +#process.emulatorCppfDigis.recHitLabel = 'rpcRecHits' +process.emulatorCppfDigis.recHitLabel = "primitiveRPCProducer" # For new digis + +process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) + +# Input source +eos_cmd = '/afs/cern.ch/project/eos/installation/ams/bin/eos.select' +readFiles = cms.untracked.vstring() +process.source = cms.Source("PoolSource", + fileNames = readFiles, +) + +in_dir_name='/eos/cms/store/group/dpg_dt/comm_dt/TriggerSimulation/SamplesReco/SingleMu_FlatPt-2to100/Version_10_5_0/' + +readFiles.extend( cms.untracked.vstring('file:'+in_dir_name+'SimRECO_1.root') ) + +#iFile = 0 +#for in_file_name in subprocess.check_output([eos_cmd, 'ls', in_dir_name]).splitlines(): +# if not ('.root' in in_file_name): continue +# iFile += 1 +# readFiles.extend( cms.untracked.vstring('file:'+in_dir_name+in_file_name) ) + + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1000) ) +#process.maxLuminosityBlocks = cms.untracked.PSet(input = cms.untracked.int32(10)) + +process.p = cms.Path( + process.rpcRecHits * + process.primitiveRPCProducer + + process.emulatorCppfDigis +) + +# Output +process.out = cms.OutputModule("PoolOutputModule" + , outputCommands = cms.untracked.vstring("drop *", + "keep *_rpcunpacker_*_*", + "keep *_rpcRecHits_*_*", + "keep *_emulatorCppfDigis_*_*", + "keep *_primitiveRPCProducer_*_*", + "keep *_rpcCPPFRawToDigi_*_*") + , fileName = cms.untracked.string("TriggerPrimitive_RAW.root") + , SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring("p")) +) + +process.e = cms.EndPath(process.out) + diff --git a/L1Trigger/RPCTriggerPrimitives/test/rpcprimitive_RAW.py b/L1Trigger/RPCTriggerPrimitives/test/rpcprimitive_RAW.py new file mode 100644 index 0000000000000..18f093bd9c437 --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/test/rpcprimitive_RAW.py @@ -0,0 +1,103 @@ +import FWCore.ParameterSet.Config as cms +import subprocess + +process = cms.Process("PrimitiveDigisUnpacker") + +process.load("FWCore.MessageService.MessageLogger_cfi") +process.MessageLogger.cerr.FwkReport.reportEvery = 100 + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.Geometry.GeometryExtended2016_cff') +process.load('Configuration.Geometry.GeometryExtended2016Reco_cff') +process.load('Configuration.StandardSequences.MagneticField_38T_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedRealistic50ns13TeVCollision_cfi') +process.load('GeneratorInterface.Core.genFilterSummary_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load('Configuration.StandardSequences.Digi_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') + +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag.globaltag = "92X_dataRun2_Express_v7" +#process.GlobalTag.globaltag = "101X_dataRun2_Express_v7" + + +process.load("EventFilter.RPCRawToDigi.RPCCPPFRawToDigi_sqlite_cff") + +process.load("EventFilter.RPCRawToDigi.rpcPacker_cfi") +process.rpcpacker.InputLabel = cms.InputTag("rpcCPPFRawToDigi") + +process.load("EventFilter.RPCRawToDigi.rpcUnpackingModule_cfi") +process.rpcUnpackingModulePacked = process.rpcUnpackingModule.clone() +process.rpcUnpackingModulePacked.InputLabel = cms.InputTag("rpcpacker") + +process.load("EventFilter.RPCRawToDigi.rpcUnpacker_cfi") +from EventFilter.RPCRawToDigi.rpcUnpacker_cfi import * +process.rpcunpacker.InputLabel = 'rawDataCollector' + +process.load('RecoLocalMuon.RPCRecHit.rpcRecHits_cfi') +from RecoLocalMuon.RPCRecHit.rpcRecHits_cfi import * +process.rpcRecHits.rpcDigiLabel = 'rpcunpacker' + +process.load('L1Trigger.RPCTriggerPrimitives.primitiveRPCProducer_cfi') +from L1Trigger.RPCTriggerPrimitives.primitiveRPCProducer_cfi import * +process.primitiveRPCProducer.Primitiverechitlabel = 'rpcunpacker' + +process.load('L1Trigger.L1TMuonCPPF.emulatorCppfDigis_cfi') +from L1Trigger.L1TMuonCPPF.emulatorCppfDigis_cfi import * +#process.emulatorCppfDigis.recHitLabel = 'rpcRecHits' +process.emulatorCppfDigis.recHitLabel = "primitiveRPCProducer" # For new digis + +process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) + +# Input source +eos_cmd = '/afs/cern.ch/project/eos/installation/ams/bin/eos.select' +readFiles = cms.untracked.vstring() +process.source = cms.Source("PoolSource", + fileNames = readFiles, +) +in_dir_name = '/eos/cms/store/data/Run2018D/SingleMuon/RAW-RECO/ZMu-PromptReco-v2/000/321/457/00000/' + +#readFiles.extend( cms.untracked.vstring('file:'+in_dir_name+'EC0F3940-C3A5-E811-9736-02163E01A00E.root') ) + +iFile = 0 +for in_file_name in subprocess.check_output([eos_cmd, 'ls', in_dir_name]).splitlines(): + if not ('.root' in in_file_name): continue + iFile += 1 + readFiles.extend( cms.untracked.vstring('file:'+in_dir_name+in_file_name) ) + + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1000) ) +#process.maxLuminosityBlocks = cms.untracked.PSet(input = cms.untracked.int32(10)) + +process.p = cms.Path( process.rpcUnpackingModule * + process.rpcCPPFRawToDigi * + process.rpcpacker + + + process.rpcUnpackingModulePacked + + process.rpcunpacker * + process.rpcRecHits * + process.primitiveRPCProducer + + process.emulatorCppfDigis +) + +# Output +process.out = cms.OutputModule("PoolOutputModule" + , outputCommands = cms.untracked.vstring("drop *", + "keep *_rpcunpacker_*_*", + "keep *_rpcRecHits_*_*", + "keep *_emulatorCppfDigis_*_*", + "keep *_primitiveRPCProducer_*_*", + "keep *_rpcCPPFRawToDigi_*_*") + , fileName = cms.untracked.string("TriggerPrimitive_RAW.root") + , SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring("p")) +) + +process.e = cms.EndPath(process.out) + From 59880cfa83196156d7dda0fa18f01d388bcb6852 Mon Sep 17 00:00:00 2001 From: Manuel Segura Date: Tue, 28 May 2019 15:22:36 +0200 Subject: [PATCH 02/11] Trigger primitive phase2 @maseguracern --- L1Trigger/RPCTriggerPrimitives/README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/L1Trigger/RPCTriggerPrimitives/README.md b/L1Trigger/RPCTriggerPrimitives/README.md index 480364f8c15ff..9a35c57ebd311 100644 --- a/L1Trigger/RPCTriggerPrimitives/README.md +++ b/L1Trigger/RPCTriggerPrimitives/README.md @@ -1,8 +1,6 @@ # RPCTriggerPrimitives -This is the first version of the RPCTriggerPrimitives for the RPC detector. Which uses as a input the RPCDigis as an input and the RPCRecHits (New collection) as a output. -The output of this module is an edm branch named RPCPrimitivesDigis, following the RPCRecHit format already committed in CMSSW_10_6_0_pre1. -We apply the cluster size cut and emulate max two clusters per link board. The module can be tuned by the parameters LinkBoardCut and ClusterSizeCut. +This is the first version of the RPCTriggerPrimitives for the RPC detector. Which uses as an input the RPCDigis as an input and the RPCRecHits (New collection) as an output. The output of this module is an edm branch named RPCPrimitivesDigis, following the RPCRecHit format already committed in CMSSW_10_6_0. We apply the cluster size cut and emulate max two clusters per link board. The module can be tuned by the parameters LinkBoardCut and ClusterSizeCut for phaseII. # Out of the box instructions From fe5f7291390dedcbaef22da448ea6459edd7e189 Mon Sep 17 00:00:00 2001 From: Manuel Segura Date: Tue, 28 May 2019 18:34:14 +0200 Subject: [PATCH 03/11] Trigger primitive phase2 @maseguracern code check --- L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc b/L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc index ab41154e9ee6c..ee9667ab03357 100644 --- a/L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc +++ b/L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc @@ -173,7 +173,7 @@ void RPCProcessor::Process(const edm::Event& iEvent, } //loop over temporal recHit vector - if (recHit_output.size() != 0){// Just to make sure + if (!recHit_output.empty()){// Just to make sure // clustersize cut: recHit_output=ApplyClusterSizeCut(recHit_output, ClusterSizeCut); primitivedigi.put(rpcId, recHit_output.begin(), recHit_output.end()); From ff1735384ee7741cc87733c7eaf8eff0544e934f Mon Sep 17 00:00:00 2001 From: Manuel Segura Date: Tue, 11 Jun 2019 15:42:12 +0200 Subject: [PATCH 04/11] Trigger primitive phase2 @maseguracern data folder --- ...Linkboard_rpc_roll_mapping_lb_chamber2.txt | 1487 ----------------- .../python/primitiveRPCProducer_cfi.py | 2 +- 2 files changed, 1 insertion(+), 1488 deletions(-) delete mode 100644 L1Trigger/RPCTriggerPrimitives/input/Linkboard_rpc_roll_mapping_lb_chamber2.txt diff --git a/L1Trigger/RPCTriggerPrimitives/input/Linkboard_rpc_roll_mapping_lb_chamber2.txt b/L1Trigger/RPCTriggerPrimitives/input/Linkboard_rpc_roll_mapping_lb_chamber2.txt deleted file mode 100644 index 255e29a365abc..0000000000000 --- a/L1Trigger/RPCTriggerPrimitives/input/Linkboard_rpc_roll_mapping_lb_chamber2.txt +++ /dev/null @@ -1,1487 +0,0 @@ -LB_RB+1_S1_BP1E_CH0 2 W+1/RB4/1+Forward W+1/RB4/1-Forward -LB_RB+1_S1_BP1E_CH2 3 W+1/RB3/1+Forward W+1/RB3/1-Forward -LB_RB+1_S1_BP1D_CH0 5 W+1/RB4/1+Backward W+1/RB4/1-Backward -LB_RB+1_S1_BP1D_CH2 6 W+1/RB3/1+Backward W+1/RB3/1-Backward -LB_RB+1_S1_BP1C_CH1 7 W+1/RB2in/1Forward _ -LB_RB+1_S1_BP1C_CH0 8 W+1/RB2in/1Central _ -LB_RB+1_S1_BP1C_CH2 9 W+1/RB2in/1Backward _ -LB_RB+1_S1_BP1B_CH1 14 W+1/RB2out/1Forward _ -LB_RB+1_S1_BP1B_CH0 15 W+1/RB1out/1Forward _ -LB_RB+1_S1_BP1B_CH2 16 W+1/RB1in/1Forward _ -LB_RB+1_S1_BP1A_CH1 17 W+1/RB2out/1Backward _ -LB_RB+1_S1_BP1A_CH0 18 W+1/RB1out/1Backward _ -LB_RB+1_S1_BP1A_CH2 19 W+1/RB1in/1Backward _ - -LB_RB+1_S10_BP1E_CH1 1 W+1/RB4/10-Forward _ -LB_RB+1_S10_BP1E_CH0 2 W+1/RB4/10+Forward _ -LB_RB+1_S10_BP1E_CH2 3 W+1/RB3/10+Forward W+1/RB3/10-Forward -LB_RB+1_S10_BP1D_CH1 4 W+1/RB4/10-Backward _ -LB_RB+1_S10_BP1D_CH0 5 W+1/RB4/10+Backward _ -LB_RB+1_S10_BP1D_CH2 6 W+1/RB3/10+Backward W+1/RB3/10-Backward -LB_RB+1_S10_BP1C_CH1 7 W+1/RB2in/10Forward _ -LB_RB+1_S10_BP1C_CH0 8 W+1/RB2in/10Central _ -LB_RB+1_S10_BP1C_CH2 9 W+1/RB2in/10Backward _ -LB_RB+1_S10_BP1B_CH1 14 W+1/RB2out/10Forward _ -LB_RB+1_S10_BP1B_CH0 15 W+1/RB1out/10Forward _ -LB_RB+1_S10_BP1B_CH2 16 W+1/RB1in/10Forward _ -LB_RB+1_S10_BP1A_CH1 17 W+1/RB2out/10Backward _ -LB_RB+1_S10_BP1A_CH0 18 W+1/RB1out/10Backward _ -LB_RB+1_S10_BP1A_CH2 19 W+1/RB1in/10Backward _ - -LB_RB+1_S11_BP1E_CH0 2 W+1/RB4/11Forward _ -LB_RB+1_S11_BP1E_CH2 3 W+1/RB3/11+Forward W+1/RB3/11-Forward -LB_RB+1_S11_BP1D_CH0 5 W+1/RB4/11Backward _ -LB_RB+1_S11_BP1D_CH2 6 W+1/RB3/11+Backward W+1/RB3/11-Backward -LB_RB+1_S11_BP1C_CH1 7 W+1/RB2in/11Forward _ -LB_RB+1_S11_BP1C_CH0 8 W+1/RB2in/11Central _ -LB_RB+1_S11_BP1C_CH2 9 W+1/RB2in/11Backward _ -LB_RB+1_S11_BP1B_CH1 14 W+1/RB2out/11Forward _ -LB_RB+1_S11_BP1B_CH0 15 W+1/RB1out/11Forward _ -LB_RB+1_S11_BP1B_CH2 16 W+1/RB1in/11Forward _ -LB_RB+1_S11_BP1A_CH1 17 W+1/RB2out/11Backward _ -LB_RB+1_S11_BP1A_CH0 18 W+1/RB1out/11Backward _ -LB_RB+1_S11_BP1A_CH2 19 W+1/RB1in/11Backward _ - -LB_RB+1_S12_BP1E_CH0 2 W+1/RB4/12+Forward W+1/RB4/12-Forward -LB_RB+1_S12_BP1E_CH2 3 W+1/RB3/12+Forward W+1/RB3/12-Forward -LB_RB+1_S12_BP1D_CH0 5 W+1/RB4/12+Backward W+1/RB4/12-Backward -LB_RB+1_S12_BP1D_CH2 6 W+1/RB3/12+Backward W+1/RB3/12-Backward -LB_RB+1_S12_BP1C_CH1 7 W+1/RB2in/12Forward _ -LB_RB+1_S12_BP1C_CH0 8 W+1/RB2in/12Central _ -LB_RB+1_S12_BP1C_CH2 9 W+1/RB2in/12Backward _ -LB_RB+1_S12_BP1B_CH1 14 W+1/RB2out/12Forward _ -LB_RB+1_S12_BP1B_CH0 15 W+1/RB1out/12Forward _ -LB_RB+1_S12_BP1B_CH2 16 W+1/RB1in/12Forward _ -LB_RB+1_S12_BP1A_CH1 17 W+1/RB2out/12Backward _ -LB_RB+1_S12_BP1A_CH0 18 W+1/RB1out/12Backward _ -LB_RB+1_S12_BP1A_CH2 19 W+1/RB1in/12Backward _ - -LB_RB+1_S2_BP1E_CH0 2 W+1/RB4/2+Forward W+1/RB4/2-Forward -LB_RB+1_S2_BP1E_CH2 3 W+1/RB3/2+Forward W+1/RB3/2-Forward -LB_RB+1_S2_BP1D_CH0 5 W+1/RB4/2+Backward W+1/RB4/2-Backward -LB_RB+1_S2_BP1D_CH2 6 W+1/RB3/2+Backward W+1/RB3/2-Backward -LB_RB+1_S2_BP1C_CH1 7 W+1/RB2in/2Forward _ -LB_RB+1_S2_BP1C_CH0 8 W+1/RB2in/2Central _ -LB_RB+1_S2_BP1C_CH2 9 W+1/RB2in/2Backward _ -LB_RB+1_S2_BP1B_CH1 14 W+1/RB2out/2Forward _ -LB_RB+1_S2_BP1B_CH0 15 W+1/RB1out/2Forward _ -LB_RB+1_S2_BP1B_CH2 16 W+1/RB1in/2Forward _ -LB_RB+1_S2_BP1A_CH1 17 W+1/RB2out/2Backward _ -LB_RB+1_S2_BP1A_CH0 18 W+1/RB1out/2Backward _ -LB_RB+1_S2_BP1A_CH2 19 W+1/RB1in/2Backward _ - -LB_RB+1_S3_BP1E_CH0 2 W+1/RB4/3+Forward W+1/RB4/3-Forward -LB_RB+1_S3_BP1E_CH2 3 W+1/RB3/3+Forward W+1/RB3/3-Forward -LB_RB+1_S3_BP1D_CH0 5 W+1/RB4/3+Backward W+1/RB4/3-Backward -LB_RB+1_S3_BP1D_CH2 6 W+1/RB3/3+Backward W+1/RB3/3-Backward -LB_RB+1_S3_BP1C_CH1 7 W+1/RB2in/3Forward _ -LB_RB+1_S3_BP1C_CH0 8 W+1/RB2in/3Central _ -LB_RB+1_S3_BP1C_CH2 9 W+1/RB2in/3Backward _ -LB_RB+1_S3_BP1B_CH1 14 W+1/RB2out/3Forward _ -LB_RB+1_S3_BP1B_CH0 15 W+1/RB1out/3Forward _ -LB_RB+1_S3_BP1B_CH2 16 W+1/RB1in/3Forward _ -LB_RB+1_S3_BP1A_CH1 17 W+1/RB2out/3Backward _ -LB_RB+1_S3_BP1A_CH0 18 W+1/RB1out/3Backward _ -LB_RB+1_S3_BP1A_CH2 19 W+1/RB1in/3Backward _ - -LB_RB+1_S4_BP1E_CH1 1 W+1/RB4/4-Forward W+1/RB4/4--Forward -LB_RB+1_S4_BP1E_CH0 2 W+1/RB4/4+Forward W+1/RB4/4++Forward -LB_RB+1_S4_BP1E_CH2 3 W+1/RB3/4+Forward W+1/RB3/4-Forward -LB_RB+1_S4_BP1D_CH1 4 W+1/RB4/4-Backward W+1/RB4/4--Backward -LB_RB+1_S4_BP1D_CH0 5 W+1/RB4/4+Backward W+1/RB4/4++Backward -LB_RB+1_S4_BP1D_CH2 6 W+1/RB3/4+Backward W+1/RB3/4-Backward -LB_RB+1_S4_BP1C_CH1 7 W+1/RB2in/4Forward _ -LB_RB+1_S4_BP1C_CH0 8 W+1/RB2in/4Central _ -LB_RB+1_S4_BP1C_CH2 9 W+1/RB2in/4Backward _ -LB_RB+1_S4_BP1B_CH1 14 W+1/RB2out/4Forward _ -LB_RB+1_S4_BP1B_CH0 15 W+1/RB1out/4Forward _ -LB_RB+1_S4_BP1B_CH2 16 W+1/RB1in/4Forward _ -LB_RB+1_S4_BP1A_CH1 17 W+1/RB2out/4Backward _ -LB_RB+1_S4_BP1A_CH0 18 W+1/RB1out/4Backward _ -LB_RB+1_S4_BP1A_CH2 19 W+1/RB1in/4Backward _ - -LB_RB+1_S5_BP1E_CH0 2 W+1/RB4/5+Forward W+1/RB4/5-Forward -LB_RB+1_S5_BP1E_CH2 3 W+1/RB3/5+Forward W+1/RB3/5-Forward -LB_RB+1_S5_BP1D_CH0 5 W+1/RB4/5+Backward W+1/RB4/5-Backward -LB_RB+1_S5_BP1D_CH2 6 W+1/RB3/5+Backward W+1/RB3/5-Backward -LB_RB+1_S5_BP1C_CH1 7 W+1/RB2in/5Forward _ -LB_RB+1_S5_BP1C_CH0 8 W+1/RB2in/5Central _ -LB_RB+1_S5_BP1C_CH2 9 W+1/RB2in/5Backward _ -LB_RB+1_S5_BP1B_CH1 14 W+1/RB2out/5Forward _ -LB_RB+1_S5_BP1B_CH0 15 W+1/RB1out/5Forward _ -LB_RB+1_S5_BP1B_CH2 16 W+1/RB1in/5Forward _ -LB_RB+1_S5_BP1A_CH1 17 W+1/RB2out/5Backward _ -LB_RB+1_S5_BP1A_CH0 18 W+1/RB1out/5Backward _ -LB_RB+1_S5_BP1A_CH2 19 W+1/RB1in/5Backward _ - -LB_RB+1_S6_BP1E_CH0 2 W+1/RB4/6+Forward W+1/RB4/6-Forward -LB_RB+1_S6_BP1E_CH2 3 W+1/RB3/6+Forward W+1/RB3/6-Forward -LB_RB+1_S6_BP1D_CH0 5 W+1/RB4/6+Backward W+1/RB4/6-Backward -LB_RB+1_S6_BP1D_CH2 6 W+1/RB3/6+Backward W+1/RB3/6-Backward -LB_RB+1_S6_BP1C_CH1 7 W+1/RB2in/6Forward _ -LB_RB+1_S6_BP1C_CH0 8 W+1/RB2in/6Central _ -LB_RB+1_S6_BP1C_CH2 9 W+1/RB2in/6Backward _ -LB_RB+1_S6_BP1B_CH1 14 W+1/RB2out/6Forward _ -LB_RB+1_S6_BP1B_CH0 15 W+1/RB1out/6Forward _ -LB_RB+1_S6_BP1B_CH2 16 W+1/RB1in/6Forward _ -LB_RB+1_S6_BP1A_CH1 17 W+1/RB2out/6Backward _ -LB_RB+1_S6_BP1A_CH0 18 W+1/RB1out/6Backward _ -LB_RB+1_S6_BP1A_CH2 19 W+1/RB1in/6Backward _ - -LB_RB+1_S7_BP1E_CH0 2 W+1/RB4/7+Forward W+1/RB4/7-Forward -LB_RB+1_S7_BP1E_CH2 3 W+1/RB3/7+Forward W+1/RB3/7-Forward -LB_RB+1_S7_BP1D_CH0 5 W+1/RB4/7+Backward W+1/RB4/7-Backward -LB_RB+1_S7_BP1D_CH2 6 W+1/RB3/7+Backward W+1/RB3/7-Backward -LB_RB+1_S7_BP1C_CH1 7 W+1/RB2in/7Forward _ -LB_RB+1_S7_BP1C_CH0 8 W+1/RB2in/7Central _ -LB_RB+1_S7_BP1C_CH2 9 W+1/RB2in/7Backward _ -LB_RB+1_S7_BP1B_CH1 14 W+1/RB2out/7Forward _ -LB_RB+1_S7_BP1B_CH0 15 W+1/RB1out/7Forward _ -LB_RB+1_S7_BP1B_CH2 16 W+1/RB1in/7Forward _ -LB_RB+1_S7_BP1A_CH1 17 W+1/RB2out/7Backward _ -LB_RB+1_S7_BP1A_CH0 18 W+1/RB1out/7Backward _ -LB_RB+1_S7_BP1A_CH2 19 W+1/RB1in/7Backward _ - -LB_RB+1_S8_BP1E_CH0 2 W+1/RB4/8+Forward W+1/RB4/8-Forward -LB_RB+1_S8_BP1E_CH2 3 W+1/RB3/8+Forward W+1/RB3/8-Forward -LB_RB+1_S8_BP1D_CH0 5 W+1/RB4/8+Backward W+1/RB4/8-Backward -LB_RB+1_S8_BP1D_CH2 6 W+1/RB3/8+Backward W+1/RB3/8-Backward -LB_RB+1_S8_BP1C_CH1 7 W+1/RB2in/8Forward _ -LB_RB+1_S8_BP1C_CH0 8 W+1/RB2in/8Central _ -LB_RB+1_S8_BP1C_CH2 9 W+1/RB2in/8Backward _ -LB_RB+1_S8_BP1B_CH1 14 W+1/RB2out/8Forward _ -LB_RB+1_S8_BP1B_CH0 15 W+1/RB1out/8Forward _ -LB_RB+1_S8_BP1B_CH2 16 W+1/RB1in/8Forward _ -LB_RB+1_S8_BP1A_CH1 17 W+1/RB2out/8Backward _ -LB_RB+1_S8_BP1A_CH0 18 W+1/RB1out/8Backward _ -LB_RB+1_S8_BP1A_CH2 19 W+1/RB1in/8Backward _ - -LB_RB+1_S9_BP1E_CH0 2 W+1/RB4/9Forward _ -LB_RB+1_S9_BP1E_CH2 3 W+1/RB3/9+Forward W+1/RB3/9-Forward -LB_RB+1_S9_BP1D_CH0 5 W+1/RB4/9Backward _ -LB_RB+1_S9_BP1D_CH2 6 W+1/RB3/9+Backward W+1/RB3/9-Backward -LB_RB+1_S9_BP1C_CH1 7 W+1/RB2in/9Forward _ -LB_RB+1_S9_BP1C_CH0 8 W+1/RB2in/9Central _ -LB_RB+1_S9_BP1C_CH2 9 W+1/RB2in/9Backward _ -LB_RB+1_S9_BP1B_CH1 14 W+1/RB2out/9Forward _ -LB_RB+1_S9_BP1B_CH0 15 W+1/RB1out/9Forward _ -LB_RB+1_S9_BP1B_CH2 16 W+1/RB1in/9Forward _ -LB_RB+1_S9_BP1A_CH1 17 W+1/RB2out/9Backward _ -LB_RB+1_S9_BP1A_CH0 18 W+1/RB1out/9Backward _ -LB_RB+1_S9_BP1A_CH2 19 W+1/RB1in/9Backward _ - -LB_RB+2_S1_BP2E_CH0 2 W+2/RB4/1+Forward W+2/RB4/1-Forward -LB_RB+2_S1_BP2E_CH2 3 W+2/RB3/1+Forward W+2/RB3/1-Forward -LB_RB+2_S1_BP2D_CH0 5 W+2/RB4/1+Backward W+2/RB4/1-Backward -LB_RB+2_S1_BP2D_CH2 6 W+2/RB3/1+Backward W+2/RB3/1-Backward -LB_RB+2_S1_BP2C_CH1 7 W+2/RB2out/1Forward _ -LB_RB+2_S1_BP2C_CH0 8 W+2/RB2out/1Central _ -LB_RB+2_S1_BP2C_CH2 9 W+2/RB2out/1Backward _ -LB_RB+2_S1_BP2B_CH1 14 W+2/RB2in/1Forward _ -LB_RB+2_S1_BP2B_CH0 15 W+2/RB1out/1Forward _ -LB_RB+2_S1_BP2B_CH2 16 W+2/RB1in/1Forward _ -LB_RB+2_S1_BP2A_CH1 17 W+2/RB2in/1Backward _ -LB_RB+2_S1_BP2A_CH0 18 W+2/RB1out/1Backward _ -LB_RB+2_S1_BP2A_CH2 19 W+2/RB1in/1Backward _ - -LB_RB+2_S10_BP2E_CH1 1 W+2/RB4/10-Forward _ -LB_RB+2_S10_BP2E_CH0 2 W+2/RB4/10+Forward _ -LB_RB+2_S10_BP2E_CH2 3 W+2/RB3/10+Forward W+2/RB3/10-Forward -LB_RB+2_S10_BP2D_CH1 4 W+2/RB4/10-Backward _ -LB_RB+2_S10_BP2D_CH0 5 W+2/RB4/10+Backward _ -LB_RB+2_S10_BP2D_CH2 6 W+2/RB3/10+Backward W+2/RB3/10-Backward -LB_RB+2_S10_BP2C_CH1 7 W+2/RB2out/10Forward _ -LB_RB+2_S10_BP2C_CH0 8 W+2/RB2out/10Central _ -LB_RB+2_S10_BP2C_CH2 9 W+2/RB2out/10Backward _ -LB_RB+2_S10_BP2B_CH1 14 W+2/RB2in/10Forward _ -LB_RB+2_S10_BP2B_CH0 15 W+2/RB1out/10Forward _ -LB_RB+2_S10_BP2B_CH2 16 W+2/RB1in/10Forward _ -LB_RB+2_S10_BP2A_CH1 17 W+2/RB2in/10Backward _ -LB_RB+2_S10_BP2A_CH0 18 W+2/RB1out/10Backward _ -LB_RB+2_S10_BP2A_CH2 19 W+2/RB1in/10Backward _ - -LB_RB+2_S11_BP2E_CH0 2 W+2/RB4/11Forward _ -LB_RB+2_S11_BP2E_CH2 3 W+2/RB3/11+Forward W+2/RB3/11-Forward -LB_RB+2_S11_BP2D_CH0 5 W+2/RB4/11Backward _ -LB_RB+2_S11_BP2D_CH2 6 W+2/RB3/11+Backward W+2/RB3/11-Backward -LB_RB+2_S11_BP2C_CH1 7 W+2/RB2out/11Forward _ -LB_RB+2_S11_BP2C_CH0 8 W+2/RB2out/11Central _ -LB_RB+2_S11_BP2C_CH2 9 W+2/RB2out/11Backward _ -LB_RB+2_S11_BP2B_CH1 14 W+2/RB2in/11Forward _ -LB_RB+2_S11_BP2B_CH0 15 W+2/RB1out/11Forward _ -LB_RB+2_S11_BP2B_CH2 16 W+2/RB1in/11Forward _ -LB_RB+2_S11_BP2A_CH1 17 W+2/RB2in/11Backward _ -LB_RB+2_S11_BP2A_CH0 18 W+2/RB1out/11Backward _ -LB_RB+2_S11_BP2A_CH2 19 W+2/RB1in/11Backward _ - -LB_RB+2_S12_BP2E_CH0 2 W+2/RB4/12+Forward W+2/RB4/12-Forward -LB_RB+2_S12_BP2E_CH2 3 W+2/RB3/12+Forward W+2/RB3/12-Forward -LB_RB+2_S12_BP2D_CH0 5 W+2/RB4/12+Backward W+2/RB4/12-Backward -LB_RB+2_S12_BP2D_CH2 6 W+2/RB3/12+Backward W+2/RB3/12-Backward -LB_RB+2_S12_BP2C_CH1 7 W+2/RB2out/12Forward _ -LB_RB+2_S12_BP2C_CH0 8 W+2/RB2out/12Central _ -LB_RB+2_S12_BP2C_CH2 9 W+2/RB2out/12Backward _ -LB_RB+2_S12_BP2B_CH1 14 W+2/RB2in/12Forward _ -LB_RB+2_S12_BP2B_CH0 15 W+2/RB1out/12Forward _ -LB_RB+2_S12_BP2B_CH2 16 W+2/RB1in/12Forward _ -LB_RB+2_S12_BP2A_CH1 17 W+2/RB2in/12Backward _ -LB_RB+2_S12_BP2A_CH0 18 W+2/RB1out/12Backward _ -LB_RB+2_S12_BP2A_CH2 19 W+2/RB1in/12Backward _ - -LB_RB+2_S2_BP2E_CH0 2 W+2/RB4/2+Forward W+2/RB4/2-Forward -LB_RB+2_S2_BP2E_CH2 3 W+2/RB3/2+Forward W+2/RB3/2-Forward -LB_RB+2_S2_BP2D_CH0 5 W+2/RB4/2+Backward W+2/RB4/2-Backward -LB_RB+2_S2_BP2D_CH2 6 W+2/RB3/2+Backward W+2/RB3/2-Backward -LB_RB+2_S2_BP2C_CH1 7 W+2/RB2out/2Forward _ -LB_RB+2_S2_BP2C_CH0 8 W+2/RB2out/2Central _ -LB_RB+2_S2_BP2C_CH2 9 W+2/RB2out/2Backward _ -LB_RB+2_S2_BP2B_CH1 14 W+2/RB2in/2Forward _ -LB_RB+2_S2_BP2B_CH0 15 W+2/RB1out/2Forward _ -LB_RB+2_S2_BP2B_CH2 16 W+2/RB1in/2Forward _ -LB_RB+2_S2_BP2A_CH1 17 W+2/RB2in/2Backward _ -LB_RB+2_S2_BP2A_CH0 18 W+2/RB1out/2Backward _ -LB_RB+2_S2_BP2A_CH2 19 W+2/RB1in/2Backward _ - -LB_RB+2_S3_BP2E_CH0 2 W+2/RB4/3+Forward W+2/RB4/3-Forward -LB_RB+2_S3_BP2E_CH2 3 W+2/RB3/3+Forward W+2/RB3/3-Forward -LB_RB+2_S3_BP2D_CH0 5 W+2/RB4/3+Backward W+2/RB4/3-Backward -LB_RB+2_S3_BP2D_CH2 6 W+2/RB3/3+Backward W+2/RB3/3-Backward -LB_RB+2_S3_BP2C_CH1 7 W+2/RB2out/3Forward _ -LB_RB+2_S3_BP2C_CH0 8 W+2/RB2out/3Central _ -LB_RB+2_S3_BP2C_CH2 9 W+2/RB2out/3Backward _ -LB_RB+2_S3_BP2B_CH1 14 W+2/RB2in/3Forward _ -LB_RB+2_S3_BP2B_CH0 15 W+2/RB1out/3Forward _ -LB_RB+2_S3_BP2B_CH2 16 W+2/RB1in/3Forward _ -LB_RB+2_S3_BP2A_CH1 17 W+2/RB2in/3Backward _ -LB_RB+2_S3_BP2A_CH0 18 W+2/RB1out/3Backward _ -LB_RB+2_S3_BP2A_CH2 19 W+2/RB1in/3Backward _ - -LB_RB+2_S4_BP2E_CH1 1 W+2/RB4/4-Forward W+2/RB4/4--Forward -LB_RB+2_S4_BP2E_CH0 2 W+2/RB4/4+Forward W+2/RB4/4++Forward -LB_RB+2_S4_BP2E_CH2 3 W+2/RB3/4+Forward W+2/RB3/4-Forward -LB_RB+2_S4_BP2D_CH1 4 W+2/RB4/4-Backward W+2/RB4/4--Backward -LB_RB+2_S4_BP2D_CH0 5 W+2/RB4/4+Backward W+2/RB4/4++Backward -LB_RB+2_S4_BP2D_CH2 6 W+2/RB3/4+Backward W+2/RB3/4-Backward -LB_RB+2_S4_BP2C_CH1 7 W+2/RB2out/4Forward _ -LB_RB+2_S4_BP2C_CH0 8 W+2/RB2out/4Central _ -LB_RB+2_S4_BP2C_CH2 9 W+2/RB2out/4Backward _ -LB_RB+2_S4_BP2B_CH1 14 W+2/RB2in/4Forward _ -LB_RB+2_S4_BP2B_CH0 15 W+2/RB1out/4Forward _ -LB_RB+2_S4_BP2B_CH2 16 W+2/RB1in/4Forward _ -LB_RB+2_S4_BP2A_CH1 17 W+2/RB2in/4Backward _ -LB_RB+2_S4_BP2A_CH0 18 W+2/RB1out/4Backward _ -LB_RB+2_S4_BP2A_CH2 19 W+2/RB1in/4Backward _ - -LB_RB+2_S5_BP2E_CH0 2 W+2/RB4/5+Forward W+2/RB4/5-Forward -LB_RB+2_S5_BP2E_CH2 3 W+2/RB3/5+Forward W+2/RB3/5-Forward -LB_RB+2_S5_BP2D_CH0 5 W+2/RB4/5+Backward W+2/RB4/5-Backward -LB_RB+2_S5_BP2D_CH2 6 W+2/RB3/5+Backward W+2/RB3/5-Backward -LB_RB+2_S5_BP2C_CH1 7 W+2/RB2out/5Forward _ -LB_RB+2_S5_BP2C_CH0 8 W+2/RB2out/5Central _ -LB_RB+2_S5_BP2C_CH2 9 W+2/RB2out/5Backward _ -LB_RB+2_S5_BP2B_CH1 14 W+2/RB2in/5Forward _ -LB_RB+2_S5_BP2B_CH0 15 W+2/RB1out/5Forward _ -LB_RB+2_S5_BP2B_CH2 16 W+2/RB1in/5Forward _ -LB_RB+2_S5_BP2A_CH1 17 W+2/RB2in/5Backward _ -LB_RB+2_S5_BP2A_CH0 18 W+2/RB1out/5Backward _ -LB_RB+2_S5_BP2A_CH2 19 W+2/RB1in/5Backward _ - -LB_RB+2_S6_BP2E_CH0 2 W+2/RB4/6+Forward W+2/RB4/6-Forward -LB_RB+2_S6_BP2E_CH2 3 W+2/RB3/6+Forward W+2/RB3/6-Forward -LB_RB+2_S6_BP2D_CH0 5 W+2/RB4/6+Backward W+2/RB4/6-Backward -LB_RB+2_S6_BP2D_CH2 6 W+2/RB3/6+Backward W+2/RB3/6-Backward -LB_RB+2_S6_BP2C_CH1 7 W+2/RB2out/6Forward _ -LB_RB+2_S6_BP2C_CH0 8 W+2/RB2out/6Central _ -LB_RB+2_S6_BP2C_CH2 9 W+2/RB2out/6Backward _ -LB_RB+2_S6_BP2B_CH1 14 W+2/RB2in/6Forward _ -LB_RB+2_S6_BP2B_CH0 15 W+2/RB1out/6Forward _ -LB_RB+2_S6_BP2B_CH2 16 W+2/RB1in/6Forward _ -LB_RB+2_S6_BP2A_CH1 17 W+2/RB2in/6Backward _ -LB_RB+2_S6_BP2A_CH0 18 W+2/RB1out/6Backward _ -LB_RB+2_S6_BP2A_CH2 19 W+2/RB1in/6Backward _ - -LB_RB+2_S7_BP2E_CH0 2 W+2/RB4/7+Forward W+2/RB4/7-Forward -LB_RB+2_S7_BP2E_CH2 3 W+2/RB3/7+Forward W+2/RB3/7-Forward -LB_RB+2_S7_BP2D_CH0 5 W+2/RB4/7+Backward W+2/RB4/7-Backward -LB_RB+2_S7_BP2D_CH2 6 W+2/RB3/7+Backward W+2/RB3/7-Backward -LB_RB+2_S7_BP2C_CH1 7 W+2/RB2out/7Forward _ -LB_RB+2_S7_BP2C_CH0 8 W+2/RB2out/7Central _ -LB_RB+2_S7_BP2C_CH2 9 W+2/RB2out/7Backward _ -LB_RB+2_S7_BP2B_CH1 14 W+2/RB2in/7Forward _ -LB_RB+2_S7_BP2B_CH0 15 W+2/RB1out/7Forward _ -LB_RB+2_S7_BP2B_CH2 16 W+2/RB1in/7Forward _ -LB_RB+2_S7_BP2A_CH1 17 W+2/RB2in/7Backward _ -LB_RB+2_S7_BP2A_CH0 18 W+2/RB1out/7Backward _ -LB_RB+2_S7_BP2A_CH2 19 W+2/RB1in/7Backward _ - -LB_RB+2_S8_BP2E_CH0 2 W+2/RB4/8+Forward W+2/RB4/8-Forward -LB_RB+2_S8_BP2E_CH2 3 W+2/RB3/8+Forward W+2/RB3/8-Forward -LB_RB+2_S8_BP2D_CH0 5 W+2/RB4/8+Backward W+2/RB4/8-Backward -LB_RB+2_S8_BP2D_CH2 6 W+2/RB3/8+Backward W+2/RB3/8-Backward -LB_RB+2_S8_BP2C_CH1 7 W+2/RB2out/8Forward _ -LB_RB+2_S8_BP2C_CH0 8 W+2/RB2out/8Central _ -LB_RB+2_S8_BP2C_CH2 9 W+2/RB2out/8Backward _ -LB_RB+2_S8_BP2B_CH1 14 W+2/RB2in/8Forward _ -LB_RB+2_S8_BP2B_CH0 15 W+2/RB1out/8Forward _ -LB_RB+2_S8_BP2B_CH2 16 W+2/RB1in/8Forward _ -LB_RB+2_S8_BP2A_CH1 17 W+2/RB2in/8Backward _ -LB_RB+2_S8_BP2A_CH0 18 W+2/RB1out/8Backward _ -LB_RB+2_S8_BP2A_CH2 19 W+2/RB1in/8Backward _ - -LB_RB+2_S9_BP2E_CH0 2 W+2/RB4/9Forward _ -LB_RB+2_S9_BP2E_CH2 3 W+2/RB3/9+Forward W+2/RB3/9-Forward -LB_RB+2_S9_BP2D_CH0 5 W+2/RB4/9Backward _ -LB_RB+2_S9_BP2D_CH2 6 W+2/RB3/9+Backward W+2/RB3/9-Backward -LB_RB+2_S9_BP2C_CH1 7 W+2/RB2out/9Forward _ -LB_RB+2_S9_BP2C_CH0 8 W+2/RB2out/9Central _ -LB_RB+2_S9_BP2C_CH2 9 W+2/RB2out/9Backward _ -LB_RB+2_S9_BP2B_CH1 14 W+2/RB2in/9Forward _ -LB_RB+2_S9_BP2B_CH0 15 W+2/RB1out/9Forward _ -LB_RB+2_S9_BP2B_CH2 16 W+2/RB1in/9Forward _ -LB_RB+2_S9_BP2A_CH1 17 W+2/RB2in/9Backward _ -LB_RB+2_S9_BP2A_CH0 18 W+2/RB1out/9Backward _ -LB_RB+2_S9_BP2A_CH2 19 W+2/RB1in/9Backward _ - -LB_RB-1_S1_BN1E_CH0 2 W-1/RB4/1+Forward W-1/RB4/1-Forward -LB_RB-1_S1_BN1E_CH2 3 W-1/RB3/1+Forward W-1/RB3/1-Forward -LB_RB-1_S1_BN1D_CH0 5 W-1/RB4/1+Backward W-1/RB4/1-Backward -LB_RB-1_S1_BN1D_CH2 6 W-1/RB3/1+Backward W-1/RB3/1-Backward -LB_RB-1_S1_BN1C_CH1 7 W-1/RB2in/1Forward _ -LB_RB-1_S1_BN1C_CH0 8 W-1/RB2in/1Central _ -LB_RB-1_S1_BN1C_CH2 9 W-1/RB2in/1Backward _ -LB_RB-1_S1_BN1B_CH1 14 W-1/RB2out/1Forward _ -LB_RB-1_S1_BN1B_CH0 15 W-1/RB1out/1Forward _ -LB_RB-1_S1_BN1B_CH2 16 W-1/RB1in/1Forward _ -LB_RB-1_S1_BN1A_CH1 17 W-1/RB2out/1Backward _ -LB_RB-1_S1_BN1A_CH0 18 W-1/RB1out/1Backward _ -LB_RB-1_S1_BN1A_CH2 19 W-1/RB1in/1Backward _ - -LB_RB-1_S10_BN1E_CH1 1 W-1/RB4/10+Forward _ -LB_RB-1_S10_BN1E_CH0 2 W-1/RB4/10-Forward _ -LB_RB-1_S10_BN1E_CH2 3 W-1/RB3/10+Forward W-1/RB3/10-Forward -LB_RB-1_S10_BN1D_CH1 4 W-1/RB4/10+Backward _ -LB_RB-1_S10_BN1D_CH0 5 W-1/RB4/10-Backward _ -LB_RB-1_S10_BN1D_CH2 6 W-1/RB3/10+Backward W-1/RB3/10-Backward -LB_RB-1_S10_BN1C_CH1 7 W-1/RB2in/10Forward _ -LB_RB-1_S10_BN1C_CH0 8 W-1/RB2in/10Central _ -LB_RB-1_S10_BN1C_CH2 9 W-1/RB2in/10Backward _ -LB_RB-1_S10_BN1B_CH1 14 W-1/RB2out/10Forward _ -LB_RB-1_S10_BN1B_CH0 15 W-1/RB1out/10Forward _ -LB_RB-1_S10_BN1B_CH2 16 W-1/RB1in/10Forward _ -LB_RB-1_S10_BN1A_CH1 17 W-1/RB2out/10Backward _ -LB_RB-1_S10_BN1A_CH0 18 W-1/RB1out/10Backward _ -LB_RB-1_S10_BN1A_CH2 19 W-1/RB1in/10Backward _ - -LB_RB-1_S11_BN1E_CH0 2 W-1/RB4/11Forward _ -LB_RB-1_S11_BN1E_CH2 3 W-1/RB3/11+Forward W-1/RB3/11-Forward -LB_RB-1_S11_BN1D_CH0 5 W-1/RB4/11Backward _ -LB_RB-1_S11_BN1D_CH2 6 W-1/RB3/11+Backward W-1/RB3/11-Backward -LB_RB-1_S11_BN1C_CH1 7 W-1/RB2in/11Forward _ -LB_RB-1_S11_BN1C_CH0 8 W-1/RB2in/11Central _ -LB_RB-1_S11_BN1C_CH2 9 W-1/RB2in/11Backward _ -LB_RB-1_S11_BN1B_CH1 14 W-1/RB2out/11Forward _ -LB_RB-1_S11_BN1B_CH0 15 W-1/RB1out/11Forward _ -LB_RB-1_S11_BN1B_CH2 16 W-1/RB1in/11Forward _ -LB_RB-1_S11_BN1A_CH1 17 W-1/RB2out/11Backward _ -LB_RB-1_S11_BN1A_CH0 18 W-1/RB1out/11Backward _ -LB_RB-1_S11_BN1A_CH2 19 W-1/RB1in/11Backward _ - -LB_RB-1_S12_BN1E_CH0 2 W-1/RB4/12+Forward W-1/RB4/12-Forward -LB_RB-1_S12_BN1E_CH2 3 W-1/RB3/12+Forward W-1/RB3/12-Forward -LB_RB-1_S12_BN1D_CH0 5 W-1/RB4/12+Backward W-1/RB4/12-Backward -LB_RB-1_S12_BN1D_CH2 6 W-1/RB3/12+Backward W-1/RB3/12-Backward -LB_RB-1_S12_BN1C_CH1 7 W-1/RB2in/12Forward _ -LB_RB-1_S12_BN1C_CH0 8 W-1/RB2in/12Central _ -LB_RB-1_S12_BN1C_CH2 9 W-1/RB2in/12Backward _ -LB_RB-1_S12_BN1B_CH1 14 W-1/RB2out/12Forward _ -LB_RB-1_S12_BN1B_CH0 15 W-1/RB1out/12Forward _ -LB_RB-1_S12_BN1B_CH2 16 W-1/RB1in/12Forward _ -LB_RB-1_S12_BN1A_CH1 17 W-1/RB2out/12Backward _ -LB_RB-1_S12_BN1A_CH0 18 W-1/RB1out/12Backward _ -LB_RB-1_S12_BN1A_CH2 19 W-1/RB1in/12Backward _ - -LB_RB-1_S2_BN1E_CH0 2 W-1/RB4/2+Forward W-1/RB4/2-Forward -LB_RB-1_S2_BN1E_CH2 3 W-1/RB3/2+Forward W-1/RB3/2-Forward -LB_RB-1_S2_BN1D_CH0 5 W-1/RB4/2+Backward W-1/RB4/2-Backward -LB_RB-1_S2_BN1D_CH2 6 W-1/RB3/2+Backward W-1/RB3/2-Backward -LB_RB-1_S2_BN1C_CH1 7 W-1/RB2in/2Forward _ -LB_RB-1_S2_BN1C_CH0 8 W-1/RB2in/2Central _ -LB_RB-1_S2_BN1C_CH2 9 W-1/RB2in/2Backward _ -LB_RB-1_S2_BN1B_CH1 14 W-1/RB2out/2Forward _ -LB_RB-1_S2_BN1B_CH0 15 W-1/RB1out/2Forward _ -LB_RB-1_S2_BN1B_CH2 16 W-1/RB1in/2Forward _ -LB_RB-1_S2_BN1A_CH1 17 W-1/RB2out/2Backward _ -LB_RB-1_S2_BN1A_CH0 18 W-1/RB1out/2Backward _ -LB_RB-1_S2_BN1A_CH2 19 W-1/RB1in/2Backward _ - -LB_RB-1_S3_BN1E_CH0 2 W-1/RB4/3+Forward W-1/RB4/3-Forward -LB_RB-1_S3_BN1E_CH2 3 W-1/RB3/3+Forward W-1/RB3/3-Forward -LB_RB-1_S3_BN1D_CH0 5 W-1/RB4/3+Backward W-1/RB4/3-Backward -LB_RB-1_S3_BN1D_CH2 6 W-1/RB3/3+Backward W-1/RB3/3-Backward -LB_RB-1_S3_BN1C_CH1 7 W-1/RB2in/3Forward _ -LB_RB-1_S3_BN1C_CH0 8 W-1/RB2in/3Central _ -LB_RB-1_S3_BN1C_CH2 9 W-1/RB2in/3Backward _ -LB_RB-1_S3_BN1B_CH1 14 W-1/RB2out/3Forward _ -LB_RB-1_S3_BN1B_CH0 15 W-1/RB1out/3Forward _ -LB_RB-1_S3_BN1B_CH2 16 W-1/RB1in/3Forward _ -LB_RB-1_S3_BN1A_CH1 17 W-1/RB2out/3Backward _ -LB_RB-1_S3_BN1A_CH0 18 W-1/RB1out/3Backward _ -LB_RB-1_S3_BN1A_CH2 19 W-1/RB1in/3Backward _ - -LB_RB-1_S4_BN1E_CH1 1 W-1/RB4/4+Forward W-1/RB4/4++Forward -LB_RB-1_S4_BN1E_CH0 2 W-1/RB4/4-Forward W-1/RB4/4--Forward -LB_RB-1_S4_BN1E_CH2 3 W-1/RB3/4+Forward W-1/RB3/4-Forward -LB_RB-1_S4_BN1D_CH1 4 W-1/RB4/4+Backward W-1/RB4/4++Backward -LB_RB-1_S4_BN1D_CH0 5 W-1/RB4/4-Backward W-1/RB4/4--Backward -LB_RB-1_S4_BN1D_CH2 6 W-1/RB3/4+Backward W-1/RB3/4-Backward -LB_RB-1_S4_BN1C_CH1 7 W-1/RB2in/4Forward _ -LB_RB-1_S4_BN1C_CH0 8 W-1/RB2in/4Central _ -LB_RB-1_S4_BN1C_CH2 9 W-1/RB2in/4Backward _ -LB_RB-1_S4_BN1B_CH1 14 W-1/RB2out/4Forward _ -LB_RB-1_S4_BN1B_CH0 15 W-1/RB1out/4Forward _ -LB_RB-1_S4_BN1B_CH2 16 W-1/RB1in/4Forward _ -LB_RB-1_S4_BN1A_CH1 17 W-1/RB2out/4Backward _ -LB_RB-1_S4_BN1A_CH0 18 W-1/RB1out/4Backward _ -LB_RB-1_S4_BN1A_CH2 19 W-1/RB1in/4Backward _ - -LB_RB-1_S5_BN1E_CH0 2 W-1/RB4/5+Forward W-1/RB4/5-Forward -LB_RB-1_S5_BN1E_CH2 3 W-1/RB3/5+Forward W-1/RB3/5-Forward -LB_RB-1_S5_BN1D_CH0 5 W-1/RB4/5+Backward W-1/RB4/5-Backward -LB_RB-1_S5_BN1D_CH2 6 W-1/RB3/5+Backward W-1/RB3/5-Backward -LB_RB-1_S5_BN1C_CH1 7 W-1/RB2in/5Forward _ -LB_RB-1_S5_BN1C_CH0 8 W-1/RB2in/5Central _ -LB_RB-1_S5_BN1C_CH2 9 W-1/RB2in/5Backward _ -LB_RB-1_S5_BN1B_CH1 14 W-1/RB2out/5Forward _ -LB_RB-1_S5_BN1B_CH0 15 W-1/RB1out/5Forward _ -LB_RB-1_S5_BN1B_CH2 16 W-1/RB1in/5Forward _ -LB_RB-1_S5_BN1A_CH1 17 W-1/RB2out/5Backward _ -LB_RB-1_S5_BN1A_CH0 18 W-1/RB1out/5Backward _ -LB_RB-1_S5_BN1A_CH2 19 W-1/RB1in/5Backward _ - -LB_RB-1_S6_BN1E_CH0 2 W-1/RB4/6+Forward W-1/RB4/6-Forward -LB_RB-1_S6_BN1E_CH2 3 W-1/RB3/6+Forward W-1/RB3/6-Forward -LB_RB-1_S6_BN1D_CH0 5 W-1/RB4/6+Backward W-1/RB4/6-Backward -LB_RB-1_S6_BN1D_CH2 6 W-1/RB3/6+Backward W-1/RB3/6-Backward -LB_RB-1_S6_BN1C_CH1 7 W-1/RB2in/6Forward _ -LB_RB-1_S6_BN1C_CH0 8 W-1/RB2in/6Central _ -LB_RB-1_S6_BN1C_CH2 9 W-1/RB2in/6Backward _ -LB_RB-1_S6_BN1B_CH1 14 W-1/RB2out/6Forward _ -LB_RB-1_S6_BN1B_CH0 15 W-1/RB1out/6Forward _ -LB_RB-1_S6_BN1B_CH2 16 W-1/RB1in/6Forward _ -LB_RB-1_S6_BN1A_CH1 17 W-1/RB2out/6Backward _ -LB_RB-1_S6_BN1A_CH0 18 W-1/RB1out/6Backward _ -LB_RB-1_S6_BN1A_CH2 19 W-1/RB1in/6Backward _ - -LB_RB-1_S7_BN1E_CH0 2 W-1/RB4/7+Forward W-1/RB4/7-Forward -LB_RB-1_S7_BN1E_CH2 3 W-1/RB3/7+Forward W-1/RB3/7-Forward -LB_RB-1_S7_BN1D_CH0 5 W-1/RB4/7+Backward W-1/RB4/7-Backward -LB_RB-1_S7_BN1D_CH2 6 W-1/RB3/7+Backward W-1/RB3/7-Backward -LB_RB-1_S7_BN1C_CH1 7 W-1/RB2in/7Forward _ -LB_RB-1_S7_BN1C_CH0 8 W-1/RB2in/7Central _ -LB_RB-1_S7_BN1C_CH2 9 W-1/RB2in/7Backward _ -LB_RB-1_S7_BN1B_CH1 14 W-1/RB2out/7Forward _ -LB_RB-1_S7_BN1B_CH0 15 W-1/RB1out/7Forward _ -LB_RB-1_S7_BN1B_CH2 16 W-1/RB1in/7Forward _ -LB_RB-1_S7_BN1A_CH1 17 W-1/RB2out/7Backward _ -LB_RB-1_S7_BN1A_CH0 18 W-1/RB1out/7Backward _ -LB_RB-1_S7_BN1A_CH2 19 W-1/RB1in/7Backward _ - -LB_RB-1_S8_BN1E_CH0 2 W-1/RB4/8+Forward W-1/RB4/8-Forward -LB_RB-1_S8_BN1E_CH2 3 W-1/RB3/8+Forward W-1/RB3/8-Forward -LB_RB-1_S8_BN1D_CH0 5 W-1/RB4/8+Backward W-1/RB4/8-Backward -LB_RB-1_S8_BN1D_CH2 6 W-1/RB3/8+Backward W-1/RB3/8-Backward -LB_RB-1_S8_BN1C_CH1 7 W-1/RB2in/8Forward _ -LB_RB-1_S8_BN1C_CH0 8 W-1/RB2in/8Central _ -LB_RB-1_S8_BN1C_CH2 9 W-1/RB2in/8Backward _ -LB_RB-1_S8_BN1B_CH1 14 W-1/RB2out/8Forward _ -LB_RB-1_S8_BN1B_CH0 15 W-1/RB1out/8Forward _ -LB_RB-1_S8_BN1B_CH2 16 W-1/RB1in/8Forward _ -LB_RB-1_S8_BN1A_CH1 17 W-1/RB2out/8Backward _ -LB_RB-1_S8_BN1A_CH0 18 W-1/RB1out/8Backward _ -LB_RB-1_S8_BN1A_CH2 19 W-1/RB1in/8Backward _ - -LB_RB-1_S9_BN1E_CH0 2 W-1/RB4/9Forward _ -LB_RB-1_S9_BN1E_CH2 3 W-1/RB3/9+Forward W-1/RB3/9-Forward -LB_RB-1_S9_BN1D_CH0 5 W-1/RB4/9Backward _ -LB_RB-1_S9_BN1D_CH2 6 W-1/RB3/9+Backward W-1/RB3/9-Backward -LB_RB-1_S9_BN1C_CH1 7 W-1/RB2in/9Forward _ -LB_RB-1_S9_BN1C_CH0 8 W-1/RB2in/9Central _ -LB_RB-1_S9_BN1C_CH2 9 W-1/RB2in/9Backward _ -LB_RB-1_S9_BN1B_CH1 14 W-1/RB2out/9Forward _ -LB_RB-1_S9_BN1B_CH0 15 W-1/RB1out/9Forward _ -LB_RB-1_S9_BN1B_CH2 16 W-1/RB1in/9Forward _ -LB_RB-1_S9_BN1A_CH1 17 W-1/RB2out/9Backward _ -LB_RB-1_S9_BN1A_CH0 18 W-1/RB1out/9Backward _ -LB_RB-1_S9_BN1A_CH2 19 W-1/RB1in/9Backward _ - -LB_RB-2_S1_BN2E_CH0 2 W-2/RB4/1+Forward W-2/RB4/1-Forward -LB_RB-2_S1_BN2E_CH2 3 W-2/RB3/1+Forward W-2/RB3/1-Forward -LB_RB-2_S1_BN2D_CH0 5 W-2/RB4/1+Backward W-2/RB4/1-Backward -LB_RB-2_S1_BN2D_CH2 6 W-2/RB3/1+Backward W-2/RB3/1-Backward -LB_RB-2_S1_BN2C_CH1 7 W-2/RB2out/1Forward _ -LB_RB-2_S1_BN2C_CH0 8 W-2/RB2out/1Central _ -LB_RB-2_S1_BN2C_CH2 9 W-2/RB2out/1Backward _ -LB_RB-2_S1_BN2B_CH1 14 W-2/RB2in/1Forward _ -LB_RB-2_S1_BN2B_CH0 15 W-2/RB1out/1Forward _ -LB_RB-2_S1_BN2B_CH2 16 W-2/RB1in/1Forward _ -LB_RB-2_S1_BN2A_CH1 17 W-2/RB2in/1Backward _ -LB_RB-2_S1_BN2A_CH0 18 W-2/RB1out/1Backward _ -LB_RB-2_S1_BN2A_CH2 19 W-2/RB1in/1Backward _ - -LB_RB-2_S10_BN2E_CH1 1 W-2/RB4/10+Forward _ -LB_RB-2_S10_BN2E_CH0 2 W-2/RB4/10-Forward _ -LB_RB-2_S10_BN2E_CH2 3 W-2/RB3/10+Forward W-2/RB3/10-Forward -LB_RB-2_S10_BN2D_CH1 4 W-2/RB4/10+Backward _ -LB_RB-2_S10_BN2D_CH0 5 W-2/RB4/10-Backward _ -LB_RB-2_S10_BN2D_CH2 6 W-2/RB3/10+Backward W-2/RB3/10-Backward -LB_RB-2_S10_BN2C_CH1 7 W-2/RB2out/10Forward _ -LB_RB-2_S10_BN2C_CH0 8 W-2/RB2out/10Central _ -LB_RB-2_S10_BN2C_CH2 9 W-2/RB2out/10Backward _ -LB_RB-2_S10_BN2B_CH1 14 W-2/RB2in/10Forward _ -LB_RB-2_S10_BN2B_CH0 15 W-2/RB1out/10Forward _ -LB_RB-2_S10_BN2B_CH2 16 W-2/RB1in/10Forward _ -LB_RB-2_S10_BN2A_CH1 17 W-2/RB2in/10Backward _ -LB_RB-2_S10_BN2A_CH0 18 W-2/RB1out/10Backward _ -LB_RB-2_S10_BN2A_CH2 19 W-2/RB1in/10Backward _ - -LB_RB-2_S11_BN2E_CH0 2 W-2/RB4/11Forward _ -LB_RB-2_S11_BN2E_CH2 3 W-2/RB3/11+Forward W-2/RB3/11-Forward -LB_RB-2_S11_BN2D_CH0 5 W-2/RB4/11Backward _ -LB_RB-2_S11_BN2D_CH2 6 W-2/RB3/11+Backward W-2/RB3/11-Backward -LB_RB-2_S11_BN2C_CH1 7 W-2/RB2out/11Forward _ -LB_RB-2_S11_BN2C_CH0 8 W-2/RB2out/11Central _ -LB_RB-2_S11_BN2C_CH2 9 W-2/RB2out/11Backward _ -LB_RB-2_S11_BN2B_CH1 14 W-2/RB2in/11Forward _ -LB_RB-2_S11_BN2B_CH0 15 W-2/RB1out/11Forward _ -LB_RB-2_S11_BN2B_CH2 16 W-2/RB1in/11Forward _ -LB_RB-2_S11_BN2A_CH1 17 W-2/RB2in/11Backward _ -LB_RB-2_S11_BN2A_CH0 18 W-2/RB1out/11Backward _ -LB_RB-2_S11_BN2A_CH2 19 W-2/RB1in/11Backward _ - -LB_RB-2_S12_BN2E_CH0 2 W-2/RB4/12+Forward W-2/RB4/12-Forward -LB_RB-2_S12_BN2E_CH2 3 W-2/RB3/12+Forward W-2/RB3/12-Forward -LB_RB-2_S12_BN2D_CH0 5 W-2/RB4/12+Backward W-2/RB4/12-Backward -LB_RB-2_S12_BN2D_CH2 6 W-2/RB3/12+Backward W-2/RB3/12-Backward -LB_RB-2_S12_BN2C_CH1 7 W-2/RB2out/12Forward _ -LB_RB-2_S12_BN2C_CH0 8 W-2/RB2out/12Central _ -LB_RB-2_S12_BN2C_CH2 9 W-2/RB2out/12Backward _ -LB_RB-2_S12_BN2B_CH1 14 W-2/RB2in/12Forward _ -LB_RB-2_S12_BN2B_CH0 15 W-2/RB1out/12Forward _ -LB_RB-2_S12_BN2B_CH2 16 W-2/RB1in/12Forward _ -LB_RB-2_S12_BN2A_CH1 17 W-2/RB2in/12Backward _ -LB_RB-2_S12_BN2A_CH0 18 W-2/RB1out/12Backward _ -LB_RB-2_S12_BN2A_CH2 19 W-2/RB1in/12Backward _ - -LB_RB-2_S2_BN2E_CH0 2 W-2/RB4/2+Forward W-2/RB4/2-Forward -LB_RB-2_S2_BN2E_CH2 3 W-2/RB3/2+Forward W-2/RB3/2-Forward -LB_RB-2_S2_BN2D_CH0 5 W-2/RB4/2+Backward W-2/RB4/2-Backward -LB_RB-2_S2_BN2D_CH2 6 W-2/RB3/2+Backward W-2/RB3/2-Backward -LB_RB-2_S2_BN2C_CH1 7 W-2/RB2out/2Forward _ -LB_RB-2_S2_BN2C_CH0 8 W-2/RB2out/2Central _ -LB_RB-2_S2_BN2C_CH2 9 W-2/RB2out/2Backward _ -LB_RB-2_S2_BN2B_CH1 14 W-2/RB2in/2Forward _ -LB_RB-2_S2_BN2B_CH0 15 W-2/RB1out/2Forward _ -LB_RB-2_S2_BN2B_CH2 16 W-2/RB1in/2Forward _ -LB_RB-2_S2_BN2A_CH1 17 W-2/RB2in/2Backward _ -LB_RB-2_S2_BN2A_CH0 18 W-2/RB1out/2Backward _ -LB_RB-2_S2_BN2A_CH2 19 W-2/RB1in/2Backward _ - -LB_RB-2_S3_BN2E_CH0 2 W-2/RB4/3+Forward W-2/RB4/3-Forward -LB_RB-2_S3_BN2E_CH2 3 W-2/RB3/3+Forward W-2/RB3/3-Forward -LB_RB-2_S3_BN2D_CH0 5 W-2/RB4/3+Backward W-2/RB4/3-Backward -LB_RB-2_S3_BN2D_CH2 6 W-2/RB3/3+Backward W-2/RB3/3-Backward -LB_RB-2_S3_BN2C_CH1 7 W-2/RB2out/3Forward _ -LB_RB-2_S3_BN2C_CH0 8 W-2/RB2out/3Central _ -LB_RB-2_S3_BN2C_CH2 9 W-2/RB2out/3Backward _ -LB_RB-2_S3_BN2B_CH1 14 W-2/RB2in/3Forward _ -LB_RB-2_S3_BN2B_CH0 15 W-2/RB1out/3Forward _ -LB_RB-2_S3_BN2B_CH2 16 W-2/RB1in/3Forward _ -LB_RB-2_S3_BN2A_CH1 17 W-2/RB2in/3Backward _ -LB_RB-2_S3_BN2A_CH0 18 W-2/RB1out/3Backward _ -LB_RB-2_S3_BN2A_CH2 19 W-2/RB1in/3Backward _ - -LB_RB-2_S4_BN2E_CH1 1 W-2/RB4/4+Forward W-2/RB4/4++Forward -LB_RB-2_S4_BN2E_CH0 2 W-2/RB4/4-Forward W-2/RB4/4--Forward -LB_RB-2_S4_BN2E_CH2 3 W-2/RB3/4+Forward W-2/RB3/4-Forward -LB_RB-2_S4_BN2D_CH1 4 W-2/RB4/4+Backward W-2/RB4/4++Backward -LB_RB-2_S4_BN2D_CH0 5 W-2/RB4/4-Backward W-2/RB4/4--Backward -LB_RB-2_S4_BN2D_CH2 6 W-2/RB3/4+Backward W-2/RB3/4-Backward -LB_RB-2_S4_BN2C_CH1 7 W-2/RB2out/4Forward _ -LB_RB-2_S4_BN2C_CH0 8 W-2/RB2out/4Central _ -LB_RB-2_S4_BN2C_CH2 9 W-2/RB2out/4Backward _ -LB_RB-2_S4_BN2B_CH1 14 W-2/RB2in/4Forward _ -LB_RB-2_S4_BN2B_CH0 15 W-2/RB1out/4Forward _ -LB_RB-2_S4_BN2B_CH2 16 W-2/RB1in/4Forward _ -LB_RB-2_S4_BN2A_CH1 17 W-2/RB2in/4Backward _ -LB_RB-2_S4_BN2A_CH0 18 W-2/RB1out/4Backward _ -LB_RB-2_S4_BN2A_CH2 19 W-2/RB1in/4Backward _ - -LB_RB-2_S5_BN2E_CH0 2 W-2/RB4/5+Forward W-2/RB4/5-Forward -LB_RB-2_S5_BN2E_CH2 3 W-2/RB3/5+Forward W-2/RB3/5-Forward -LB_RB-2_S5_BN2D_CH0 5 W-2/RB4/5+Backward W-2/RB4/5-Backward -LB_RB-2_S5_BN2D_CH2 6 W-2/RB3/5+Backward W-2/RB3/5-Backward -LB_RB-2_S5_BN2C_CH1 7 W-2/RB2out/5Forward _ -LB_RB-2_S5_BN2C_CH0 8 W-2/RB2out/5Central _ -LB_RB-2_S5_BN2C_CH2 9 W-2/RB2out/5Backward _ -LB_RB-2_S5_BN2B_CH1 14 W-2/RB2in/5Forward _ -LB_RB-2_S5_BN2B_CH0 15 W-2/RB1out/5Forward _ -LB_RB-2_S5_BN2B_CH2 16 W-2/RB1in/5Forward _ -LB_RB-2_S5_BN2A_CH1 17 W-2/RB2in/5Backward _ -LB_RB-2_S5_BN2A_CH0 18 W-2/RB1out/5Backward _ -LB_RB-2_S5_BN2A_CH2 19 W-2/RB1in/5Backward _ - -LB_RB-2_S6_BN2E_CH0 2 W-2/RB4/6+Forward W-2/RB4/6-Forward -LB_RB-2_S6_BN2E_CH2 3 W-2/RB3/6+Forward W-2/RB3/6-Forward -LB_RB-2_S6_BN2D_CH0 5 W-2/RB4/6+Backward W-2/RB4/6-Backward -LB_RB-2_S6_BN2D_CH2 6 W-2/RB3/6+Backward W-2/RB3/6-Backward -LB_RB-2_S6_BN2C_CH1 7 W-2/RB2out/6Forward _ -LB_RB-2_S6_BN2C_CH0 8 W-2/RB2out/6Central _ -LB_RB-2_S6_BN2C_CH2 9 W-2/RB2out/6Backward _ -LB_RB-2_S6_BN2B_CH1 14 W-2/RB2in/6Forward _ -LB_RB-2_S6_BN2B_CH0 15 W-2/RB1out/6Forward _ -LB_RB-2_S6_BN2B_CH2 16 W-2/RB1in/6Forward _ -LB_RB-2_S6_BN2A_CH1 17 W-2/RB2in/6Backward _ -LB_RB-2_S6_BN2A_CH0 18 W-2/RB1out/6Backward _ -LB_RB-2_S6_BN2A_CH2 19 W-2/RB1in/6Backward _ - -LB_RB-2_S7_BN2E_CH0 2 W-2/RB4/7+Forward W-2/RB4/7-Forward -LB_RB-2_S7_BN2E_CH2 3 W-2/RB3/7+Forward W-2/RB3/7-Forward -LB_RB-2_S7_BN2D_CH0 5 W-2/RB4/7+Backward W-2/RB4/7-Backward -LB_RB-2_S7_BN2D_CH2 6 W-2/RB3/7+Backward W-2/RB3/7-Backward -LB_RB-2_S7_BN2C_CH1 7 W-2/RB2out/7Forward _ -LB_RB-2_S7_BN2C_CH0 8 W-2/RB2out/7Central _ -LB_RB-2_S7_BN2C_CH2 9 W-2/RB2out/7Backward _ -LB_RB-2_S7_BN2B_CH1 14 W-2/RB2in/7Forward _ -LB_RB-2_S7_BN2B_CH0 15 W-2/RB1out/7Forward _ -LB_RB-2_S7_BN2B_CH2 16 W-2/RB1in/7Forward _ -LB_RB-2_S7_BN2A_CH1 17 W-2/RB2in/7Backward _ -LB_RB-2_S7_BN2A_CH0 18 W-2/RB1out/7Backward _ -LB_RB-2_S7_BN2A_CH2 19 W-2/RB1in/7Backward _ - -LB_RB-2_S8_BN2E_CH0 2 W-2/RB4/8+Forward W-2/RB4/8-Forward -LB_RB-2_S8_BN2E_CH2 3 W-2/RB3/8+Forward W-2/RB3/8-Forward -LB_RB-2_S8_BN2D_CH0 5 W-2/RB4/8+Backward W-2/RB4/8-Backward -LB_RB-2_S8_BN2D_CH2 6 W-2/RB3/8+Backward W-2/RB3/8-Backward -LB_RB-2_S8_BN2C_CH1 7 W-2/RB2out/8Forward _ -LB_RB-2_S8_BN2C_CH0 8 W-2/RB2out/8Central _ -LB_RB-2_S8_BN2C_CH2 9 W-2/RB2out/8Backward _ -LB_RB-2_S8_BN2B_CH1 14 W-2/RB2in/8Forward _ -LB_RB-2_S8_BN2B_CH0 15 W-2/RB1out/8Forward _ -LB_RB-2_S8_BN2B_CH2 16 W-2/RB1in/8Forward _ -LB_RB-2_S8_BN2A_CH1 17 W-2/RB2in/8Backward _ -LB_RB-2_S8_BN2A_CH0 18 W-2/RB1out/8Backward _ -LB_RB-2_S8_BN2A_CH2 19 W-2/RB1in/8Backward _ - -LB_RB-2_S9_BN2E_CH0 2 W-2/RB4/9Forward _ -LB_RB-2_S9_BN2E_CH2 3 W-2/RB3/9+Forward W-2/RB3/9-Forward -LB_RB-2_S9_BN2D_CH0 5 W-2/RB4/9Backward _ -LB_RB-2_S9_BN2D_CH2 6 W-2/RB3/9+Backward W-2/RB3/9-Backward -LB_RB-2_S9_BN2C_CH1 7 W-2/RB2out/9Forward _ -LB_RB-2_S9_BN2C_CH0 8 W-2/RB2out/9Central _ -LB_RB-2_S9_BN2C_CH2 9 W-2/RB2out/9Backward _ -LB_RB-2_S9_BN2B_CH1 14 W-2/RB2in/9Forward _ -LB_RB-2_S9_BN2B_CH0 15 W-2/RB1out/9Forward _ -LB_RB-2_S9_BN2B_CH2 16 W-2/RB1in/9Forward _ -LB_RB-2_S9_BN2A_CH1 17 W-2/RB2in/9Backward _ -LB_RB-2_S9_BN2A_CH0 18 W-2/RB1out/9Backward _ -LB_RB-2_S9_BN2A_CH2 19 W-2/RB1in/9Backward _ - -LB_RB0_S1_BN0E_CH0 2 W0/RB4/1+Forward W0/RB4/1-Forward -LB_RB0_S1_BN0E_CH2 3 W0/RB3/1+Forward W0/RB3/1-Forward -LB_RB0_S1_BP0E_CH0 5 W0/RB4/1+Backward W0/RB4/1-Backward -LB_RB0_S1_BP0E_CH2 6 W0/RB3/1+Backward W0/RB3/1-Backward -LB_RB0_S1_BM0C_CH1 7 W0/RB2in/1Forward _ -LB_RB0_S1_BM0C_CH0 8 W0/RB2in/1Central _ -LB_RB0_S1_BM0C_CH2 9 W0/RB2in/1Backward _ -LB_RB0_S1_BN0B_CH1 14 W0/RB2out/1Forward _ -LB_RB0_S1_BN0B_CH0 15 W0/RB1out/1Forward _ -LB_RB0_S1_BN0B_CH2 16 W0/RB1in/1Forward _ -LB_RB0_S1_BP0B_CH1 17 W0/RB2out/1Backward _ -LB_RB0_S1_BP0B_CH0 18 W0/RB1out/1Backward _ -LB_RB0_S1_BP0B_CH2 19 W0/RB1in/1Backward _ - -LB_RB0_S10_BN0E_CH1 1 W0/RB4/10-Forward _ -LB_RB0_S10_BN0E_CH0 2 W0/RB4/10+Forward _ -LB_RB0_S10_BN0E_CH2 3 W0/RB3/10+Forward W0/RB3/10-Forward -LB_RB0_S10_BP0E_CH1 4 W0/RB4/10-Backward _ -LB_RB0_S10_BP0E_CH0 5 W0/RB4/10+Backward _ -LB_RB0_S10_BP0E_CH2 6 W0/RB3/10+Backward W0/RB3/10-Backward -LB_RB0_S10_BM0C_CH1 7 W0/RB2in/10Forward _ -LB_RB0_S10_BM0C_CH0 8 W0/RB2in/10Central _ -LB_RB0_S10_BM0C_CH2 9 W0/RB2in/10Backward _ -LB_RB0_S10_BN0B_CH1 14 W0/RB2out/10Forward _ -LB_RB0_S10_BN0B_CH0 15 W0/RB1out/10Forward _ -LB_RB0_S10_BN0B_CH2 16 W0/RB1in/10Forward _ -LB_RB0_S10_BP0B_CH1 17 W0/RB2out/10Backward _ -LB_RB0_S10_BP0B_CH0 18 W0/RB1out/10Backward _ -LB_RB0_S10_BP0B_CH2 19 W0/RB1in/10Backward _ - -LB_RB0_S11_BN0E_CH0 2 W0/RB4/11Forward _ -LB_RB0_S11_BN0E_CH2 3 W0/RB3/11+Forward W0/RB3/11-Forward -LB_RB0_S11_BP0E_CH0 5 W0/RB4/11Backward _ -LB_RB0_S11_BP0E_CH2 6 W0/RB3/11+Backward W0/RB3/11-Backward -LB_RB0_S11_BM0C_CH1 7 W0/RB2in/11Forward _ -LB_RB0_S11_BM0C_CH0 8 W0/RB2in/11Central _ -LB_RB0_S11_BM0C_CH2 9 W0/RB2in/11Backward _ -LB_RB0_S11_BN0B_CH1 14 W0/RB2out/11Forward _ -LB_RB0_S11_BN0B_CH0 15 W0/RB1out/11Forward _ -LB_RB0_S11_BN0B_CH2 16 W0/RB1in/11Forward _ -LB_RB0_S11_BP0B_CH1 17 W0/RB2out/11Backward _ -LB_RB0_S11_BP0B_CH0 18 W0/RB1out/11Backward _ -LB_RB0_S11_BP0B_CH2 19 W0/RB1in/11Backward _ - -LB_RB0_S12_BN0E_CH0 2 W0/RB4/12+Forward W0/RB4/12-Forward -LB_RB0_S12_BN0E_CH2 3 W0/RB3/12+Forward W0/RB3/12-Forward -LB_RB0_S12_BP0E_CH0 5 W0/RB4/12+Backward W0/RB4/12-Backward -LB_RB0_S12_BP0E_CH2 6 W0/RB3/12+Backward W0/RB3/12-Backward -LB_RB0_S12_BM0C_CH1 7 W0/RB2in/12Forward _ -LB_RB0_S12_BM0C_CH0 8 W0/RB2in/12Central _ -LB_RB0_S12_BM0C_CH2 9 W0/RB2in/12Backward _ -LB_RB0_S12_BN0B_CH1 14 W0/RB2out/12Forward _ -LB_RB0_S12_BN0B_CH0 15 W0/RB1out/12Forward _ -LB_RB0_S12_BN0B_CH2 16 W0/RB1in/12Forward _ -LB_RB0_S12_BP0B_CH1 17 W0/RB2out/12Backward _ -LB_RB0_S12_BP0B_CH0 18 W0/RB1out/12Backward _ -LB_RB0_S12_BP0B_CH2 19 W0/RB1in/12Backward _ - -LB_RB0_S2_BN0E_CH0 2 W0/RB4/2+Forward W0/RB4/2-Forward -LB_RB0_S2_BN0E_CH2 3 W0/RB3/2+Forward W0/RB3/2-Forward -LB_RB0_S2_BP0E_CH0 5 W0/RB4/2+Backward W0/RB4/2-Backward -LB_RB0_S2_BP0E_CH2 6 W0/RB3/2+Backward W0/RB3/2-Backward -LB_RB0_S2_BM0C_CH1 7 W0/RB2in/2Forward _ -LB_RB0_S2_BM0C_CH0 8 W0/RB2in/2Central _ -LB_RB0_S2_BM0C_CH2 9 W0/RB2in/2Backward _ -LB_RB0_S2_BN0B_CH1 14 W0/RB2out/2Forward _ -LB_RB0_S2_BN0B_CH0 15 W0/RB1out/2Forward _ -LB_RB0_S2_BN0B_CH2 16 W0/RB1in/2Forward _ -LB_RB0_S2_BP0B_CH1 17 W0/RB2out/2Backward _ -LB_RB0_S2_BP0B_CH0 18 W0/RB1out/2Backward _ -LB_RB0_S2_BP0B_CH2 19 W0/RB1in/2Backward _ - -LB_RB0_S3_BN0E_CH0 2 W0/RB4/3+Forward W0/RB4/3-Forward -LB_RB0_S3_BN0E_CH2 3 W0/RB3/3+Forward W0/RB3/3-Forward -LB_RB0_S3_BP0E_CH0 5 W0/RB4/3+Backward W0/RB4/3-Backward -LB_RB0_S3_BP0E_CH2 6 W0/RB3/3+Backward W0/RB3/3-Backward -LB_RB0_S3_BM0C_CH1 7 W0/RB2in/3Forward _ -LB_RB0_S3_BM0C_CH0 8 W0/RB2in/3Central _ -LB_RB0_S3_BM0C_CH2 9 W0/RB2in/3Backward _ -LB_RB0_S3_BN0B_CH1 14 W0/RB2out/3Forward _ -LB_RB0_S3_BN0B_CH0 15 W0/RB1out/3Forward _ -LB_RB0_S3_BN0B_CH2 16 W0/RB1in/3Forward _ -LB_RB0_S3_BP0B_CH1 17 W0/RB2out/3Backward _ -LB_RB0_S3_BP0B_CH0 18 W0/RB1out/3Backward _ -LB_RB0_S3_BP0B_CH2 19 W0/RB1in/3Backward _ - -LB_RB0_S4_BN0E_CH1 1 W0/RB4/4+Forward W0/RB4/4++Forward -LB_RB0_S4_BN0E_CH0 2 W0/RB4/4-Forward W0/RB4/4--Forward -LB_RB0_S4_BN0E_CH2 3 W0/RB3/4+Forward W0/RB3/4-Forward -LB_RB0_S4_BP0E_CH1 4 W0/RB4/4+Backward W0/RB4/4++Backward -LB_RB0_S4_BP0E_CH0 5 W0/RB4/4-Backward W0/RB4/4--Backward -LB_RB0_S4_BP0E_CH2 6 W0/RB3/4+Backward W0/RB3/4-Backward -LB_RB0_S4_BM0C_CH1 7 W0/RB2in/4Forward _ -LB_RB0_S4_BM0C_CH0 8 W0/RB2in/4Central _ -LB_RB0_S4_BM0C_CH2 9 W0/RB2in/4Backward _ -LB_RB0_S4_BN0B_CH1 14 W0/RB2out/4Forward _ -LB_RB0_S4_BN0B_CH0 15 W0/RB1out/4Forward _ -LB_RB0_S4_BN0B_CH2 16 W0/RB1in/4Forward _ -LB_RB0_S4_BP0B_CH1 17 W0/RB2out/4Backward _ -LB_RB0_S4_BP0B_CH0 18 W0/RB1out/4Backward _ -LB_RB0_S4_BP0B_CH2 19 W0/RB1in/4Backward _ - -LB_RB0_S5_BN0E_CH0 2 W0/RB4/5+Forward W0/RB4/5-Forward -LB_RB0_S5_BN0E_CH2 3 W0/RB3/5+Forward W0/RB3/5-Forward -LB_RB0_S5_BP0E_CH0 5 W0/RB4/5+Backward W0/RB4/5-Backward -LB_RB0_S5_BP0E_CH2 6 W0/RB3/5+Backward W0/RB3/5-Backward -LB_RB0_S5_BM0C_CH1 7 W0/RB2in/5Forward _ -LB_RB0_S5_BM0C_CH0 8 W0/RB2in/5Central _ -LB_RB0_S5_BM0C_CH2 9 W0/RB2in/5Backward _ -LB_RB0_S5_BN0B_CH1 14 W0/RB2out/5Forward _ -LB_RB0_S5_BN0B_CH0 15 W0/RB1out/5Forward _ -LB_RB0_S5_BN0B_CH2 16 W0/RB1in/5Forward _ -LB_RB0_S5_BP0B_CH1 17 W0/RB2out/5Backward _ -LB_RB0_S5_BP0B_CH0 18 W0/RB1out/5Backward _ -LB_RB0_S5_BP0B_CH2 19 W0/RB1in/5Backward _ - -LB_RB0_S6_BN0E_CH0 2 W0/RB4/6+Forward W0/RB4/6-Forward -LB_RB0_S6_BN0E_CH2 3 W0/RB3/6+Forward W0/RB3/6-Forward -LB_RB0_S6_BP0E_CH0 5 W0/RB4/6+Backward W0/RB4/6-Backward -LB_RB0_S6_BP0E_CH2 6 W0/RB3/6+Backward W0/RB3/6-Backward -LB_RB0_S6_BM0C_CH1 7 W0/RB2in/6Forward _ -LB_RB0_S6_BM0C_CH0 8 W0/RB2in/6Central _ -LB_RB0_S6_BM0C_CH2 9 W0/RB2in/6Backward _ -LB_RB0_S6_BN0B_CH1 14 W0/RB2out/6Forward _ -LB_RB0_S6_BN0B_CH0 15 W0/RB1out/6Forward _ -LB_RB0_S6_BN0B_CH2 16 W0/RB1in/6Forward _ -LB_RB0_S6_BP0B_CH1 17 W0/RB2out/6Backward _ -LB_RB0_S6_BP0B_CH0 18 W0/RB1out/6Backward _ -LB_RB0_S6_BP0B_CH2 19 W0/RB1in/6Backward _ - -LB_RB0_S7_BN0E_CH0 2 W0/RB4/7+Forward W0/RB4/7-Forward -LB_RB0_S7_BN0E_CH2 3 W0/RB3/7+Forward W0/RB3/7-Forward -LB_RB0_S7_BP0E_CH0 5 W0/RB4/7+Backward W0/RB4/7-Backward -LB_RB0_S7_BP0E_CH2 6 W0/RB3/7+Backward W0/RB3/7-Backward -LB_RB0_S7_BM0C_CH1 7 W0/RB2in/7Forward _ -LB_RB0_S7_BM0C_CH0 8 W0/RB2in/7Central _ -LB_RB0_S7_BM0C_CH2 9 W0/RB2in/7Backward _ -LB_RB0_S7_BN0B_CH1 14 W0/RB2out/7Forward _ -LB_RB0_S7_BN0B_CH0 15 W0/RB1out/7Forward _ -LB_RB0_S7_BN0B_CH2 16 W0/RB1in/7Forward _ -LB_RB0_S7_BP0B_CH1 17 W0/RB2out/7Backward _ -LB_RB0_S7_BP0B_CH0 18 W0/RB1out/7Backward _ -LB_RB0_S7_BP0B_CH2 19 W0/RB1in/7Backward _ - -LB_RB0_S8_BN0E_CH0 2 W0/RB4/8+Forward W0/RB4/8-Forward -LB_RB0_S8_BN0E_CH2 3 W0/RB3/8+Forward W0/RB3/8-Forward -LB_RB0_S8_BP0E_CH0 5 W0/RB4/8+Backward W0/RB4/8-Backward -LB_RB0_S8_BP0E_CH2 6 W0/RB3/8+Backward W0/RB3/8-Backward -LB_RB0_S8_BM0C_CH1 7 W0/RB2in/8Forward _ -LB_RB0_S8_BM0C_CH0 8 W0/RB2in/8Central _ -LB_RB0_S8_BM0C_CH2 9 W0/RB2in/8Backward _ -LB_RB0_S8_BN0B_CH1 14 W0/RB2out/8Forward _ -LB_RB0_S8_BN0B_CH0 15 W0/RB1out/8Forward _ -LB_RB0_S8_BN0B_CH2 16 W0/RB1in/8Forward _ -LB_RB0_S8_BP0B_CH1 17 W0/RB2out/8Backward _ -LB_RB0_S8_BP0B_CH0 18 W0/RB1out/8Backward _ -LB_RB0_S8_BP0B_CH2 19 W0/RB1in/8Backward _ - -LB_RB0_S9_BN0E_CH0 2 W0/RB4/9Forward _ -LB_RB0_S9_BN0E_CH2 3 W0/RB3/9+Forward W0/RB3/9-Forward -LB_RB0_S9_BP0E_CH0 5 W0/RB4/9Backward _ -LB_RB0_S9_BP0E_CH2 6 W0/RB3/9+Backward W0/RB3/9-Backward -LB_RB0_S9_BM0C_CH1 7 W0/RB2in/9Forward _ -LB_RB0_S9_BM0C_CH0 8 W0/RB2in/9Central _ -LB_RB0_S9_BM0C_CH2 9 W0/RB2in/9Backward _ -LB_RB0_S9_BN0B_CH1 14 W0/RB2out/9Forward _ -LB_RB0_S9_BN0B_CH0 15 W0/RB1out/9Forward _ -LB_RB0_S9_BN0B_CH2 16 W0/RB1in/9Forward _ -LB_RB0_S9_BP0B_CH1 17 W0/RB2out/9Backward _ -LB_RB0_S9_BP0B_CH0 18 W0/RB1out/9Backward _ -LB_RB0_S9_BP0B_CH2 19 W0/RB1in/9Backward _ - -LB_RE-1_S1_EN12_CH1 4 RE-1/2/36 _ -LB_RE-1_S1_EN12_CH0 5 RE-1/2/1 _ -LB_RE-1_S1_EN12_CH2 6 RE-1/2/2 _ -LB_RE-1_S1_EN13_CH1 7 RE-1/3/36 _ -LB_RE-1_S1_EN13_CH0 8 RE-1/3/1 _ -LB_RE-1_S1_EN13_CH2 9 RE-1/3/2 _ -LB_RE-1_S1_EN22_CH1 14 RE-2/2/2 _ -LB_RE-1_S1_EN22_CH0 15 RE-2/2/3 _ -LB_RE-1_S1_EN22_CH2 16 RE-2/2/4 _ -LB_RE-1_S1_EN23_CH1 17 RE-2/3/2 _ -LB_RE-1_S1_EN23_CH0 18 RE-2/3/3 _ -LB_RE-1_S1_EN23_CH2 19 RE-2/3/4 _ - -LB_RE-1_S10_EN12_CH1 4 RE-1/2/27 _ -LB_RE-1_S10_EN12_CH0 5 RE-1/2/28 _ -LB_RE-1_S10_EN12_CH2 6 RE-1/2/29 _ -LB_RE-1_S10_EN13_CH1 7 RE-1/3/27 _ -LB_RE-1_S10_EN13_CH0 8 RE-1/3/28 _ -LB_RE-1_S10_EN13_CH2 9 RE-1/3/29 _ -LB_RE-1_S10_EN22_CH1 14 RE-2/2/29 _ -LB_RE-1_S10_EN22_CH0 15 RE-2/2/30 _ -LB_RE-1_S10_EN22_CH2 16 RE-2/2/31 _ -LB_RE-1_S10_EN23_CH1 17 RE-2/3/29 _ -LB_RE-1_S10_EN23_CH0 18 RE-2/3/30 _ -LB_RE-1_S10_EN23_CH2 19 RE-2/3/31 _ - -LB_RE-1_S11_EN12_CH1 4 RE-1/2/30 _ -LB_RE-1_S11_EN12_CH0 5 RE-1/2/31 _ -LB_RE-1_S11_EN12_CH2 6 RE-1/2/32 _ -LB_RE-1_S11_EN13_CH1 7 RE-1/3/30 _ -LB_RE-1_S11_EN13_CH0 8 RE-1/3/31 _ -LB_RE-1_S11_EN13_CH2 9 RE-1/3/32 _ -LB_RE-1_S11_EN22_CH1 14 RE-2/2/32 _ -LB_RE-1_S11_EN22_CH0 15 RE-2/2/33 _ -LB_RE-1_S11_EN22_CH2 16 RE-2/2/34 _ -LB_RE-1_S11_EN23_CH1 17 RE-2/3/32 _ -LB_RE-1_S11_EN23_CH0 18 RE-2/3/33 _ -LB_RE-1_S11_EN23_CH2 19 RE-2/3/34 _ - -LB_RE-1_S12_EN12_CH1 4 RE-1/2/33 _ -LB_RE-1_S12_EN12_CH0 5 RE-1/2/34 _ -LB_RE-1_S12_EN12_CH2 6 RE-1/2/35 _ -LB_RE-1_S12_EN13_CH1 7 RE-1/3/33 _ -LB_RE-1_S12_EN13_CH0 8 RE-1/3/34 _ -LB_RE-1_S12_EN13_CH2 9 RE-1/3/35 _ -LB_RE-1_S12_EN22_CH1 14 RE-2/2/35 _ -LB_RE-1_S12_EN22_CH0 15 RE-2/2/36 _ -LB_RE-1_S12_EN22_CH2 16 RE-2/2/1 _ -LB_RE-1_S12_EN23_CH1 17 RE-2/3/35 _ -LB_RE-1_S12_EN23_CH0 18 RE-2/3/36 _ -LB_RE-1_S12_EN23_CH2 19 RE-2/3/1 _ - -LB_RE-1_S2_EN12_CH1 4 RE-1/2/3 _ -LB_RE-1_S2_EN12_CH0 5 RE-1/2/4 _ -LB_RE-1_S2_EN12_CH2 6 RE-1/2/5 _ -LB_RE-1_S2_EN13_CH1 7 RE-1/3/3 _ -LB_RE-1_S2_EN13_CH0 8 RE-1/3/4 _ -LB_RE-1_S2_EN13_CH2 9 RE-1/3/5 _ -LB_RE-1_S2_EN22_CH1 14 RE-2/2/5 _ -LB_RE-1_S2_EN22_CH0 15 RE-2/2/6 _ -LB_RE-1_S2_EN22_CH2 16 RE-2/2/7 _ -LB_RE-1_S2_EN23_CH1 17 RE-2/3/5 _ -LB_RE-1_S2_EN23_CH0 18 RE-2/3/6 _ -LB_RE-1_S2_EN23_CH2 19 RE-2/3/7 _ - -LB_RE-1_S3_EN12_CH1 4 RE-1/2/6 _ -LB_RE-1_S3_EN12_CH0 5 RE-1/2/7 _ -LB_RE-1_S3_EN12_CH2 6 RE-1/2/8 _ -LB_RE-1_S3_EN13_CH1 7 RE-1/3/6 _ -LB_RE-1_S3_EN13_CH0 8 RE-1/3/7 _ -LB_RE-1_S3_EN13_CH2 9 RE-1/3/8 _ -LB_RE-1_S3_EN22_CH1 14 RE-2/2/8 _ -LB_RE-1_S3_EN22_CH0 15 RE-2/2/9 _ -LB_RE-1_S3_EN22_CH2 16 RE-2/2/10 _ -LB_RE-1_S3_EN23_CH1 17 RE-2/3/8 _ -LB_RE-1_S3_EN23_CH0 18 RE-2/3/9 _ -LB_RE-1_S3_EN23_CH2 19 RE-2/3/10 _ - -LB_RE-1_S4_EN12_CH1 4 RE-1/2/9 _ -LB_RE-1_S4_EN12_CH0 5 RE-1/2/10 _ -LB_RE-1_S4_EN12_CH2 6 RE-1/2/11 _ -LB_RE-1_S4_EN13_CH1 7 RE-1/3/9 _ -LB_RE-1_S4_EN13_CH0 8 RE-1/3/10 _ -LB_RE-1_S4_EN13_CH2 9 RE-1/3/11 _ -LB_RE-1_S4_EN22_CH1 14 RE-2/2/11 _ -LB_RE-1_S4_EN22_CH0 15 RE-2/2/12 _ -LB_RE-1_S4_EN22_CH2 16 RE-2/2/13 _ -LB_RE-1_S4_EN23_CH1 17 RE-2/3/11 _ -LB_RE-1_S4_EN23_CH0 18 RE-2/3/12 _ -LB_RE-1_S4_EN23_CH2 19 RE-2/3/13 _ - -LB_RE-1_S5_EN12_CH1 4 RE-1/2/12 _ -LB_RE-1_S5_EN12_CH0 5 RE-1/2/13 _ -LB_RE-1_S5_EN12_CH2 6 RE-1/2/14 _ -LB_RE-1_S5_EN13_CH1 7 RE-1/3/12 _ -LB_RE-1_S5_EN13_CH0 8 RE-1/3/13 _ -LB_RE-1_S5_EN13_CH2 9 RE-1/3/14 _ -LB_RE-1_S5_EN22_CH1 14 RE-2/2/14 _ -LB_RE-1_S5_EN22_CH0 15 RE-2/2/15 _ -LB_RE-1_S5_EN22_CH2 16 RE-2/2/16 _ -LB_RE-1_S5_EN23_CH1 17 RE-2/3/14 _ -LB_RE-1_S5_EN23_CH0 18 RE-2/3/15 _ -LB_RE-1_S5_EN23_CH2 19 RE-2/3/16 _ - -LB_RE-1_S6_EN12_CH1 4 RE-1/2/15 _ -LB_RE-1_S6_EN12_CH0 5 RE-1/2/16 _ -LB_RE-1_S6_EN12_CH2 6 RE-1/2/17 _ -LB_RE-1_S6_EN13_CH1 7 RE-1/3/15 _ -LB_RE-1_S6_EN13_CH0 8 RE-1/3/16 _ -LB_RE-1_S6_EN13_CH2 9 RE-1/3/17 _ -LB_RE-1_S6_EN22_CH1 14 RE-2/2/17 _ -LB_RE-1_S6_EN22_CH0 15 RE-2/2/18 _ -LB_RE-1_S6_EN22_CH2 16 RE-2/2/19 _ -LB_RE-1_S6_EN23_CH1 17 RE-2/3/17 _ -LB_RE-1_S6_EN23_CH0 18 RE-2/3/18 _ -LB_RE-1_S6_EN23_CH2 19 RE-2/3/19 _ - -LB_RE-1_S7_EN12_CH1 4 RE-1/2/18 _ -LB_RE-1_S7_EN12_CH0 5 RE-1/2/19 _ -LB_RE-1_S7_EN12_CH2 6 RE-1/2/20 _ -LB_RE-1_S7_EN13_CH1 7 RE-1/3/18 _ -LB_RE-1_S7_EN13_CH0 8 RE-1/3/19 _ -LB_RE-1_S7_EN13_CH2 9 RE-1/3/20 _ -LB_RE-1_S7_EN22_CH1 14 RE-2/2/20 _ -LB_RE-1_S7_EN22_CH0 15 RE-2/2/21 _ -LB_RE-1_S7_EN22_CH2 16 RE-2/2/22 _ -LB_RE-1_S7_EN23_CH1 17 RE-2/3/20 _ -LB_RE-1_S7_EN23_CH0 18 RE-2/3/21 _ -LB_RE-1_S7_EN23_CH2 19 RE-2/3/22 _ - -LB_RE-1_S8_EN12_CH1 4 RE-1/2/21 _ -LB_RE-1_S8_EN12_CH0 5 RE-1/2/22 _ -LB_RE-1_S8_EN12_CH2 6 RE-1/2/23 _ -LB_RE-1_S8_EN13_CH1 7 RE-1/3/21 _ -LB_RE-1_S8_EN13_CH0 8 RE-1/3/22 _ -LB_RE-1_S8_EN13_CH2 9 RE-1/3/23 _ -LB_RE-1_S8_EN22_CH1 14 RE-2/2/23 _ -LB_RE-1_S8_EN22_CH0 15 RE-2/2/24 _ -LB_RE-1_S8_EN22_CH2 16 RE-2/2/25 _ -LB_RE-1_S8_EN23_CH1 17 RE-2/3/23 _ -LB_RE-1_S8_EN23_CH0 18 RE-2/3/24 _ -LB_RE-1_S8_EN23_CH2 19 RE-2/3/25 _ - -LB_RE-1_S9_EN12_CH1 4 RE-1/2/24 _ -LB_RE-1_S9_EN12_CH0 5 RE-1/2/25 _ -LB_RE-1_S9_EN12_CH2 6 RE-1/2/26 _ -LB_RE-1_S9_EN13_CH1 7 RE-1/3/24 _ -LB_RE-1_S9_EN13_CH0 8 RE-1/3/25 _ -LB_RE-1_S9_EN13_CH2 9 RE-1/3/26 _ -LB_RE-1_S9_EN22_CH1 14 RE-2/2/26 _ -LB_RE-1_S9_EN22_CH0 15 RE-2/2/27 _ -LB_RE-1_S9_EN22_CH2 16 RE-2/2/28 _ -LB_RE-1_S9_EN23_CH1 17 RE-2/3/26 _ -LB_RE-1_S9_EN23_CH0 18 RE-2/3/27 _ -LB_RE-1_S9_EN23_CH2 19 RE-2/3/28 _ - -LB_RE-4_S10_EN42_CH1 4 RE-4/2/27 _ -LB_RE-4_S10_EN42_CH0 5 RE-4/2/28 _ -LB_RE-4_S10_EN42_CH2 6 RE-4/2/29 _ -LB_RE-4_S10_EN43_CH1 7 RE-4/3/27 _ -LB_RE-4_S10_EN43_CH0 8 RE-4/3/28 _ -LB_RE-4_S10_EN43_CH2 9 RE-4/3/29 _ -LB_RE-4_S11_EN42_CH1 14 RE-4/2/30 _ -LB_RE-4_S11_EN42_CH0 15 RE-4/2/31 _ -LB_RE-4_S11_EN42_CH2 16 RE-4/2/32 _ -LB_RE-4_S11_EN43_CH1 17 RE-4/3/30 _ -LB_RE-4_S11_EN43_CH0 18 RE-4/3/31 _ -LB_RE-4_S11_EN43_CH2 19 RE-4/3/32 _ - -LB_RE-4_S12_EN42_CH1 4 RE-4/2/33 _ -LB_RE-4_S12_EN42_CH0 5 RE-4/2/34 _ -LB_RE-4_S12_EN42_CH2 6 RE-4/2/35 _ -LB_RE-4_S12_EN43_CH1 7 RE-4/3/33 _ -LB_RE-4_S12_EN43_CH0 8 RE-4/3/34 _ -LB_RE-4_S12_EN43_CH2 9 RE-4/3/35 _ -LB_RE-4_S1_EN42_CH1 14 RE-4/2/36 _ -LB_RE-4_S1_EN42_CH0 15 RE-4/2/1 _ -LB_RE-4_S1_EN42_CH2 16 RE-4/2/2 _ -LB_RE-4_S1_EN43_CH1 17 RE-4/3/36 _ -LB_RE-4_S1_EN43_CH0 18 RE-4/3/1 _ -LB_RE-4_S1_EN43_CH2 19 RE-4/3/2 _ - -LB_RE-4_S2_EN42_CH1 4 RE-4/2/3 _ -LB_RE-4_S2_EN42_CH0 5 RE-4/2/4 _ -LB_RE-4_S2_EN42_CH2 6 RE-4/2/5 _ -LB_RE-4_S2_EN43_CH1 7 RE-4/3/3 _ -LB_RE-4_S2_EN43_CH0 8 RE-4/3/4 _ -LB_RE-4_S2_EN43_CH2 9 RE-4/3/5 _ -LB_RE-4_S3_EN42_CH1 14 RE-4/2/6 _ -LB_RE-4_S3_EN42_CH0 15 RE-4/2/7 _ -LB_RE-4_S3_EN42_CH2 16 RE-4/2/8 _ -LB_RE-4_S3_EN43_CH1 17 RE-4/3/6 _ -LB_RE-4_S3_EN43_CH0 18 RE-4/3/7 _ -LB_RE-4_S3_EN43_CH2 19 RE-4/3/8 _ - -LB_RE-4_S4_EN42_CH1 4 RE-4/2/9 _ -LB_RE-4_S4_EN42_CH0 5 RE-4/2/10 _ -LB_RE-4_S4_EN42_CH2 6 RE-4/2/11 _ -LB_RE-4_S4_EN43_CH1 7 RE-4/3/9 _ -LB_RE-4_S4_EN43_CH0 8 RE-4/3/10 _ -LB_RE-4_S4_EN43_CH2 9 RE-4/3/11 _ -LB_RE-4_S5_EN42_CH1 14 RE-4/2/12 _ -LB_RE-4_S5_EN42_CH0 15 RE-4/2/13 _ -LB_RE-4_S5_EN42_CH2 16 RE-4/2/14 _ -LB_RE-4_S5_EN43_CH1 17 RE-4/3/12 _ -LB_RE-4_S5_EN43_CH0 18 RE-4/3/13 _ -LB_RE-4_S5_EN43_CH2 19 RE-4/3/14 _ - -LB_RE-4_S6_EN42_CH1 4 RE-4/2/15 _ -LB_RE-4_S6_EN42_CH0 5 RE-4/2/16 _ -LB_RE-4_S6_EN42_CH2 6 RE-4/2/17 _ -LB_RE-4_S6_EN43_CH1 7 RE-4/3/15 _ -LB_RE-4_S6_EN43_CH0 8 RE-4/3/16 _ -LB_RE-4_S6_EN43_CH2 9 RE-4/3/17 _ -LB_RE-4_S7_EN42_CH1 14 RE-4/2/18 _ -LB_RE-4_S7_EN42_CH0 15 RE-4/2/19 _ -LB_RE-4_S7_EN42_CH2 16 RE-4/2/20 _ -LB_RE-4_S7_EN43_CH1 17 RE-4/3/18 _ -LB_RE-4_S7_EN43_CH0 18 RE-4/3/19 _ -LB_RE-4_S7_EN43_CH2 19 RE-4/3/20 _ - -LB_RE-4_S8_EN42_CH1 4 RE-4/2/21 _ -LB_RE-4_S8_EN42_CH0 5 RE-4/2/22 _ -LB_RE-4_S8_EN42_CH2 6 RE-4/2/23 _ -LB_RE-4_S8_EN43_CH1 7 RE-4/3/21 _ -LB_RE-4_S8_EN43_CH0 8 RE-4/3/22 _ -LB_RE-4_S8_EN43_CH2 9 RE-4/3/23 _ -LB_RE-4_S9_EN42_CH1 14 RE-4/2/24 _ -LB_RE-4_S9_EN42_CH0 15 RE-4/2/25 _ -LB_RE-4_S9_EN42_CH2 16 RE-4/2/26 _ -LB_RE-4_S9_EN43_CH1 17 RE-4/3/24 _ -LB_RE-4_S9_EN43_CH0 18 RE-4/3/25 _ -LB_RE-4_S9_EN43_CH2 19 RE-4/3/26 _ - -LB_RE-3_S10_EN32_CH1 4 RE-3/2/27 _ -LB_RE-3_S10_EN32_CH0 5 RE-3/2/28 _ -LB_RE-3_S10_EN32_CH2 6 RE-3/2/29 _ -LB_RE-3_S10_EN33_CH1 7 RE-3/3/27 _ -LB_RE-3_S10_EN33_CH0 8 RE-3/3/28 _ -LB_RE-3_S10_EN33_CH2 9 RE-3/3/29 _ -LB_RE-3_S11_EN32_CH1 14 RE-3/2/30 _ -LB_RE-3_S11_EN32_CH0 15 RE-3/2/31 _ -LB_RE-3_S11_EN32_CH2 16 RE-3/2/32 _ -LB_RE-3_S11_EN33_CH1 17 RE-3/3/30 _ -LB_RE-3_S11_EN33_CH0 18 RE-3/3/31 _ -LB_RE-3_S11_EN33_CH2 19 RE-3/3/32 _ - -LB_RE-3_S12_EN32_CH1 4 RE-3/2/33 _ -LB_RE-3_S12_EN32_CH0 5 RE-3/2/34 _ -LB_RE-3_S12_EN32_CH2 6 RE-3/2/35 _ -LB_RE-3_S12_EN33_CH1 7 RE-3/3/33 _ -LB_RE-3_S12_EN33_CH0 8 RE-3/3/34 _ -LB_RE-3_S12_EN33_CH2 9 RE-3/3/35 _ -LB_RE-3_S1_EN32_CH1 14 RE-3/2/36 _ -LB_RE-3_S1_EN32_CH0 15 RE-3/2/1 _ -LB_RE-3_S1_EN32_CH2 16 RE-3/2/2 _ -LB_RE-3_S1_EN33_CH1 17 RE-3/3/36 _ -LB_RE-3_S1_EN33_CH0 18 RE-3/3/1 _ -LB_RE-3_S1_EN33_CH2 19 RE-3/3/2 _ - -LB_RE-3_S2_EN32_CH1 4 RE-3/2/3 _ -LB_RE-3_S2_EN32_CH0 5 RE-3/2/4 _ -LB_RE-3_S2_EN32_CH2 6 RE-3/2/5 _ -LB_RE-3_S2_EN33_CH1 7 RE-3/3/3 _ -LB_RE-3_S2_EN33_CH0 8 RE-3/3/4 _ -LB_RE-3_S2_EN33_CH2 9 RE-3/3/5 _ -LB_RE-3_S3_EN32_CH1 14 RE-3/2/6 _ -LB_RE-3_S3_EN32_CH0 15 RE-3/2/7 _ -LB_RE-3_S3_EN32_CH2 16 RE-3/2/8 _ -LB_RE-3_S3_EN33_CH1 17 RE-3/3/6 _ -LB_RE-3_S3_EN33_CH0 18 RE-3/3/7 _ -LB_RE-3_S3_EN33_CH2 19 RE-3/3/8 _ - -LB_RE-3_S4_EN32_CH1 4 RE-3/2/9 _ -LB_RE-3_S4_EN32_CH0 5 RE-3/2/10 _ -LB_RE-3_S4_EN32_CH2 6 RE-3/2/11 _ -LB_RE-3_S4_EN33_CH1 7 RE-3/3/9 _ -LB_RE-3_S4_EN33_CH0 8 RE-3/3/10 _ -LB_RE-3_S4_EN33_CH2 9 RE-3/3/11 _ -LB_RE-3_S5_EN32_CH1 14 RE-3/2/12 _ -LB_RE-3_S5_EN32_CH0 15 RE-3/2/13 _ -LB_RE-3_S5_EN32_CH2 16 RE-3/2/14 _ -LB_RE-3_S5_EN33_CH1 17 RE-3/3/12 _ -LB_RE-3_S5_EN33_CH0 18 RE-3/3/13 _ -LB_RE-3_S5_EN33_CH2 19 RE-3/3/14 _ - -LB_RE-3_S6_EN32_CH1 4 RE-3/2/15 _ -LB_RE-3_S6_EN32_CH0 5 RE-3/2/16 _ -LB_RE-3_S6_EN32_CH2 6 RE-3/2/17 _ -LB_RE-3_S6_EN33_CH1 7 RE-3/3/15 _ -LB_RE-3_S6_EN33_CH0 8 RE-3/3/16 _ -LB_RE-3_S6_EN33_CH2 9 RE-3/3/17 _ -LB_RE-3_S7_EN32_CH1 14 RE-3/2/18 _ -LB_RE-3_S7_EN32_CH0 15 RE-3/2/19 _ -LB_RE-3_S7_EN32_CH2 16 RE-3/2/20 _ -LB_RE-3_S7_EN33_CH1 17 RE-3/3/18 _ -LB_RE-3_S7_EN33_CH0 18 RE-3/3/19 _ -LB_RE-3_S7_EN33_CH2 19 RE-3/3/20 _ - -LB_RE-3_S8_EN32_CH1 4 RE-3/2/21 _ -LB_RE-3_S8_EN32_CH0 5 RE-3/2/22 _ -LB_RE-3_S8_EN32_CH2 6 RE-3/2/23 _ -LB_RE-3_S8_EN33_CH1 7 RE-3/3/21 _ -LB_RE-3_S8_EN33_CH0 8 RE-3/3/22 _ -LB_RE-3_S8_EN33_CH2 9 RE-3/3/23 _ -LB_RE-3_S9_EN32_CH1 14 RE-3/2/24 _ -LB_RE-3_S9_EN32_CH0 15 RE-3/2/25 _ -LB_RE-3_S9_EN32_CH2 16 RE-3/2/26 _ -LB_RE-3_S9_EN33_CH1 17 RE-3/3/24 _ -LB_RE-3_S9_EN33_CH0 18 RE-3/3/25 _ -LB_RE-3_S9_EN33_CH2 19 RE-3/3/26 _ - -LB_RE+1_S1_EP12_CH1 4 RE+1/2/36 _ -LB_RE+1_S1_EP12_CH0 5 RE+1/2/1 _ -LB_RE+1_S1_EP12_CH2 6 RE+1/2/2 _ -LB_RE+1_S1_EP13_CH1 7 RE+1/3/36 _ -LB_RE+1_S1_EP13_CH0 8 RE+1/3/1 _ -LB_RE+1_S1_EP13_CH2 9 RE+1/3/2 _ -LB_RE+1_S1_EP22_CH1 14 RE+2/2/2 _ -LB_RE+1_S1_EP22_CH0 15 RE+2/2/3 _ -LB_RE+1_S1_EP22_CH2 16 RE+2/2/4 _ -LB_RE+1_S1_EP23_CH1 17 RE+2/3/2 _ -LB_RE+1_S1_EP23_CH0 18 RE+2/3/3 _ -LB_RE+1_S1_EP23_CH2 19 RE+2/3/4 _ - -LB_RE+1_S10_EP12_CH1 4 RE+1/2/27 _ -LB_RE+1_S10_EP12_CH0 5 RE+1/2/28 _ -LB_RE+1_S10_EP12_CH2 6 RE+1/2/29 _ -LB_RE+1_S10_EP13_CH1 7 RE+1/3/27 _ -LB_RE+1_S10_EP13_CH0 8 RE+1/3/28 _ -LB_RE+1_S10_EP13_CH2 9 RE+1/3/29 _ -LB_RE+1_S10_EP22_CH1 14 RE+2/2/29 _ -LB_RE+1_S10_EP22_CH0 15 RE+2/2/30 _ -LB_RE+1_S10_EP22_CH2 16 RE+2/2/31 _ -LB_RE+1_S10_EP23_CH1 17 RE+2/3/29 _ -LB_RE+1_S10_EP23_CH0 18 RE+2/3/30 _ -LB_RE+1_S10_EP23_CH2 19 RE+2/3/31 _ - -LB_RE+1_S11_EP12_CH1 4 RE+1/2/30 _ -LB_RE+1_S11_EP12_CH0 5 RE+1/2/31 _ -LB_RE+1_S11_EP12_CH2 6 RE+1/2/32 _ -LB_RE+1_S11_EP13_CH1 7 RE+1/3/30 _ -LB_RE+1_S11_EP13_CH0 8 RE+1/3/31 _ -LB_RE+1_S11_EP13_CH2 9 RE+1/3/32 _ -LB_RE+1_S11_EP22_CH1 14 RE+2/2/32 _ -LB_RE+1_S11_EP22_CH0 15 RE+2/2/33 _ -LB_RE+1_S11_EP22_CH2 16 RE+2/2/34 _ -LB_RE+1_S11_EP23_CH1 17 RE+2/3/32 _ -LB_RE+1_S11_EP23_CH0 18 RE+2/3/33 _ -LB_RE+1_S11_EP23_CH2 19 RE+2/3/34 _ - -LB_RE+1_S12_EP12_CH1 4 RE+1/2/33 _ -LB_RE+1_S12_EP12_CH0 5 RE+1/2/34 _ -LB_RE+1_S12_EP12_CH2 6 RE+1/2/35 _ -LB_RE+1_S12_EP13_CH1 7 RE+1/3/33 _ -LB_RE+1_S12_EP13_CH0 8 RE+1/3/34 _ -LB_RE+1_S12_EP13_CH2 9 RE+1/3/35 _ -LB_RE+1_S12_EP22_CH1 14 RE+2/2/35 _ -LB_RE+1_S12_EP22_CH0 15 RE+2/2/36 _ -LB_RE+1_S12_EP22_CH2 16 RE+2/2/1 _ -LB_RE+1_S12_EP23_CH1 17 RE+2/3/35 _ -LB_RE+1_S12_EP23_CH0 18 RE+2/3/36 _ -LB_RE+1_S12_EP23_CH2 19 RE+2/3/1 _ - -LB_RE+1_S2_EP12_CH1 4 RE+1/2/3 _ -LB_RE+1_S2_EP12_CH0 5 RE+1/2/4 _ -LB_RE+1_S2_EP12_CH2 6 RE+1/2/5 _ -LB_RE+1_S2_EP13_CH1 7 RE+1/3/3 _ -LB_RE+1_S2_EP13_CH0 8 RE+1/3/4 _ -LB_RE+1_S2_EP13_CH2 9 RE+1/3/5 _ -LB_RE+1_S2_EP22_CH1 14 RE+2/2/5 _ -LB_RE+1_S2_EP22_CH0 15 RE+2/2/6 _ -LB_RE+1_S2_EP22_CH2 16 RE+2/2/7 _ -LB_RE+1_S2_EP23_CH1 17 RE+2/3/5 _ -LB_RE+1_S2_EP23_CH0 18 RE+2/3/6 _ -LB_RE+1_S2_EP23_CH2 19 RE+2/3/7 _ - -LB_RE+1_S2_EP11_CH0 2 RE+1/1/3 _ -LB_RE+1_S2_EP11_CH2 3 RE+1/1/4 _ -LB_RE+1_S3_EP12_CH1 4 RE+1/2/6 _ -LB_RE+1_S3_EP12_CH0 5 RE+1/2/7 _ -LB_RE+1_S3_EP12_CH2 6 RE+1/2/8 _ -LB_RE+1_S3_EP13_CH1 7 RE+1/3/6 _ -LB_RE+1_S3_EP13_CH0 8 RE+1/3/7 _ -LB_RE+1_S3_EP13_CH2 9 RE+1/3/8 _ -LB_RE+1_S1_EP11_CH0 12 RE+1/1/1 _ -LB_RE+1_S1_EP11_CH2 13 RE+1/1/2 _ -LB_RE+1_S3_EP22_CH1 14 RE+2/2/8 _ -LB_RE+1_S3_EP22_CH0 15 RE+2/2/9 _ -LB_RE+1_S3_EP22_CH2 16 RE+2/2/10 _ -LB_RE+1_S3_EP23_CH1 17 RE+2/3/8 _ -LB_RE+1_S3_EP23_CH0 18 RE+2/3/9 _ -LB_RE+1_S3_EP23_CH2 19 RE+2/3/10 _ - -LB_RE+1_S4_EP12_CH1 4 RE+1/2/9 _ -LB_RE+1_S4_EP12_CH0 5 RE+1/2/10 _ -LB_RE+1_S4_EP12_CH2 6 RE+1/2/11 _ -LB_RE+1_S4_EP13_CH1 7 RE+1/3/9 _ -LB_RE+1_S4_EP13_CH0 8 RE+1/3/10 _ -LB_RE+1_S4_EP13_CH2 9 RE+1/3/11 _ -LB_RE+1_S4_EP22_CH1 14 RE+2/2/11 _ -LB_RE+1_S4_EP22_CH0 15 RE+2/2/12 _ -LB_RE+1_S4_EP22_CH2 16 RE+2/2/13 _ -LB_RE+1_S4_EP23_CH1 17 RE+2/3/11 _ -LB_RE+1_S4_EP23_CH0 18 RE+2/3/12 _ -LB_RE+1_S4_EP23_CH2 19 RE+2/3/13 _ - -LB_RE+1_S5_EP12_CH1 4 RE+1/2/12 _ -LB_RE+1_S5_EP12_CH0 5 RE+1/2/13 _ -LB_RE+1_S5_EP12_CH2 6 RE+1/2/14 _ -LB_RE+1_S5_EP13_CH1 7 RE+1/3/12 _ -LB_RE+1_S5_EP13_CH0 8 RE+1/3/13 _ -LB_RE+1_S5_EP13_CH2 9 RE+1/3/14 _ -LB_RE+1_S5_EP22_CH1 14 RE+2/2/14 _ -LB_RE+1_S5_EP22_CH0 15 RE+2/2/15 _ -LB_RE+1_S5_EP22_CH2 16 RE+2/2/16 _ -LB_RE+1_S5_EP23_CH1 17 RE+2/3/14 _ -LB_RE+1_S5_EP23_CH0 18 RE+2/3/15 _ -LB_RE+1_S5_EP23_CH2 19 RE+2/3/16 _ - -LB_RE+1_S6_EP12_CH1 4 RE+1/2/15 _ -LB_RE+1_S6_EP12_CH0 5 RE+1/2/16 _ -LB_RE+1_S6_EP12_CH2 6 RE+1/2/17 _ -LB_RE+1_S6_EP13_CH1 7 RE+1/3/15 _ -LB_RE+1_S6_EP13_CH0 8 RE+1/3/16 _ -LB_RE+1_S6_EP13_CH2 9 RE+1/3/17 _ -LB_RE+1_S6_EP22_CH1 14 RE+2/2/17 _ -LB_RE+1_S6_EP22_CH0 15 RE+2/2/18 _ -LB_RE+1_S6_EP22_CH2 16 RE+2/2/19 _ -LB_RE+1_S6_EP23_CH1 17 RE+2/3/17 _ -LB_RE+1_S6_EP23_CH0 18 RE+2/3/18 _ -LB_RE+1_S6_EP23_CH2 19 RE+2/3/19 _ - -LB_RE+1_S7_EP12_CH1 4 RE+1/2/18 _ -LB_RE+1_S7_EP12_CH0 5 RE+1/2/19 _ -LB_RE+1_S7_EP12_CH2 6 RE+1/2/20 _ -LB_RE+1_S7_EP13_CH1 7 RE+1/3/18 _ -LB_RE+1_S7_EP13_CH0 8 RE+1/3/19 _ -LB_RE+1_S7_EP13_CH2 9 RE+1/3/20 _ -LB_RE+1_S7_EP22_CH1 14 RE+2/2/20 _ -LB_RE+1_S7_EP22_CH0 15 RE+2/2/21 _ -LB_RE+1_S7_EP22_CH2 16 RE+2/2/22 _ -LB_RE+1_S7_EP23_CH1 17 RE+2/3/20 _ -LB_RE+1_S7_EP23_CH0 18 RE+2/3/21 _ -LB_RE+1_S7_EP23_CH2 19 RE+2/3/22 _ - -LB_RE+1_S8_EP12_CH1 4 RE+1/2/21 _ -LB_RE+1_S8_EP12_CH0 5 RE+1/2/22 _ -LB_RE+1_S8_EP12_CH2 6 RE+1/2/23 _ -LB_RE+1_S8_EP13_CH1 7 RE+1/3/21 _ -LB_RE+1_S8_EP13_CH0 8 RE+1/3/22 _ -LB_RE+1_S8_EP13_CH2 9 RE+1/3/23 _ -LB_RE+1_S8_EP22_CH1 14 RE+2/2/23 _ -LB_RE+1_S8_EP22_CH0 15 RE+2/2/24 _ -LB_RE+1_S8_EP22_CH2 16 RE+2/2/25 _ -LB_RE+1_S8_EP23_CH1 17 RE+2/3/23 _ -LB_RE+1_S8_EP23_CH0 18 RE+2/3/24 _ -LB_RE+1_S8_EP23_CH2 19 RE+2/3/25 _ - -LB_RE+1_S9_EP12_CH1 4 RE+1/2/24 _ -LB_RE+1_S9_EP12_CH0 5 RE+1/2/25 _ -LB_RE+1_S9_EP12_CH2 6 RE+1/2/26 _ -LB_RE+1_S9_EP13_CH1 7 RE+1/3/24 _ -LB_RE+1_S9_EP13_CH0 8 RE+1/3/25 _ -LB_RE+1_S9_EP13_CH2 9 RE+1/3/26 _ -LB_RE+1_S9_EP22_CH1 14 RE+2/2/26 _ -LB_RE+1_S9_EP22_CH0 15 RE+2/2/27 _ -LB_RE+1_S9_EP22_CH2 16 RE+2/2/28 _ -LB_RE+1_S9_EP23_CH1 17 RE+2/3/26 _ -LB_RE+1_S9_EP23_CH0 18 RE+2/3/27 _ -LB_RE+1_S9_EP23_CH2 19 RE+2/3/28 _ - -LB_RE+4_S10_EP42_CH1 4 RE+4/2/27 _ -LB_RE+4_S10_EP42_CH0 5 RE+4/2/28 _ -LB_RE+4_S10_EP42_CH2 6 RE+4/2/29 _ -LB_RE+4_S10_EP43_CH1 7 RE+4/3/27 _ -LB_RE+4_S10_EP43_CH0 8 RE+4/3/28 _ -LB_RE+4_S10_EP43_CH2 9 RE+4/3/29 _ -LB_RE+4_S11_EP42_CH1 14 RE+4/2/30 _ -LB_RE+4_S11_EP42_CH0 15 RE+4/2/31 _ -LB_RE+4_S11_EP42_CH2 16 RE+4/2/32 _ -LB_RE+4_S11_EP43_CH1 17 RE+4/3/30 _ -LB_RE+4_S11_EP43_CH0 18 RE+4/3/31 _ -LB_RE+4_S11_EP43_CH2 19 RE+4/3/32 _ - -LB_RE+4_S12_EP42_CH1 4 RE+4/2/33 _ -LB_RE+4_S12_EP42_CH0 5 RE+4/2/34 _ -LB_RE+4_S12_EP42_CH2 6 RE+4/2/35 _ -LB_RE+4_S12_EP43_CH1 7 RE+4/3/33 _ -LB_RE+4_S12_EP43_CH0 8 RE+4/3/34 _ -LB_RE+4_S12_EP43_CH2 9 RE+4/3/35 _ -LB_RE+4_S1_EP42_CH1 14 RE+4/2/36 _ -LB_RE+4_S1_EP42_CH0 15 RE+4/2/1 _ -LB_RE+4_S1_EP42_CH2 16 RE+4/2/2 _ -LB_RE+4_S1_EP43_CH1 17 RE+4/3/36 _ -LB_RE+4_S1_EP43_CH0 18 RE+4/3/1 _ -LB_RE+4_S1_EP43_CH2 19 RE+4/3/2 _ - -LB_RE+4_S2_EP42_CH1 4 RE+4/2/3 _ -LB_RE+4_S2_EP42_CH0 5 RE+4/2/4 _ -LB_RE+4_S2_EP42_CH2 6 RE+4/2/5 _ -LB_RE+4_S2_EP43_CH1 7 RE+4/3/3 _ -LB_RE+4_S2_EP43_CH0 8 RE+4/3/4 _ -LB_RE+4_S2_EP43_CH2 9 RE+4/3/5 _ -LB_RE+4_S3_EP42_CH1 14 RE+4/2/6 _ -LB_RE+4_S3_EP42_CH0 15 RE+4/2/7 _ -LB_RE+4_S3_EP42_CH2 16 RE+4/2/8 _ -LB_RE+4_S3_EP43_CH1 17 RE+4/3/6 _ -LB_RE+4_S3_EP43_CH0 18 RE+4/3/7 _ -LB_RE+4_S3_EP43_CH2 19 RE+4/3/8 _ - -LB_RE+4_S4_EP42_CH1 4 RE+4/2/9 _ -LB_RE+4_S4_EP42_CH0 5 RE+4/2/10 _ -LB_RE+4_S4_EP42_CH2 6 RE+4/2/11 _ -LB_RE+4_S4_EP43_CH1 7 RE+4/3/9 _ -LB_RE+4_S4_EP43_CH0 8 RE+4/3/10 _ -LB_RE+4_S4_EP43_CH2 9 RE+4/3/11 _ -LB_RE+4_S5_EP42_CH1 14 RE+4/2/12 _ -LB_RE+4_S5_EP42_CH0 15 RE+4/2/13 _ -LB_RE+4_S5_EP42_CH2 16 RE+4/2/14 _ -LB_RE+4_S5_EP43_CH1 17 RE+4/3/12 _ -LB_RE+4_S5_EP43_CH0 18 RE+4/3/13 _ -LB_RE+4_S5_EP43_CH2 19 RE+4/3/14 _ - -LB_RE+4_S6_EP42_CH1 4 RE+4/2/15 _ -LB_RE+4_S6_EP42_CH0 5 RE+4/2/16 _ -LB_RE+4_S6_EP42_CH2 6 RE+4/2/17 _ -LB_RE+4_S6_EP43_CH1 7 RE+4/3/15 _ -LB_RE+4_S6_EP43_CH0 8 RE+4/3/16 _ -LB_RE+4_S6_EP43_CH2 9 RE+4/3/17 _ -LB_RE+4_S7_EP42_CH1 14 RE+4/2/18 _ -LB_RE+4_S7_EP42_CH0 15 RE+4/2/19 _ -LB_RE+4_S7_EP42_CH2 16 RE+4/2/20 _ -LB_RE+4_S7_EP43_CH1 17 RE+4/3/18 _ -LB_RE+4_S7_EP43_CH0 18 RE+4/3/19 _ -LB_RE+4_S7_EP43_CH2 19 RE+4/3/20 _ - -LB_RE+4_S8_EP42_CH1 4 RE+4/2/21 _ -LB_RE+4_S8_EP42_CH0 5 RE+4/2/22 _ -LB_RE+4_S8_EP42_CH2 6 RE+4/2/23 _ -LB_RE+4_S8_EP43_CH1 7 RE+4/3/21 _ -LB_RE+4_S8_EP43_CH0 8 RE+4/3/22 _ -LB_RE+4_S8_EP43_CH2 9 RE+4/3/23 _ -LB_RE+4_S9_EP42_CH1 14 RE+4/2/24 _ -LB_RE+4_S9_EP42_CH0 15 RE+4/2/25 _ -LB_RE+4_S9_EP42_CH2 16 RE+4/2/26 _ -LB_RE+4_S9_EP43_CH1 17 RE+4/3/24 _ -LB_RE+4_S9_EP43_CH0 18 RE+4/3/25 _ -LB_RE+4_S9_EP43_CH2 19 RE+4/3/26 _ - -LB_RE+3_S10_EP32_CH1 4 RE+3/2/27 _ -LB_RE+3_S10_EP32_CH0 5 RE+3/2/28 _ -LB_RE+3_S10_EP32_CH2 6 RE+3/2/29 _ -LB_RE+3_S10_EP33_CH1 7 RE+3/3/27 _ -LB_RE+3_S10_EP33_CH0 8 RE+3/3/28 _ -LB_RE+3_S10_EP33_CH2 9 RE+3/3/29 _ -LB_RE+3_S11_EP32_CH1 14 RE+3/2/30 _ -LB_RE+3_S11_EP32_CH0 15 RE+3/2/31 _ -LB_RE+3_S11_EP32_CH2 16 RE+3/2/32 _ -LB_RE+3_S11_EP33_CH1 17 RE+3/3/30 _ -LB_RE+3_S11_EP33_CH0 18 RE+3/3/31 _ -LB_RE+3_S11_EP33_CH2 19 RE+3/3/32 _ - -LB_RE+3_S12_EP32_CH1 4 RE+3/2/33 _ -LB_RE+3_S12_EP32_CH0 5 RE+3/2/34 _ -LB_RE+3_S12_EP32_CH2 6 RE+3/2/35 _ -LB_RE+3_S12_EP33_CH1 7 RE+3/3/33 _ -LB_RE+3_S12_EP33_CH0 8 RE+3/3/34 _ -LB_RE+3_S12_EP33_CH2 9 RE+3/3/35 _ -LB_RE+3_S1_EP32_CH1 14 RE+3/2/36 _ -LB_RE+3_S1_EP32_CH0 15 RE+3/2/1 _ -LB_RE+3_S1_EP32_CH2 16 RE+3/2/2 _ -LB_RE+3_S1_EP33_CH1 17 RE+3/3/36 _ -LB_RE+3_S1_EP33_CH0 18 RE+3/3/1 _ -LB_RE+3_S1_EP33_CH2 19 RE+3/3/2 _ - -LB_RE+3_S2_EP32_CH1 4 RE+3/2/3 _ -LB_RE+3_S2_EP32_CH0 5 RE+3/2/4 _ -LB_RE+3_S2_EP32_CH2 6 RE+3/2/5 _ -LB_RE+3_S2_EP33_CH1 7 RE+3/3/3 _ -LB_RE+3_S2_EP33_CH0 8 RE+3/3/4 _ -LB_RE+3_S2_EP33_CH2 9 RE+3/3/5 _ -LB_RE+3_S3_EP32_CH1 14 RE+3/2/6 _ -LB_RE+3_S3_EP32_CH0 15 RE+3/2/7 _ -LB_RE+3_S3_EP32_CH2 16 RE+3/2/8 _ -LB_RE+3_S3_EP33_CH1 17 RE+3/3/6 _ -LB_RE+3_S3_EP33_CH0 18 RE+3/3/7 _ -LB_RE+3_S3_EP33_CH2 19 RE+3/3/8 _ - -LB_RE+3_S4_EP32_CH1 4 RE+3/2/9 _ -LB_RE+3_S4_EP32_CH0 5 RE+3/2/10 _ -LB_RE+3_S4_EP32_CH2 6 RE+3/2/11 _ -LB_RE+3_S4_EP33_CH1 7 RE+3/3/9 _ -LB_RE+3_S4_EP33_CH0 8 RE+3/3/10 _ -LB_RE+3_S4_EP33_CH2 9 RE+3/3/11 _ -LB_RE+3_S5_EP32_CH1 14 RE+3/2/12 _ -LB_RE+3_S5_EP32_CH0 15 RE+3/2/13 _ -LB_RE+3_S5_EP32_CH2 16 RE+3/2/14 _ -LB_RE+3_S5_EP33_CH1 17 RE+3/3/12 _ -LB_RE+3_S5_EP33_CH0 18 RE+3/3/13 _ -LB_RE+3_S5_EP33_CH2 19 RE+3/3/14 _ - -LB_RE+3_S6_EP32_CH1 4 RE+3/2/15 _ -LB_RE+3_S6_EP32_CH0 5 RE+3/2/16 _ -LB_RE+3_S6_EP32_CH2 6 RE+3/2/17 _ -LB_RE+3_S6_EP33_CH1 7 RE+3/3/15 _ -LB_RE+3_S6_EP33_CH0 8 RE+3/3/16 _ -LB_RE+3_S6_EP33_CH2 9 RE+3/3/17 _ -LB_RE+3_S7_EP32_CH1 14 RE+3/2/18 _ -LB_RE+3_S7_EP32_CH0 15 RE+3/2/19 _ -LB_RE+3_S7_EP32_CH2 16 RE+3/2/20 _ -LB_RE+3_S7_EP33_CH1 17 RE+3/3/18 _ -LB_RE+3_S7_EP33_CH0 18 RE+3/3/19 _ -LB_RE+3_S7_EP33_CH2 19 RE+3/3/20 _ - -LB_RE+3_S8_EP32_CH1 4 RE+3/2/21 _ -LB_RE+3_S8_EP32_CH0 5 RE+3/2/22 _ -LB_RE+3_S8_EP32_CH2 6 RE+3/2/23 _ -LB_RE+3_S8_EP33_CH1 7 RE+3/3/21 _ -LB_RE+3_S8_EP33_CH0 8 RE+3/3/22 _ -LB_RE+3_S8_EP33_CH2 9 RE+3/3/23 _ -LB_RE+3_S9_EP32_CH1 14 RE+3/2/24 _ -LB_RE+3_S9_EP32_CH0 15 RE+3/2/25 _ -LB_RE+3_S9_EP32_CH2 16 RE+3/2/26 _ -LB_RE+3_S9_EP33_CH1 17 RE+3/3/24 _ -LB_RE+3_S9_EP33_CH0 18 RE+3/3/25 _ -LB_RE+3_S9_EP33_CH2 19 RE+3/3/26 _ diff --git a/L1Trigger/RPCTriggerPrimitives/python/primitiveRPCProducer_cfi.py b/L1Trigger/RPCTriggerPrimitives/python/primitiveRPCProducer_cfi.py index 8402584cea016..2d280881d41bd 100644 --- a/L1Trigger/RPCTriggerPrimitives/python/primitiveRPCProducer_cfi.py +++ b/L1Trigger/RPCTriggerPrimitives/python/primitiveRPCProducer_cfi.py @@ -2,7 +2,7 @@ primitiveRPCProducer = cms.EDProducer("L1TMuonRPCTriggerPrimitivesProducer", Primitiverechitlabel = cms.InputTag("rpcdigis"), - Mapsource = cms.string('L1Trigger/RPCTriggerPrimitives/input/Linkboard_rpc_roll_mapping_lb_chamber2.txt'), + Mapsource = cms.string('L1Trigger/RPCTriggerPrimitives/data/Linkboard_rpc_roll_mapping_lb_chamber2.txt'), ApplyLinkBoardCut = cms.bool(True), LinkBoardCut = cms.int32(2), # Number of clusters per linkboard greater than (default >2) are rejected ClusterSizeCut = cms.int32(3), # Clustersize greater than (default >3) is rejected From d8628fec3c8a5a2a533ce862a2cdb8a41d4b1e29 Mon Sep 17 00:00:00 2001 From: Manuel Segura Date: Tue, 11 Jun 2019 17:24:06 +0200 Subject: [PATCH 05/11] Trigger primitive phase2 @maseguracern data path --- .../RPCTriggerPrimitives/python/primitiveRPCProducer_cfi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/L1Trigger/RPCTriggerPrimitives/python/primitiveRPCProducer_cfi.py b/L1Trigger/RPCTriggerPrimitives/python/primitiveRPCProducer_cfi.py index 2d280881d41bd..fe744d54547fd 100644 --- a/L1Trigger/RPCTriggerPrimitives/python/primitiveRPCProducer_cfi.py +++ b/L1Trigger/RPCTriggerPrimitives/python/primitiveRPCProducer_cfi.py @@ -2,7 +2,7 @@ primitiveRPCProducer = cms.EDProducer("L1TMuonRPCTriggerPrimitivesProducer", Primitiverechitlabel = cms.InputTag("rpcdigis"), - Mapsource = cms.string('L1Trigger/RPCTriggerPrimitives/data/Linkboard_rpc_roll_mapping_lb_chamber2.txt'), + Mapsource = cms.string('L1Trigger/L1TMuon/data/rpc/Linkboard_rpc_roll_mapping_lb_chamber2.txt'), ApplyLinkBoardCut = cms.bool(True), LinkBoardCut = cms.int32(2), # Number of clusters per linkboard greater than (default >2) are rejected ClusterSizeCut = cms.int32(3), # Clustersize greater than (default >3) is rejected From 280d3cf156307cb1726d1f5717c8f6e7b2a5006b Mon Sep 17 00:00:00 2001 From: Manuel Segura Date: Tue, 18 Jun 2019 19:41:08 +0200 Subject: [PATCH 06/11] Trigger primitive phase2 @maseguracern Algo init fix --- .../RPCTriggerPrimitives/src/PrimitivePreprocess.cc | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/L1Trigger/RPCTriggerPrimitives/src/PrimitivePreprocess.cc b/L1Trigger/RPCTriggerPrimitives/src/PrimitivePreprocess.cc index 209948c1494fe..b80bb73896942 100644 --- a/L1Trigger/RPCTriggerPrimitives/src/PrimitivePreprocess.cc +++ b/L1Trigger/RPCTriggerPrimitives/src/PrimitivePreprocess.cc @@ -9,13 +9,11 @@ PrimitivePreprocess::PrimitivePreprocess(const edm::ParameterSet& iConfig, edm:: ClusterSizeCut_(iConfig.getParameter("ClusterSizeCut")), theRPCMaskedStripsObj(nullptr), theRPCDeadStripsObj(nullptr), - maskSource_(MaskSource::EventSetup), - deadSource_(MaskSource::EventSetup){ - // Get the concrete reconstruction algo from the factory - const std::string theAlgoName = iConfig.getParameter("recAlgo"); - theAlgorithm.reset(PrimitiveAlgoFactory::get()->create(theAlgoName, - iConfig.getParameter("recAlgoConfig"))); + theAlgorithm{PrimitiveAlgoFactory::get()->create(iConfig.getParameter("recAlgo"), + iConfig.getParameter("recAlgoConfig"))}, + maskSource_(MaskSource::EventSetup), + deadSource_(MaskSource::EventSetup){ //Get LUT for linkboard map From 1db8f356106538bdf3afb914638fc0226e94bdcb Mon Sep 17 00:00:00 2001 From: Manuel Segura Date: Tue, 18 Jun 2019 19:50:37 +0200 Subject: [PATCH 07/11] Trigger primitive phase2 @maseguracern Algo init fixed format --- .../interface/PrimitivePreprocess.h | 41 +- .../interface/RPCProcessor.h | 65 ++- .../L1TMuonRPCTriggerPrimitivesProducer.cc | 23 +- .../L1TMuonRPCTriggerPrimitivesProducer.h | 15 +- .../src/PrimitiveAlgoFactory.cc | 2 +- .../src/PrimitivePreprocess.cc | 159 ++++--- .../RPCTriggerPrimitives/src/RPCProcessor.cc | 421 +++++++++--------- 7 files changed, 342 insertions(+), 384 deletions(-) diff --git a/L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h b/L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h index ade7ee16723b5..716adbce500d0 100644 --- a/L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h +++ b/L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h @@ -24,55 +24,48 @@ #include "RecoLocalMuon/RPCRecHit/interface/RPCRecHitBaseAlgo.h" - #include "L1Trigger/RPCTriggerPrimitives/interface/PrimitiveAlgoFactory.h" #include "L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h" - #include #include #include -class PrimitivePreprocess{ - - public: +class PrimitivePreprocess { +public: explicit PrimitivePreprocess(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iConsumes); - + ~PrimitivePreprocess(); - - void beginRun(const edm::EventSetup& ); - + + void beginRun(const edm::EventSetup&); + void Preprocess(const edm::Event& iEvent, const edm::EventSetup& iSetup, RPCRecHitCollection& primitivedigi); - - - private: - - const edm::EDGetTokenT rpcToken_; + +private: + const edm::EDGetTokenT rpcToken_; std::array processorvector_; - + edm::FileInPath Mapsource_; bool ApplyLinkBoardCut_; int LinkBoardCut_; int ClusterSizeCut_; - + std::vector Final_MapVector; - + //masking from rpcrechit module - + std::vector MaskVec; std::vector DeadVec; - - + std::unique_ptr theRPCMaskedStripsObj; // Object with mask-strips-vector for all the RPC Detectors - + std::unique_ptr theRPCDeadStripsObj; // Object with dead-strips-vector for all the RPC Detectors - + // The reconstruction algorithm std::unique_ptr theAlgorithm; - + enum class MaskSource { File, EventSetup } maskSource_, deadSource_; }; #endif - diff --git a/L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h b/L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h index 4c74fcaeca302..1dc2dcb94d36b 100644 --- a/L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h +++ b/L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h @@ -25,64 +25,61 @@ #include "CondFormats/RPCObjects/interface/RPCDeadStrips.h" #include "CondFormats/Serialization/interface/Serializable.h" - #include #include #include #include #include -#include +#include #include #include #include #include -class RPCProcessor{ - - public: - +class RPCProcessor { +public: explicit RPCProcessor(); ~RPCProcessor(); - + struct Map_structure { - std::string linkboard_; std::string linkboard_ID; std::string chamber1_; std::string chamber2_; - COND_SERIALIZABLE; + COND_SERIALIZABLE; }; - + void Process(const edm::Event& iEvent, - const edm::EventSetup& iSetup, - const edm::EDGetToken& RPCDigiToken, - RPCRecHitCollection& primitivedigi, + const edm::EventSetup& iSetup, + const edm::EDGetToken& RPCDigiToken, + RPCRecHitCollection& primitivedigi, std::unique_ptr& theRPCMaskedStripsObj, - std::unique_ptr& theRPCDeadStripsObj, - std::unique_ptr& theAlgo, - std::map LBName_ChamberID_Map_1, - std::map LBID_ChamberID_Map_1, - std::map LBName_ChamberID_Map_2, - std::map LBID_ChamberID_Map_2, - bool ApplyLinkBoardCut_, - int LinkboardCut, - int ClusterSizeCut ) const; - + std::unique_ptr& theRPCDeadStripsObj, + std::unique_ptr& theAlgo, + std::map LBName_ChamberID_Map_1, + std::map LBID_ChamberID_Map_1, + std::map LBName_ChamberID_Map_2, + std::map LBID_ChamberID_Map_2, + bool ApplyLinkBoardCut_, + int LinkboardCut, + int ClusterSizeCut) const; + static edm::OwnVector ApplyClusterSizeCut(const edm::OwnVector recHits_, int ClusterSizeCut_); static bool ApplyLinkBoardCut(int NClusters, int LinkboardCut); - - std::vector const & GetMapVector() const {return MapVec;} + + std::vector const& GetMapVector() const { return MapVec; } std::vector MapVec; - - std::string GetStringBarrel(const int ring_, const int station_, const int sector_, const int layer_, const int subsector_, const int roll_) const; + + std::string GetStringBarrel(const int ring_, + const int station_, + const int sector_, + const int layer_, + const int subsector_, + const int roll_) const; std::string GetStringEndCap(const int station_, const int ring_, const int chamberID_) const; - - + COND_SERIALIZABLE; - - private: - + +private: }; #endif - - diff --git a/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.cc b/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.cc index 01b7886dce3f6..65315f746fe23 100644 --- a/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.cc +++ b/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.cc @@ -3,35 +3,26 @@ #include "L1TMuonRPCTriggerPrimitivesProducer.h" -L1TMuonRPCTriggerPrimitivesProducer::L1TMuonRPCTriggerPrimitivesProducer(const edm::ParameterSet& iConfig): - preprocess_pointer_(std::make_unique(iConfig, consumesCollector())){ - +L1TMuonRPCTriggerPrimitivesProducer::L1TMuonRPCTriggerPrimitivesProducer(const edm::ParameterSet& iConfig) + : preprocess_pointer_(std::make_unique(iConfig, consumesCollector())) { produces(); - } -L1TMuonRPCTriggerPrimitivesProducer::~L1TMuonRPCTriggerPrimitivesProducer(){ -} +L1TMuonRPCTriggerPrimitivesProducer::~L1TMuonRPCTriggerPrimitivesProducer() {} -void L1TMuonRPCTriggerPrimitivesProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup){ - +void L1TMuonRPCTriggerPrimitivesProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { // Create pointers to the collections which will store the new primitive digis auto Tprimitive_digis = std::make_unique(); - - preprocess_pointer_->beginRun(iSetup); + preprocess_pointer_->beginRun(iSetup); preprocess_pointer_->Preprocess(iEvent, iSetup, *Tprimitive_digis); // Fill the output collections iEvent.put(std::move(Tprimitive_digis)); - } -void L1TMuonRPCTriggerPrimitivesProducer::beginStream(edm::StreamID iID){ -} +void L1TMuonRPCTriggerPrimitivesProducer::beginStream(edm::StreamID iID) {} -void L1TMuonRPCTriggerPrimitivesProducer::endStream(){ -} +void L1TMuonRPCTriggerPrimitivesProducer::endStream() {} // Define this as a plug-in DEFINE_FWK_MODULE(L1TMuonRPCTriggerPrimitivesProducer); - diff --git a/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.h b/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.h index cc852f98bac5a..4dcd07cc4bbe1 100644 --- a/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.h +++ b/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.h @@ -21,20 +21,17 @@ // Class declaration -class L1TMuonRPCTriggerPrimitivesProducer : public edm::stream::EDProducer<>{ - - public: +class L1TMuonRPCTriggerPrimitivesProducer : public edm::stream::EDProducer<> { +public: explicit L1TMuonRPCTriggerPrimitivesProducer(const edm::ParameterSet&); ~L1TMuonRPCTriggerPrimitivesProducer() override; - - private: + +private: void beginStream(edm::StreamID) override; void endStream() override; void produce(edm::Event& event, const edm::EventSetup& setup) override; - - std::unique_ptr preprocess_pointer_; - + + std::unique_ptr preprocess_pointer_; }; #endif /* #define L1Trigger_RPCTriggerPrimitives_L1TMuonRPCTriggerPrimitivesProducer_h */ - diff --git a/L1Trigger/RPCTriggerPrimitives/src/PrimitiveAlgoFactory.cc b/L1Trigger/RPCTriggerPrimitives/src/PrimitiveAlgoFactory.cc index 4bc14bca4b81c..cce3d8c14588e 100644 --- a/L1Trigger/RPCTriggerPrimitives/src/PrimitiveAlgoFactory.cc +++ b/L1Trigger/RPCTriggerPrimitives/src/PrimitiveAlgoFactory.cc @@ -1,4 +1,4 @@ #include "FWCore/PluginManager/interface/PluginFactory.h" #include "L1Trigger/RPCTriggerPrimitives/interface/PrimitiveAlgoFactory.h" -EDM_REGISTER_PLUGINFACTORY(PrimitiveAlgoFactory,"PrimitiveAlgoFactory"); +EDM_REGISTER_PLUGINFACTORY(PrimitiveAlgoFactory, "PrimitiveAlgoFactory"); diff --git a/L1Trigger/RPCTriggerPrimitives/src/PrimitivePreprocess.cc b/L1Trigger/RPCTriggerPrimitives/src/PrimitivePreprocess.cc index b80bb73896942..e63b148263534 100644 --- a/L1Trigger/RPCTriggerPrimitives/src/PrimitivePreprocess.cc +++ b/L1Trigger/RPCTriggerPrimitives/src/PrimitivePreprocess.cc @@ -1,158 +1,157 @@ #include "L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h" -PrimitivePreprocess::PrimitivePreprocess(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iConsumes): - rpcToken_(iConsumes.consumes(iConfig.getParameter("Primitiverechitlabel"))), - processorvector_(), - Mapsource_(iConfig.getParameter("Mapsource")), - ApplyLinkBoardCut_(iConfig.getParameter("ApplyLinkBoardCut")), - LinkBoardCut_(iConfig.getParameter("LinkBoardCut")), - ClusterSizeCut_(iConfig.getParameter("ClusterSizeCut")), - theRPCMaskedStripsObj(nullptr), - theRPCDeadStripsObj(nullptr), - // Get the concrete reconstruction algo from the factory - theAlgorithm{PrimitiveAlgoFactory::get()->create(iConfig.getParameter("recAlgo"), - iConfig.getParameter("recAlgoConfig"))}, - maskSource_(MaskSource::EventSetup), - deadSource_(MaskSource::EventSetup){ - - +PrimitivePreprocess::PrimitivePreprocess(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iConsumes) + : rpcToken_(iConsumes.consumes(iConfig.getParameter("Primitiverechitlabel"))), + processorvector_(), + Mapsource_(iConfig.getParameter("Mapsource")), + ApplyLinkBoardCut_(iConfig.getParameter("ApplyLinkBoardCut")), + LinkBoardCut_(iConfig.getParameter("LinkBoardCut")), + ClusterSizeCut_(iConfig.getParameter("ClusterSizeCut")), + theRPCMaskedStripsObj(nullptr), + theRPCDeadStripsObj(nullptr), + // Get the concrete reconstruction algo from the factory + theAlgorithm{PrimitiveAlgoFactory::get()->create(iConfig.getParameter("recAlgo"), + iConfig.getParameter("recAlgoConfig"))}, + maskSource_(MaskSource::EventSetup), + deadSource_(MaskSource::EventSetup) { //Get LUT for linkboard map std::ifstream inputFile(Mapsource_.fullPath().c_str(), std::ios::in); - - if(!inputFile){ + + if (!inputFile) { throw cms::Exception("No LUT file") << "Error: Linkboard mapping cannot be opened"; exit(1); } - - while( inputFile.good() ){ - RPCProcessor::Map_structure temp; + + while (inputFile.good()) { + RPCProcessor::Map_structure temp; inputFile >> temp.linkboard_ >> temp.linkboard_ID >> temp.chamber1_ >> temp.chamber2_; - Final_MapVector.push_back(temp); + Final_MapVector.push_back(temp); } Final_MapVector.pop_back(); - + inputFile.close(); - - - + const std::string maskSource = iConfig.getParameter("maskSource"); - + if (maskSource == "File") { maskSource_ = MaskSource::File; edm::FileInPath fp1 = iConfig.getParameter("maskvecfile"); std::ifstream inputFile_1(fp1.fullPath().c_str(), std::ios::in); - if ( !inputFile_1 ) { + if (!inputFile_1) { std::cerr << "Masked Strips File cannot not be opened" << std::endl; exit(1); } - while ( inputFile_1.good() ) { + while (inputFile_1.good()) { RPCMaskedStrips::MaskItem Item; inputFile_1 >> Item.rawId >> Item.strip; - if ( inputFile_1.good() ) MaskVec.push_back(Item); + if (inputFile_1.good()) + MaskVec.push_back(Item); } inputFile_1.close(); } - + const std::string deadSource = iConfig.getParameter("deadSource"); - + if (deadSource == "File") { deadSource_ = MaskSource::File; edm::FileInPath fp2 = iConfig.getParameter("deadvecfile"); std::ifstream inputFile_2(fp2.fullPath().c_str(), std::ios::in); - if ( !inputFile_2 ) { + if (!inputFile_2) { std::cerr << "Dead Strips File cannot not be opened" << std::endl; exit(1); } - while ( inputFile_2.good() ) { + while (inputFile_2.good()) { RPCDeadStrips::DeadItem Item; - inputFile_2 >> Item.rawId >> Item.strip; - if ( inputFile_2.good() ) DeadVec.push_back(Item); + inputFile_2 >> Item.rawId >> Item.strip; + if (inputFile_2.good()) + DeadVec.push_back(Item); } inputFile_2.close(); - - } - - //Closing the input files } -PrimitivePreprocess::~PrimitivePreprocess(){ + //Closing the input files } -void PrimitivePreprocess::beginRun(const edm::EventSetup& iSetup){ - +PrimitivePreprocess::~PrimitivePreprocess() {} + +void PrimitivePreprocess::beginRun(const edm::EventSetup& iSetup) { // Get masked- and dead-strip information theRPCMaskedStripsObj = std::make_unique(); theRPCDeadStripsObj = std::make_unique(); - + // Getting the masked-strip information - if ( maskSource_ == MaskSource::EventSetup ) { + if (maskSource_ == MaskSource::EventSetup) { edm::ESHandle readoutMaskedStrips; iSetup.get().get(readoutMaskedStrips); const RPCMaskedStrips* tmp_obj = readoutMaskedStrips.product(); theRPCMaskedStripsObj->MaskVec = tmp_obj->MaskVec; delete tmp_obj; - } - - - else if ( maskSource_ == MaskSource::File ) { + } + + else if (maskSource_ == MaskSource::File) { std::vector::iterator posVec; - for ( posVec = MaskVec.begin(); posVec != MaskVec.end(); ++posVec ) { - RPCMaskedStrips::MaskItem Item; + for (posVec = MaskVec.begin(); posVec != MaskVec.end(); ++posVec) { + RPCMaskedStrips::MaskItem Item; Item.rawId = (*posVec).rawId; - Item.strip = (*posVec).strip; + Item.strip = (*posVec).strip; theRPCMaskedStripsObj->MaskVec.push_back(Item); } } - + // Getting the dead-strip information - - if ( deadSource_ == MaskSource::EventSetup ) { + + if (deadSource_ == MaskSource::EventSetup) { edm::ESHandle readoutDeadStrips; iSetup.get().get(readoutDeadStrips); const RPCDeadStrips* tmp_obj = readoutDeadStrips.product(); theRPCDeadStripsObj->DeadVec = tmp_obj->DeadVec; delete tmp_obj; - } - else if ( deadSource_ == MaskSource::File ) { + } else if (deadSource_ == MaskSource::File) { std::vector::iterator posVec; - for ( posVec = DeadVec.begin(); posVec != DeadVec.end(); ++posVec ) { + for (posVec = DeadVec.begin(); posVec != DeadVec.end(); ++posVec) { RPCDeadStrips::DeadItem Item; Item.rawId = (*posVec).rawId; Item.strip = (*posVec).strip; theRPCDeadStripsObj->DeadVec.push_back(Item); } } - -} +} -void PrimitivePreprocess::Preprocess(const edm::Event& iEvent, const edm::EventSetup& iSetup, RPCRecHitCollection& primitivedigi){ +void PrimitivePreprocess::Preprocess(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + RPCRecHitCollection& primitivedigi) { //loop over rpcdigis and cluster algorithm - - + std::map LBName_ChamberID_Map_1; std::map LBID_ChamberID_Map_1; std::map LBName_ChamberID_Map_2; std::map LBID_ChamberID_Map_2; - + std::vector::iterator it; - for(it = Final_MapVector.begin(); it != Final_MapVector.end(); it++){ - LBName_ChamberID_Map_1[(*it).chamber1_]=(*it).linkboard_; - LBID_ChamberID_Map_1[(*it).chamber1_]=(*it).linkboard_ID; - if((*it).chamber2_ != "-"){ - LBName_ChamberID_Map_2[(*it).chamber2_]=(*it).linkboard_; - LBID_ChamberID_Map_2[(*it).chamber2_]=(*it).linkboard_ID; + for (it = Final_MapVector.begin(); it != Final_MapVector.end(); it++) { + LBName_ChamberID_Map_1[(*it).chamber1_] = (*it).linkboard_; + LBID_ChamberID_Map_1[(*it).chamber1_] = (*it).linkboard_ID; + if ((*it).chamber2_ != "-") { + LBName_ChamberID_Map_2[(*it).chamber2_] = (*it).linkboard_; + LBID_ChamberID_Map_2[(*it).chamber2_] = (*it).linkboard_ID; } } // map_2 is only necessary for barrel - - - - for(auto& iterator_ : processorvector_){ - iterator_.Process(iEvent, iSetup, rpcToken_, primitivedigi, - theRPCMaskedStripsObj, theRPCDeadStripsObj, theAlgorithm, - LBName_ChamberID_Map_1, LBID_ChamberID_Map_1, LBName_ChamberID_Map_2, LBID_ChamberID_Map_2, - ApplyLinkBoardCut_, LinkBoardCut_, ClusterSizeCut_); + + for (auto& iterator_ : processorvector_) { + iterator_.Process(iEvent, + iSetup, + rpcToken_, + primitivedigi, + theRPCMaskedStripsObj, + theRPCDeadStripsObj, + theAlgorithm, + LBName_ChamberID_Map_1, + LBID_ChamberID_Map_1, + LBName_ChamberID_Map_2, + LBID_ChamberID_Map_2, + ApplyLinkBoardCut_, + LinkBoardCut_, + ClusterSizeCut_); } } - - diff --git a/L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc b/L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc index ee9667ab03357..72a79a4f4d765 100644 --- a/L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc +++ b/L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc @@ -1,27 +1,23 @@ #include "L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h" -RPCProcessor::RPCProcessor(){ -} +RPCProcessor::RPCProcessor() {} -RPCProcessor::~RPCProcessor(){ -} +RPCProcessor::~RPCProcessor() {} void RPCProcessor::Process(const edm::Event& iEvent, - const edm::EventSetup& iSetup, - const edm::EDGetToken& RPCDigiToken, - RPCRecHitCollection& primitivedigi, - std::unique_ptr& theRPCMaskedStripsObj, + const edm::EventSetup& iSetup, + const edm::EDGetToken& RPCDigiToken, + RPCRecHitCollection& primitivedigi, + std::unique_ptr& theRPCMaskedStripsObj, std::unique_ptr& theRPCDeadStripsObj, - std::unique_ptr& theAlgo, - std::map LBName_ChamberID_Map_1, - std::map LBID_ChamberID_Map_1, - std::map LBName_ChamberID_Map_2, - std::map LBID_ChamberID_Map_2, - bool ApplyLinkBoardCut_, - int LinkboardCut, - int ClusterSizeCut ) const{ - - + std::unique_ptr& theAlgo, + std::map LBName_ChamberID_Map_1, + std::map LBID_ChamberID_Map_1, + std::map LBName_ChamberID_Map_2, + std::map LBID_ChamberID_Map_2, + bool ApplyLinkBoardCut_, + int LinkboardCut, + int ClusterSizeCut) const { // Get the RPC Geometry edm::ESHandle rpcGeom; iSetup.get().get(rpcGeom); @@ -29,71 +25,63 @@ void RPCProcessor::Process(const edm::Event& iEvent, edm::Handle rpcdigis; iEvent.getByToken(RPCDigiToken, rpcdigis); // Pass the EventSetup to the algo - theAlgo->setES(iSetup); - - + theAlgo->setES(iSetup); + std::map FirstLinkBarrel; std::map FirstLinkEndCap; FirstLinkBarrel.clear(); FirstLinkEndCap.clear(); - - bool PassLinkCutBarrel=true; - bool PassLinkCutEndCap=true; - - - for ( auto rpcdgIt = rpcdigis->begin(); rpcdgIt != rpcdigis->end(); ++rpcdgIt ) { - + + bool PassLinkCutBarrel = true; + bool PassLinkCutEndCap = true; + + for (auto rpcdgIt = rpcdigis->begin(); rpcdgIt != rpcdigis->end(); ++rpcdgIt) { // The layerId const RPCDetId& rpcId = (*rpcdgIt).first; - + // Get the GeomDet from the setup const RPCRoll* roll = rpcGeom->roll(rpcId); - if (roll == nullptr){ - edm::LogError("BadDigiInput")<<"Failed to find RPCRoll for ID "<MaskVec ) { - if ( tomask.rawId == rawId ) { + + for (const auto& tomask : theRPCMaskedStripsObj->MaskVec) { + if (tomask.rawId == rawId) { const int bit = tomask.strip; - mask.set(bit-1); + mask.set(bit - 1); } } - - for ( const auto& tomask : theRPCDeadStripsObj->DeadVec ) { - if ( tomask.rawId == rawId ) { + + for (const auto& tomask : theRPCDeadStripsObj->DeadVec) { + if (tomask.rawId == rawId) { const int bit = tomask.strip; - mask.set(bit-1); + mask.set(bit - 1); } } - - - // Call the reconstruction algorithm + + // Call the reconstruction algorithm edm::OwnVector recHits = theAlgo->reconstruct(*roll, rpcId, range, mask); - + // LocalError tmpErr; - // LocalPoint point; + // LocalPoint point; // auto digi_pointer = std::make_shared( RPCRecHit(rpcId, 0, 0, 0, point, tmpErr) ); // recHits.push_back(*digi_pointer.get()); - + // Apply extra Cuts section. - - + //Final rechit vector - edm::OwnVector recHit_output; - - + edm::OwnVector recHit_output; + //Loop over the recHit vector - for(auto &own : recHits){ - - const RPCDetId& rpcId_ = own.rpcId(); + for (auto& own : recHits) { + const RPCDetId& rpcId_ = own.rpcId(); const int region_ = rpcId_.region(); const int ring_ = rpcId_.ring(); const int station_ = rpcId_.station(); @@ -101,207 +89,200 @@ void RPCProcessor::Process(const edm::Event& iEvent, const int subsector_ = rpcId_.subsector(); const int layer_ = rpcId_.layer(); const int roll_eta_ = rpcId_.roll(); - - //Apply linkboard cut - if(ApplyLinkBoardCut_==true){ - - std::string StringBarrel=""; - std::string StringEndCap=""; - - std::string LBNameEndCap=""; - std::string LBNameBarrel=""; - - /// Region id: 0 for Barrel, +/-1 For +/- Endcap - if(region_ == 0){ - StringBarrel=GetStringBarrel(ring_, station_, sector_, layer_, subsector_, roll_eta_); - std::string namemap1 = LBName_ChamberID_Map_1[StringBarrel]; - std::string namemap2 = LBName_ChamberID_Map_2[StringBarrel]; - LBNameBarrel=namemap1+namemap2; - - } else{ - //ChamberID only for EndCap region - int nsub = 6; - (ring_ == 1 && station_ > 1) ? nsub = 3 : nsub = 6; - const int chamberID = subsector_ + nsub * ( sector_ - 1); - - StringEndCap=GetStringEndCap(station_, ring_, chamberID); - //Getting linkboard name from map - LBNameEndCap=LBName_ChamberID_Map_1[StringEndCap]; - } - - - //maximum two cluster per linkboard - if(region_==0){//For Barrel - - std::map::iterator it; - it=FirstLinkBarrel.find(LBNameBarrel); - - int repetitions_Barrel=0; - if(it==FirstLinkBarrel.end()) { - FirstLinkBarrel[LBNameBarrel]=1; - } - else if (it != FirstLinkBarrel.end()){ - repetitions_Barrel=FirstLinkBarrel[LBNameBarrel]; - FirstLinkBarrel[LBNameBarrel]=repetitions_Barrel+1; - } - - PassLinkCutBarrel=ApplyLinkBoardCut(FirstLinkBarrel[LBNameBarrel],LinkboardCut); - if(PassLinkCutBarrel) recHit_output.push_back(own); - - } - - else{ //For endcap - - std::map::iterator it; - it=FirstLinkEndCap.find(LBNameEndCap); - - int repetitions_EndCap=0; - if(it==FirstLinkEndCap.end()) { - FirstLinkEndCap[LBNameEndCap]=1; - } - else if (it != FirstLinkEndCap.end()){ - repetitions_EndCap=FirstLinkEndCap[LBNameEndCap]; - FirstLinkEndCap[LBNameEndCap]=repetitions_EndCap+1; - } - PassLinkCutEndCap=ApplyLinkBoardCut(FirstLinkEndCap[LBNameEndCap],LinkboardCut); - if(PassLinkCutEndCap) recHit_output.push_back(own); - - } - - } else recHit_output = recHits; - - } //loop over temporal recHit vector - - - if (!recHit_output.empty()){// Just to make sure - // clustersize cut: - recHit_output=ApplyClusterSizeCut(recHit_output, ClusterSizeCut); + + //Apply linkboard cut + if (ApplyLinkBoardCut_ == true) { + std::string StringBarrel = ""; + std::string StringEndCap = ""; + + std::string LBNameEndCap = ""; + std::string LBNameBarrel = ""; + + /// Region id: 0 for Barrel, +/-1 For +/- Endcap + if (region_ == 0) { + StringBarrel = GetStringBarrel(ring_, station_, sector_, layer_, subsector_, roll_eta_); + std::string namemap1 = LBName_ChamberID_Map_1[StringBarrel]; + std::string namemap2 = LBName_ChamberID_Map_2[StringBarrel]; + LBNameBarrel = namemap1 + namemap2; + + } else { + //ChamberID only for EndCap region + int nsub = 6; + (ring_ == 1 && station_ > 1) ? nsub = 3 : nsub = 6; + const int chamberID = subsector_ + nsub * (sector_ - 1); + + StringEndCap = GetStringEndCap(station_, ring_, chamberID); + //Getting linkboard name from map + LBNameEndCap = LBName_ChamberID_Map_1[StringEndCap]; + } + + //maximum two cluster per linkboard + if (region_ == 0) { //For Barrel + + std::map::iterator it; + it = FirstLinkBarrel.find(LBNameBarrel); + + int repetitions_Barrel = 0; + if (it == FirstLinkBarrel.end()) { + FirstLinkBarrel[LBNameBarrel] = 1; + } else if (it != FirstLinkBarrel.end()) { + repetitions_Barrel = FirstLinkBarrel[LBNameBarrel]; + FirstLinkBarrel[LBNameBarrel] = repetitions_Barrel + 1; + } + + PassLinkCutBarrel = ApplyLinkBoardCut(FirstLinkBarrel[LBNameBarrel], LinkboardCut); + if (PassLinkCutBarrel) + recHit_output.push_back(own); + + } + + else { //For endcap + + std::map::iterator it; + it = FirstLinkEndCap.find(LBNameEndCap); + + int repetitions_EndCap = 0; + if (it == FirstLinkEndCap.end()) { + FirstLinkEndCap[LBNameEndCap] = 1; + } else if (it != FirstLinkEndCap.end()) { + repetitions_EndCap = FirstLinkEndCap[LBNameEndCap]; + FirstLinkEndCap[LBNameEndCap] = repetitions_EndCap + 1; + } + PassLinkCutEndCap = ApplyLinkBoardCut(FirstLinkEndCap[LBNameEndCap], LinkboardCut); + if (PassLinkCutEndCap) + recHit_output.push_back(own); + } + + } else + recHit_output = recHits; + + } //loop over temporal recHit vector + + if (!recHit_output.empty()) { // Just to make sure + // clustersize cut: + recHit_output = ApplyClusterSizeCut(recHit_output, ClusterSizeCut); primitivedigi.put(rpcId, recHit_output.begin(), recHit_output.end()); } - - } // end for loop in RpcDigis -} - + } // end for loop in RpcDigis +} -edm::OwnVector RPCProcessor::ApplyClusterSizeCut(const edm::OwnVector recHits_, int ClusterSizeCut_){ - +edm::OwnVector RPCProcessor::ApplyClusterSizeCut(const edm::OwnVector recHits_, + int ClusterSizeCut_) { edm::OwnVector final_; - - for(auto &own : recHits_){ - bool passcut=true; - if(own.clusterSize() > ClusterSizeCut_){ + + for (auto& own : recHits_) { + bool passcut = true; + if (own.clusterSize() > ClusterSizeCut_) { passcut = false; } - if(passcut) final_.push_back(own); - } - + if (passcut) + final_.push_back(own); + } + return final_; } -bool RPCProcessor::ApplyLinkBoardCut(int NClusters, int LinkboardCut){ - +bool RPCProcessor::ApplyLinkBoardCut(int NClusters, int LinkboardCut) { bool passCutsize = true; - if(NClusters > LinkboardCut) passCutsize = false; - + if (NClusters > LinkboardCut) + passCutsize = false; + return passCutsize; - } - -std::string RPCProcessor::GetStringBarrel(const int ring_, const int station_, const int sector_, const int layer_, const int subsector_, const int roll_) const { - - std::string point=""; +std::string RPCProcessor::GetStringBarrel(const int ring_, + const int station_, + const int sector_, + const int layer_, + const int subsector_, + const int roll_) const { + std::string point = ""; std::map Wheel; - Wheel[-2]="W-2/"; - Wheel[-1]="W-1/"; - Wheel[0]="W0/"; - Wheel[1]="W+1/"; - Wheel[2]="W+2/"; - + Wheel[-2] = "W-2/"; + Wheel[-1] = "W-1/"; + Wheel[0] = "W0/"; + Wheel[1] = "W+1/"; + Wheel[2] = "W+2/"; + point += Wheel[ring_]; - + std::map Station; - Station[1]="RB1"; - Station[2]="RB2"; - Station[3]="RB3"; - Station[4]="RB4"; - - + Station[1] = "RB1"; + Station[2] = "RB2"; + Station[3] = "RB3"; + Station[4] = "RB4"; + point += Station[station_]; - + std::map Layer; - Layer[1]="in"; - Layer[2]="out"; + Layer[1] = "in"; + Layer[2] = "out"; //layer 1 is the inner chamber and layer 2 is the outer chamber - if(station_ == 1 || station_ == 2) point += Layer[layer_]; - + if (station_ == 1 || station_ == 2) + point += Layer[layer_]; + point += "/"; - + // Including the sector - point+= std::to_string(sector_); - + point += std::to_string(sector_); + //Taken from CondFormats/RPCObjects/src/ChamberLocationSpec.cc - + std::map SubsecFour; - SubsecFour[1]="--"; - SubsecFour[2]="-"; - SubsecFour[3]="+"; - SubsecFour[4]="++"; - + SubsecFour[1] = "--"; + SubsecFour[2] = "-"; + SubsecFour[3] = "+"; + SubsecFour[4] = "++"; + std::map SubsecTwo; - SubsecTwo[1]="-"; - SubsecTwo[2]="+"; - - if(station_ == 3 || station_ == 4){ - - if(station_ == 4 && sector_ == 4){ - point+=SubsecFour[subsector_]; + SubsecTwo[1] = "-"; + SubsecTwo[2] = "+"; + + if (station_ == 3 || station_ == 4) { + if (station_ == 4 && sector_ == 4) { + point += SubsecFour[subsector_]; } - - else if ((station_== 4) && (sector_ == 9 || sector_ == 11)){ - point+=""; + + else if ((station_ == 4) && (sector_ == 9 || sector_ == 11)) { + point += ""; } - - else point+=SubsecTwo[subsector_]; - + + else + point += SubsecTwo[subsector_]; } - - + //Taken from DataFormats/MuonDetId/src/RPCDetId.cc - + std::map ROLL; - ROLL[1]="Backward"; - ROLL[2]="Central"; - ROLL[3]="Forward"; - - point+=ROLL[roll_]; - + ROLL[1] = "Backward"; + ROLL[2] = "Central"; + ROLL[3] = "Forward"; + + point += ROLL[roll_]; + return point; } std::string RPCProcessor::GetStringEndCap(const int station_, const int ring_, const int chamberID_) const { - - std::string point=""; + std::string point = ""; //Including station number std::map Station; - Station[-4]="RE-4"; - Station[-3]="RE-3"; - Station[-2]="RE-2"; - Station[-1]="RE-1"; - Station[1]="RE+1"; - Station[2]="RE+2"; - Station[3]="RE+3"; - Station[4]="RE+4"; - - point+=Station[station_]; - + Station[-4] = "RE-4"; + Station[-3] = "RE-3"; + Station[-2] = "RE-2"; + Station[-1] = "RE-1"; + Station[1] = "RE+1"; + Station[2] = "RE+2"; + Station[3] = "RE+3"; + Station[4] = "RE+4"; + + point += Station[station_]; + //Including ring number - point+="/"+std::to_string(ring_); + point += "/" + std::to_string(ring_); //Including chamberID number - point+="/"+std::to_string(chamberID_); - + point += "/" + std::to_string(chamberID_); + return point; } - - From 8e3ed42122cf011d346125dde04ee93732ed9bae Mon Sep 17 00:00:00 2001 From: Manuel Segura Date: Thu, 27 Jun 2019 16:17:17 +0200 Subject: [PATCH 08/11] Trigger primitive phase2 @maseguracern plugin --- L1Trigger/RPCTriggerPrimitives/BuildFile.xml | 6 - .../interface/PrimitiveAlgoFactory.h | 9 - .../interface/PrimitivePreprocess.h | 71 ----- .../interface/RPCProcessor.h | 85 ------ .../L1TMuonRPCTriggerPrimitivesProducer.h | 2 +- .../src/PrimitiveAlgoFactory.cc | 4 - .../src/PrimitivePreprocess.cc | 157 ---------- .../RPCTriggerPrimitives/src/RPCProcessor.cc | 288 ------------------ 8 files changed, 1 insertion(+), 621 deletions(-) delete mode 100644 L1Trigger/RPCTriggerPrimitives/interface/PrimitiveAlgoFactory.h delete mode 100644 L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h delete mode 100644 L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h delete mode 100644 L1Trigger/RPCTriggerPrimitives/src/PrimitiveAlgoFactory.cc delete mode 100644 L1Trigger/RPCTriggerPrimitives/src/PrimitivePreprocess.cc delete mode 100644 L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc diff --git a/L1Trigger/RPCTriggerPrimitives/BuildFile.xml b/L1Trigger/RPCTriggerPrimitives/BuildFile.xml index 34472708e2649..f2fdfaaab7deb 100644 --- a/L1Trigger/RPCTriggerPrimitives/BuildFile.xml +++ b/L1Trigger/RPCTriggerPrimitives/BuildFile.xml @@ -1,9 +1,3 @@ - - - - - - diff --git a/L1Trigger/RPCTriggerPrimitives/interface/PrimitiveAlgoFactory.h b/L1Trigger/RPCTriggerPrimitives/interface/PrimitiveAlgoFactory.h deleted file mode 100644 index 1bb8aec5434ec..0000000000000 --- a/L1Trigger/RPCTriggerPrimitives/interface/PrimitiveAlgoFactory.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef L1Trigger_PrimitiveAlgoFactory_H -#define L1Trigger_PrimitiveAlgoFactory_H - -#include "FWCore/PluginManager/interface/PluginFactory.h" -#include "RecoLocalMuon/RPCRecHit/interface/RPCRecHitBaseAlgo.h" - -typedef edmplugin::PluginFactory PrimitiveAlgoFactory; - -#endif diff --git a/L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h b/L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h deleted file mode 100644 index 716adbce500d0..0000000000000 --- a/L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef L1Trigger_RPCTriggerPrimitives_PrimitivePreprocess_h -#define L1Trigger_RPCTriggerPrimitives_PrimitivePreprocess_h - -#include "DataFormats/MuonDetId/interface/RPCDetId.h" -#include "DataFormats/RPCDigi/interface/RPCDigiCollection.h" -#include "DataFormats/RPCRecHit/interface/RPCRecHit.h" -#include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/PluginManager/interface/PluginFactory.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "CondFormats/RPCObjects/interface/RPCMaskedStrips.h" -#include "CondFormats/RPCObjects/interface/RPCDeadStrips.h" -#include "CondFormats/DataRecord/interface/RPCMaskedStripsRcd.h" -#include "CondFormats/DataRecord/interface/RPCDeadStripsRcd.h" - -#include "Geometry/RPCGeometry/interface/RPCRoll.h" -#include "Geometry/RPCGeometry/interface/RPCGeometry.h" -#include "Geometry/Records/interface/MuonGeometryRecord.h" - -#include "RecoLocalMuon/RPCRecHit/interface/RPCRecHitBaseAlgo.h" - -#include "L1Trigger/RPCTriggerPrimitives/interface/PrimitiveAlgoFactory.h" -#include "L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h" - -#include -#include -#include - -class PrimitivePreprocess { -public: - explicit PrimitivePreprocess(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iConsumes); - - ~PrimitivePreprocess(); - - void beginRun(const edm::EventSetup&); - - void Preprocess(const edm::Event& iEvent, const edm::EventSetup& iSetup, RPCRecHitCollection& primitivedigi); - -private: - const edm::EDGetTokenT rpcToken_; - std::array processorvector_; - - edm::FileInPath Mapsource_; - bool ApplyLinkBoardCut_; - int LinkBoardCut_; - int ClusterSizeCut_; - - std::vector Final_MapVector; - - //masking from rpcrechit module - - std::vector MaskVec; - std::vector DeadVec; - - std::unique_ptr theRPCMaskedStripsObj; - // Object with mask-strips-vector for all the RPC Detectors - - std::unique_ptr theRPCDeadStripsObj; - // Object with dead-strips-vector for all the RPC Detectors - - // The reconstruction algorithm - std::unique_ptr theAlgorithm; - - enum class MaskSource { File, EventSetup } maskSource_, deadSource_; -}; -#endif diff --git a/L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h b/L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h deleted file mode 100644 index 1dc2dcb94d36b..0000000000000 --- a/L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef L1Trigger_RPCTriggerPrimitives_RPCProcessor_h -#define L1Trigger_RPCTriggerPrimitives_RPCProcessor_h - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "DataFormats/MuonDetId/interface/RPCDetId.h" -#include "DataFormats/RPCDigi/interface/RPCDigiCollection.h" -#include "DataFormats/RPCRecHit/interface/RPCRecHit.h" - -#include "DataFormats/RPCRecHit/interface/RPCRecHit.h" -#include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h" - -#include "Geometry/RPCGeometry/interface/RPCRoll.h" -#include "Geometry/RPCGeometry/interface/RPCGeometry.h" -#include "Geometry/Records/interface/MuonGeometryRecord.h" - -#include "RecoLocalMuon/RPCRecHit/interface/RPCRecHitAlgoFactory.h" - -#include "CondFormats/DataRecord/interface/RPCMaskedStripsRcd.h" -#include "CondFormats/DataRecord/interface/RPCDeadStripsRcd.h" -#include "CondFormats/RPCObjects/interface/RPCMaskedStrips.h" -#include "CondFormats/RPCObjects/interface/RPCDeadStrips.h" -#include "CondFormats/Serialization/interface/Serializable.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -class RPCProcessor { -public: - explicit RPCProcessor(); - ~RPCProcessor(); - - struct Map_structure { - std::string linkboard_; - std::string linkboard_ID; - std::string chamber1_; - std::string chamber2_; - COND_SERIALIZABLE; - }; - - void Process(const edm::Event& iEvent, - const edm::EventSetup& iSetup, - const edm::EDGetToken& RPCDigiToken, - RPCRecHitCollection& primitivedigi, - std::unique_ptr& theRPCMaskedStripsObj, - std::unique_ptr& theRPCDeadStripsObj, - std::unique_ptr& theAlgo, - std::map LBName_ChamberID_Map_1, - std::map LBID_ChamberID_Map_1, - std::map LBName_ChamberID_Map_2, - std::map LBID_ChamberID_Map_2, - bool ApplyLinkBoardCut_, - int LinkboardCut, - int ClusterSizeCut) const; - - static edm::OwnVector ApplyClusterSizeCut(const edm::OwnVector recHits_, int ClusterSizeCut_); - static bool ApplyLinkBoardCut(int NClusters, int LinkboardCut); - - std::vector const& GetMapVector() const { return MapVec; } - std::vector MapVec; - - std::string GetStringBarrel(const int ring_, - const int station_, - const int sector_, - const int layer_, - const int subsector_, - const int roll_) const; - std::string GetStringEndCap(const int station_, const int ring_, const int chamberID_) const; - - COND_SERIALIZABLE; - -private: -}; -#endif diff --git a/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.h b/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.h index 4dcd07cc4bbe1..88f1d691a6e49 100644 --- a/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.h +++ b/L1Trigger/RPCTriggerPrimitives/plugins/L1TMuonRPCTriggerPrimitivesProducer.h @@ -17,7 +17,7 @@ #include "TVector3.h" -#include "L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h" +#include "L1Trigger/RPCTriggerPrimitives/plugins/PrimitivePreprocess.h" // Class declaration diff --git a/L1Trigger/RPCTriggerPrimitives/src/PrimitiveAlgoFactory.cc b/L1Trigger/RPCTriggerPrimitives/src/PrimitiveAlgoFactory.cc deleted file mode 100644 index cce3d8c14588e..0000000000000 --- a/L1Trigger/RPCTriggerPrimitives/src/PrimitiveAlgoFactory.cc +++ /dev/null @@ -1,4 +0,0 @@ -#include "FWCore/PluginManager/interface/PluginFactory.h" -#include "L1Trigger/RPCTriggerPrimitives/interface/PrimitiveAlgoFactory.h" - -EDM_REGISTER_PLUGINFACTORY(PrimitiveAlgoFactory, "PrimitiveAlgoFactory"); diff --git a/L1Trigger/RPCTriggerPrimitives/src/PrimitivePreprocess.cc b/L1Trigger/RPCTriggerPrimitives/src/PrimitivePreprocess.cc deleted file mode 100644 index e63b148263534..0000000000000 --- a/L1Trigger/RPCTriggerPrimitives/src/PrimitivePreprocess.cc +++ /dev/null @@ -1,157 +0,0 @@ -#include "L1Trigger/RPCTriggerPrimitives/interface/PrimitivePreprocess.h" - -PrimitivePreprocess::PrimitivePreprocess(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iConsumes) - : rpcToken_(iConsumes.consumes(iConfig.getParameter("Primitiverechitlabel"))), - processorvector_(), - Mapsource_(iConfig.getParameter("Mapsource")), - ApplyLinkBoardCut_(iConfig.getParameter("ApplyLinkBoardCut")), - LinkBoardCut_(iConfig.getParameter("LinkBoardCut")), - ClusterSizeCut_(iConfig.getParameter("ClusterSizeCut")), - theRPCMaskedStripsObj(nullptr), - theRPCDeadStripsObj(nullptr), - // Get the concrete reconstruction algo from the factory - theAlgorithm{PrimitiveAlgoFactory::get()->create(iConfig.getParameter("recAlgo"), - iConfig.getParameter("recAlgoConfig"))}, - maskSource_(MaskSource::EventSetup), - deadSource_(MaskSource::EventSetup) { - //Get LUT for linkboard map - std::ifstream inputFile(Mapsource_.fullPath().c_str(), std::ios::in); - - if (!inputFile) { - throw cms::Exception("No LUT file") << "Error: Linkboard mapping cannot be opened"; - exit(1); - } - - while (inputFile.good()) { - RPCProcessor::Map_structure temp; - inputFile >> temp.linkboard_ >> temp.linkboard_ID >> temp.chamber1_ >> temp.chamber2_; - Final_MapVector.push_back(temp); - } - Final_MapVector.pop_back(); - - inputFile.close(); - - const std::string maskSource = iConfig.getParameter("maskSource"); - - if (maskSource == "File") { - maskSource_ = MaskSource::File; - edm::FileInPath fp1 = iConfig.getParameter("maskvecfile"); - std::ifstream inputFile_1(fp1.fullPath().c_str(), std::ios::in); - if (!inputFile_1) { - std::cerr << "Masked Strips File cannot not be opened" << std::endl; - exit(1); - } - while (inputFile_1.good()) { - RPCMaskedStrips::MaskItem Item; - inputFile_1 >> Item.rawId >> Item.strip; - if (inputFile_1.good()) - MaskVec.push_back(Item); - } - inputFile_1.close(); - } - - const std::string deadSource = iConfig.getParameter("deadSource"); - - if (deadSource == "File") { - deadSource_ = MaskSource::File; - edm::FileInPath fp2 = iConfig.getParameter("deadvecfile"); - std::ifstream inputFile_2(fp2.fullPath().c_str(), std::ios::in); - if (!inputFile_2) { - std::cerr << "Dead Strips File cannot not be opened" << std::endl; - exit(1); - } - while (inputFile_2.good()) { - RPCDeadStrips::DeadItem Item; - inputFile_2 >> Item.rawId >> Item.strip; - if (inputFile_2.good()) - DeadVec.push_back(Item); - } - inputFile_2.close(); - } - - //Closing the input files -} - -PrimitivePreprocess::~PrimitivePreprocess() {} - -void PrimitivePreprocess::beginRun(const edm::EventSetup& iSetup) { - // Get masked- and dead-strip information - theRPCMaskedStripsObj = std::make_unique(); - theRPCDeadStripsObj = std::make_unique(); - - // Getting the masked-strip information - if (maskSource_ == MaskSource::EventSetup) { - edm::ESHandle readoutMaskedStrips; - iSetup.get().get(readoutMaskedStrips); - const RPCMaskedStrips* tmp_obj = readoutMaskedStrips.product(); - theRPCMaskedStripsObj->MaskVec = tmp_obj->MaskVec; - delete tmp_obj; - } - - else if (maskSource_ == MaskSource::File) { - std::vector::iterator posVec; - for (posVec = MaskVec.begin(); posVec != MaskVec.end(); ++posVec) { - RPCMaskedStrips::MaskItem Item; - Item.rawId = (*posVec).rawId; - Item.strip = (*posVec).strip; - theRPCMaskedStripsObj->MaskVec.push_back(Item); - } - } - - // Getting the dead-strip information - - if (deadSource_ == MaskSource::EventSetup) { - edm::ESHandle readoutDeadStrips; - iSetup.get().get(readoutDeadStrips); - const RPCDeadStrips* tmp_obj = readoutDeadStrips.product(); - theRPCDeadStripsObj->DeadVec = tmp_obj->DeadVec; - delete tmp_obj; - } else if (deadSource_ == MaskSource::File) { - std::vector::iterator posVec; - for (posVec = DeadVec.begin(); posVec != DeadVec.end(); ++posVec) { - RPCDeadStrips::DeadItem Item; - Item.rawId = (*posVec).rawId; - Item.strip = (*posVec).strip; - theRPCDeadStripsObj->DeadVec.push_back(Item); - } - } -} - -void PrimitivePreprocess::Preprocess(const edm::Event& iEvent, - const edm::EventSetup& iSetup, - RPCRecHitCollection& primitivedigi) { - //loop over rpcdigis and cluster algorithm - - std::map LBName_ChamberID_Map_1; - std::map LBID_ChamberID_Map_1; - std::map LBName_ChamberID_Map_2; - std::map LBID_ChamberID_Map_2; - - std::vector::iterator it; - for (it = Final_MapVector.begin(); it != Final_MapVector.end(); it++) { - LBName_ChamberID_Map_1[(*it).chamber1_] = (*it).linkboard_; - LBID_ChamberID_Map_1[(*it).chamber1_] = (*it).linkboard_ID; - if ((*it).chamber2_ != "-") { - LBName_ChamberID_Map_2[(*it).chamber2_] = (*it).linkboard_; - LBID_ChamberID_Map_2[(*it).chamber2_] = (*it).linkboard_ID; - } - } - // map_2 is only necessary for barrel - - for (auto& iterator_ : processorvector_) { - iterator_.Process(iEvent, - iSetup, - rpcToken_, - primitivedigi, - theRPCMaskedStripsObj, - theRPCDeadStripsObj, - theAlgorithm, - LBName_ChamberID_Map_1, - LBID_ChamberID_Map_1, - LBName_ChamberID_Map_2, - LBID_ChamberID_Map_2, - ApplyLinkBoardCut_, - LinkBoardCut_, - ClusterSizeCut_); - } -} diff --git a/L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc b/L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc deleted file mode 100644 index 72a79a4f4d765..0000000000000 --- a/L1Trigger/RPCTriggerPrimitives/src/RPCProcessor.cc +++ /dev/null @@ -1,288 +0,0 @@ -#include "L1Trigger/RPCTriggerPrimitives/interface/RPCProcessor.h" - -RPCProcessor::RPCProcessor() {} - -RPCProcessor::~RPCProcessor() {} - -void RPCProcessor::Process(const edm::Event& iEvent, - const edm::EventSetup& iSetup, - const edm::EDGetToken& RPCDigiToken, - RPCRecHitCollection& primitivedigi, - std::unique_ptr& theRPCMaskedStripsObj, - std::unique_ptr& theRPCDeadStripsObj, - std::unique_ptr& theAlgo, - std::map LBName_ChamberID_Map_1, - std::map LBID_ChamberID_Map_1, - std::map LBName_ChamberID_Map_2, - std::map LBID_ChamberID_Map_2, - bool ApplyLinkBoardCut_, - int LinkboardCut, - int ClusterSizeCut) const { - // Get the RPC Geometry - edm::ESHandle rpcGeom; - iSetup.get().get(rpcGeom); - // Get the RPC Digis - edm::Handle rpcdigis; - iEvent.getByToken(RPCDigiToken, rpcdigis); - // Pass the EventSetup to the algo - theAlgo->setES(iSetup); - - std::map FirstLinkBarrel; - std::map FirstLinkEndCap; - FirstLinkBarrel.clear(); - FirstLinkEndCap.clear(); - - bool PassLinkCutBarrel = true; - bool PassLinkCutEndCap = true; - - for (auto rpcdgIt = rpcdigis->begin(); rpcdgIt != rpcdigis->end(); ++rpcdgIt) { - // The layerId - const RPCDetId& rpcId = (*rpcdgIt).first; - - // Get the GeomDet from the setup - const RPCRoll* roll = rpcGeom->roll(rpcId); - if (roll == nullptr) { - edm::LogError("BadDigiInput") << "Failed to find RPCRoll for ID " << rpcId; - continue; - } - - // Get the iterators over the digis associated with this LayerId - const RPCDigiCollection::Range& range = (*rpcdgIt).second; - - RollMask mask; - const int rawId = rpcId.rawId(); - - for (const auto& tomask : theRPCMaskedStripsObj->MaskVec) { - if (tomask.rawId == rawId) { - const int bit = tomask.strip; - mask.set(bit - 1); - } - } - - for (const auto& tomask : theRPCDeadStripsObj->DeadVec) { - if (tomask.rawId == rawId) { - const int bit = tomask.strip; - mask.set(bit - 1); - } - } - - // Call the reconstruction algorithm - edm::OwnVector recHits = theAlgo->reconstruct(*roll, rpcId, range, mask); - - // LocalError tmpErr; - // LocalPoint point; - // auto digi_pointer = std::make_shared( RPCRecHit(rpcId, 0, 0, 0, point, tmpErr) ); - // recHits.push_back(*digi_pointer.get()); - - // Apply extra Cuts section. - - //Final rechit vector - edm::OwnVector recHit_output; - - //Loop over the recHit vector - for (auto& own : recHits) { - const RPCDetId& rpcId_ = own.rpcId(); - const int region_ = rpcId_.region(); - const int ring_ = rpcId_.ring(); - const int station_ = rpcId_.station(); - const int sector_ = rpcId_.sector(); - const int subsector_ = rpcId_.subsector(); - const int layer_ = rpcId_.layer(); - const int roll_eta_ = rpcId_.roll(); - - //Apply linkboard cut - if (ApplyLinkBoardCut_ == true) { - std::string StringBarrel = ""; - std::string StringEndCap = ""; - - std::string LBNameEndCap = ""; - std::string LBNameBarrel = ""; - - /// Region id: 0 for Barrel, +/-1 For +/- Endcap - if (region_ == 0) { - StringBarrel = GetStringBarrel(ring_, station_, sector_, layer_, subsector_, roll_eta_); - std::string namemap1 = LBName_ChamberID_Map_1[StringBarrel]; - std::string namemap2 = LBName_ChamberID_Map_2[StringBarrel]; - LBNameBarrel = namemap1 + namemap2; - - } else { - //ChamberID only for EndCap region - int nsub = 6; - (ring_ == 1 && station_ > 1) ? nsub = 3 : nsub = 6; - const int chamberID = subsector_ + nsub * (sector_ - 1); - - StringEndCap = GetStringEndCap(station_, ring_, chamberID); - //Getting linkboard name from map - LBNameEndCap = LBName_ChamberID_Map_1[StringEndCap]; - } - - //maximum two cluster per linkboard - if (region_ == 0) { //For Barrel - - std::map::iterator it; - it = FirstLinkBarrel.find(LBNameBarrel); - - int repetitions_Barrel = 0; - if (it == FirstLinkBarrel.end()) { - FirstLinkBarrel[LBNameBarrel] = 1; - } else if (it != FirstLinkBarrel.end()) { - repetitions_Barrel = FirstLinkBarrel[LBNameBarrel]; - FirstLinkBarrel[LBNameBarrel] = repetitions_Barrel + 1; - } - - PassLinkCutBarrel = ApplyLinkBoardCut(FirstLinkBarrel[LBNameBarrel], LinkboardCut); - if (PassLinkCutBarrel) - recHit_output.push_back(own); - - } - - else { //For endcap - - std::map::iterator it; - it = FirstLinkEndCap.find(LBNameEndCap); - - int repetitions_EndCap = 0; - if (it == FirstLinkEndCap.end()) { - FirstLinkEndCap[LBNameEndCap] = 1; - } else if (it != FirstLinkEndCap.end()) { - repetitions_EndCap = FirstLinkEndCap[LBNameEndCap]; - FirstLinkEndCap[LBNameEndCap] = repetitions_EndCap + 1; - } - PassLinkCutEndCap = ApplyLinkBoardCut(FirstLinkEndCap[LBNameEndCap], LinkboardCut); - if (PassLinkCutEndCap) - recHit_output.push_back(own); - } - - } else - recHit_output = recHits; - - } //loop over temporal recHit vector - - if (!recHit_output.empty()) { // Just to make sure - // clustersize cut: - recHit_output = ApplyClusterSizeCut(recHit_output, ClusterSizeCut); - primitivedigi.put(rpcId, recHit_output.begin(), recHit_output.end()); - } - - } // end for loop in RpcDigis -} - -edm::OwnVector RPCProcessor::ApplyClusterSizeCut(const edm::OwnVector recHits_, - int ClusterSizeCut_) { - edm::OwnVector final_; - - for (auto& own : recHits_) { - bool passcut = true; - if (own.clusterSize() > ClusterSizeCut_) { - passcut = false; - } - if (passcut) - final_.push_back(own); - } - - return final_; -} - -bool RPCProcessor::ApplyLinkBoardCut(int NClusters, int LinkboardCut) { - bool passCutsize = true; - if (NClusters > LinkboardCut) - passCutsize = false; - - return passCutsize; -} - -std::string RPCProcessor::GetStringBarrel(const int ring_, - const int station_, - const int sector_, - const int layer_, - const int subsector_, - const int roll_) const { - std::string point = ""; - std::map Wheel; - Wheel[-2] = "W-2/"; - Wheel[-1] = "W-1/"; - Wheel[0] = "W0/"; - Wheel[1] = "W+1/"; - Wheel[2] = "W+2/"; - - point += Wheel[ring_]; - - std::map Station; - Station[1] = "RB1"; - Station[2] = "RB2"; - Station[3] = "RB3"; - Station[4] = "RB4"; - - point += Station[station_]; - - std::map Layer; - Layer[1] = "in"; - Layer[2] = "out"; - //layer 1 is the inner chamber and layer 2 is the outer chamber - if (station_ == 1 || station_ == 2) - point += Layer[layer_]; - - point += "/"; - - // Including the sector - point += std::to_string(sector_); - - //Taken from CondFormats/RPCObjects/src/ChamberLocationSpec.cc - - std::map SubsecFour; - SubsecFour[1] = "--"; - SubsecFour[2] = "-"; - SubsecFour[3] = "+"; - SubsecFour[4] = "++"; - - std::map SubsecTwo; - SubsecTwo[1] = "-"; - SubsecTwo[2] = "+"; - - if (station_ == 3 || station_ == 4) { - if (station_ == 4 && sector_ == 4) { - point += SubsecFour[subsector_]; - } - - else if ((station_ == 4) && (sector_ == 9 || sector_ == 11)) { - point += ""; - } - - else - point += SubsecTwo[subsector_]; - } - - //Taken from DataFormats/MuonDetId/src/RPCDetId.cc - - std::map ROLL; - ROLL[1] = "Backward"; - ROLL[2] = "Central"; - ROLL[3] = "Forward"; - - point += ROLL[roll_]; - - return point; -} - -std::string RPCProcessor::GetStringEndCap(const int station_, const int ring_, const int chamberID_) const { - std::string point = ""; - //Including station number - std::map Station; - Station[-4] = "RE-4"; - Station[-3] = "RE-3"; - Station[-2] = "RE-2"; - Station[-1] = "RE-1"; - Station[1] = "RE+1"; - Station[2] = "RE+2"; - Station[3] = "RE+3"; - Station[4] = "RE+4"; - - point += Station[station_]; - - //Including ring number - point += "/" + std::to_string(ring_); - //Including chamberID number - point += "/" + std::to_string(chamberID_); - - return point; -} From b53d0ba4046271e5c9e9baa6cbc0d335767915a2 Mon Sep 17 00:00:00 2001 From: Manuel Segura Date: Fri, 28 Jun 2019 15:32:27 +0200 Subject: [PATCH 09/11] Trigger primitive phase2 @maseguracern plugin_ --- .../plugins/PrimitiveAlgoFactory.cc | 4 + .../plugins/PrimitiveAlgoFactory.h | 9 + .../plugins/PrimitivePreprocess.cc | 157 ++++++++++ .../plugins/PrimitivePreprocess.h | 71 +++++ .../plugins/RPCProcessor.cc | 288 ++++++++++++++++++ .../plugins/RPCProcessor.h | 85 ++++++ 6 files changed, 614 insertions(+) create mode 100644 L1Trigger/RPCTriggerPrimitives/plugins/PrimitiveAlgoFactory.cc create mode 100644 L1Trigger/RPCTriggerPrimitives/plugins/PrimitiveAlgoFactory.h create mode 100644 L1Trigger/RPCTriggerPrimitives/plugins/PrimitivePreprocess.cc create mode 100644 L1Trigger/RPCTriggerPrimitives/plugins/PrimitivePreprocess.h create mode 100644 L1Trigger/RPCTriggerPrimitives/plugins/RPCProcessor.cc create mode 100644 L1Trigger/RPCTriggerPrimitives/plugins/RPCProcessor.h diff --git a/L1Trigger/RPCTriggerPrimitives/plugins/PrimitiveAlgoFactory.cc b/L1Trigger/RPCTriggerPrimitives/plugins/PrimitiveAlgoFactory.cc new file mode 100644 index 0000000000000..c05acb618e47f --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/plugins/PrimitiveAlgoFactory.cc @@ -0,0 +1,4 @@ +#include "FWCore/PluginManager/interface/PluginFactory.h" +#include "L1Trigger/RPCTriggerPrimitives/plugins/PrimitiveAlgoFactory.h" + +EDM_REGISTER_PLUGINFACTORY(PrimitiveAlgoFactory, "PrimitiveAlgoFactory"); diff --git a/L1Trigger/RPCTriggerPrimitives/plugins/PrimitiveAlgoFactory.h b/L1Trigger/RPCTriggerPrimitives/plugins/PrimitiveAlgoFactory.h new file mode 100644 index 0000000000000..1bb8aec5434ec --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/plugins/PrimitiveAlgoFactory.h @@ -0,0 +1,9 @@ +#ifndef L1Trigger_PrimitiveAlgoFactory_H +#define L1Trigger_PrimitiveAlgoFactory_H + +#include "FWCore/PluginManager/interface/PluginFactory.h" +#include "RecoLocalMuon/RPCRecHit/interface/RPCRecHitBaseAlgo.h" + +typedef edmplugin::PluginFactory PrimitiveAlgoFactory; + +#endif diff --git a/L1Trigger/RPCTriggerPrimitives/plugins/PrimitivePreprocess.cc b/L1Trigger/RPCTriggerPrimitives/plugins/PrimitivePreprocess.cc new file mode 100644 index 0000000000000..0bef88e78f815 --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/plugins/PrimitivePreprocess.cc @@ -0,0 +1,157 @@ +#include "L1Trigger/RPCTriggerPrimitives/plugins/PrimitivePreprocess.h" + +PrimitivePreprocess::PrimitivePreprocess(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iConsumes) + : rpcToken_(iConsumes.consumes(iConfig.getParameter("Primitiverechitlabel"))), + processorvector_(), + Mapsource_(iConfig.getParameter("Mapsource")), + ApplyLinkBoardCut_(iConfig.getParameter("ApplyLinkBoardCut")), + LinkBoardCut_(iConfig.getParameter("LinkBoardCut")), + ClusterSizeCut_(iConfig.getParameter("ClusterSizeCut")), + theRPCMaskedStripsObj(nullptr), + theRPCDeadStripsObj(nullptr), + // Get the concrete reconstruction algo from the factory + theAlgorithm{PrimitiveAlgoFactory::get()->create(iConfig.getParameter("recAlgo"), + iConfig.getParameter("recAlgoConfig"))}, + maskSource_(MaskSource::EventSetup), + deadSource_(MaskSource::EventSetup) { + //Get LUT for linkboard map + std::ifstream inputFile(Mapsource_.fullPath().c_str(), std::ios::in); + + if (!inputFile) { + throw cms::Exception("No LUT file") << "Error: Linkboard mapping cannot be opened"; + exit(1); + } + + while (inputFile.good()) { + RPCProcessor::Map_structure temp; + inputFile >> temp.linkboard_ >> temp.linkboard_ID >> temp.chamber1_ >> temp.chamber2_; + Final_MapVector.push_back(temp); + } + Final_MapVector.pop_back(); + + inputFile.close(); + + const std::string maskSource = iConfig.getParameter("maskSource"); + + if (maskSource == "File") { + maskSource_ = MaskSource::File; + edm::FileInPath fp1 = iConfig.getParameter("maskvecfile"); + std::ifstream inputFile_1(fp1.fullPath().c_str(), std::ios::in); + if (!inputFile_1) { + std::cerr << "Masked Strips File cannot not be opened" << std::endl; + exit(1); + } + while (inputFile_1.good()) { + RPCMaskedStrips::MaskItem Item; + inputFile_1 >> Item.rawId >> Item.strip; + if (inputFile_1.good()) + MaskVec.push_back(Item); + } + inputFile_1.close(); + } + + const std::string deadSource = iConfig.getParameter("deadSource"); + + if (deadSource == "File") { + deadSource_ = MaskSource::File; + edm::FileInPath fp2 = iConfig.getParameter("deadvecfile"); + std::ifstream inputFile_2(fp2.fullPath().c_str(), std::ios::in); + if (!inputFile_2) { + std::cerr << "Dead Strips File cannot not be opened" << std::endl; + exit(1); + } + while (inputFile_2.good()) { + RPCDeadStrips::DeadItem Item; + inputFile_2 >> Item.rawId >> Item.strip; + if (inputFile_2.good()) + DeadVec.push_back(Item); + } + inputFile_2.close(); + } + + //Closing the input files +} + +PrimitivePreprocess::~PrimitivePreprocess() {} + +void PrimitivePreprocess::beginRun(const edm::EventSetup& iSetup) { + // Get masked- and dead-strip information + theRPCMaskedStripsObj = std::make_unique(); + theRPCDeadStripsObj = std::make_unique(); + + // Getting the masked-strip information + if (maskSource_ == MaskSource::EventSetup) { + edm::ESHandle readoutMaskedStrips; + iSetup.get().get(readoutMaskedStrips); + const RPCMaskedStrips* tmp_obj = readoutMaskedStrips.product(); + theRPCMaskedStripsObj->MaskVec = tmp_obj->MaskVec; + delete tmp_obj; + } + + else if (maskSource_ == MaskSource::File) { + std::vector::iterator posVec; + for (posVec = MaskVec.begin(); posVec != MaskVec.end(); ++posVec) { + RPCMaskedStrips::MaskItem Item; + Item.rawId = (*posVec).rawId; + Item.strip = (*posVec).strip; + theRPCMaskedStripsObj->MaskVec.push_back(Item); + } + } + + // Getting the dead-strip information + + if (deadSource_ == MaskSource::EventSetup) { + edm::ESHandle readoutDeadStrips; + iSetup.get().get(readoutDeadStrips); + const RPCDeadStrips* tmp_obj = readoutDeadStrips.product(); + theRPCDeadStripsObj->DeadVec = tmp_obj->DeadVec; + delete tmp_obj; + } else if (deadSource_ == MaskSource::File) { + std::vector::iterator posVec; + for (posVec = DeadVec.begin(); posVec != DeadVec.end(); ++posVec) { + RPCDeadStrips::DeadItem Item; + Item.rawId = (*posVec).rawId; + Item.strip = (*posVec).strip; + theRPCDeadStripsObj->DeadVec.push_back(Item); + } + } +} + +void PrimitivePreprocess::Preprocess(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + RPCRecHitCollection& primitivedigi) { + //loop over rpcdigis and cluster algorithm + + std::map LBName_ChamberID_Map_1; + std::map LBID_ChamberID_Map_1; + std::map LBName_ChamberID_Map_2; + std::map LBID_ChamberID_Map_2; + + std::vector::iterator it; + for (it = Final_MapVector.begin(); it != Final_MapVector.end(); it++) { + LBName_ChamberID_Map_1[(*it).chamber1_] = (*it).linkboard_; + LBID_ChamberID_Map_1[(*it).chamber1_] = (*it).linkboard_ID; + if ((*it).chamber2_ != "-") { + LBName_ChamberID_Map_2[(*it).chamber2_] = (*it).linkboard_; + LBID_ChamberID_Map_2[(*it).chamber2_] = (*it).linkboard_ID; + } + } + // map_2 is only necessary for barrel + + for (auto& iterator_ : processorvector_) { + iterator_.Process(iEvent, + iSetup, + rpcToken_, + primitivedigi, + theRPCMaskedStripsObj, + theRPCDeadStripsObj, + theAlgorithm, + LBName_ChamberID_Map_1, + LBID_ChamberID_Map_1, + LBName_ChamberID_Map_2, + LBID_ChamberID_Map_2, + ApplyLinkBoardCut_, + LinkBoardCut_, + ClusterSizeCut_); + } +} diff --git a/L1Trigger/RPCTriggerPrimitives/plugins/PrimitivePreprocess.h b/L1Trigger/RPCTriggerPrimitives/plugins/PrimitivePreprocess.h new file mode 100644 index 0000000000000..604cab2754929 --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/plugins/PrimitivePreprocess.h @@ -0,0 +1,71 @@ +#ifndef L1Trigger_RPCTriggerPrimitives_PrimitivePreprocess_h +#define L1Trigger_RPCTriggerPrimitives_PrimitivePreprocess_h + +#include "DataFormats/MuonDetId/interface/RPCDetId.h" +#include "DataFormats/RPCDigi/interface/RPCDigiCollection.h" +#include "DataFormats/RPCRecHit/interface/RPCRecHit.h" +#include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/PluginManager/interface/PluginFactory.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "CondFormats/RPCObjects/interface/RPCMaskedStrips.h" +#include "CondFormats/RPCObjects/interface/RPCDeadStrips.h" +#include "CondFormats/DataRecord/interface/RPCMaskedStripsRcd.h" +#include "CondFormats/DataRecord/interface/RPCDeadStripsRcd.h" + +#include "Geometry/RPCGeometry/interface/RPCRoll.h" +#include "Geometry/RPCGeometry/interface/RPCGeometry.h" +#include "Geometry/Records/interface/MuonGeometryRecord.h" + +#include "RecoLocalMuon/RPCRecHit/interface/RPCRecHitBaseAlgo.h" + +#include "L1Trigger/RPCTriggerPrimitives/plugins/PrimitiveAlgoFactory.h" +#include "L1Trigger/RPCTriggerPrimitives/plugins/RPCProcessor.h" + +#include +#include +#include + +class PrimitivePreprocess { +public: + explicit PrimitivePreprocess(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iConsumes); + + ~PrimitivePreprocess(); + + void beginRun(const edm::EventSetup&); + + void Preprocess(const edm::Event& iEvent, const edm::EventSetup& iSetup, RPCRecHitCollection& primitivedigi); + +private: + const edm::EDGetTokenT rpcToken_; + std::array processorvector_; + + edm::FileInPath Mapsource_; + bool ApplyLinkBoardCut_; + int LinkBoardCut_; + int ClusterSizeCut_; + + std::vector Final_MapVector; + + //masking from rpcrechit module + + std::vector MaskVec; + std::vector DeadVec; + + std::unique_ptr theRPCMaskedStripsObj; + // Object with mask-strips-vector for all the RPC Detectors + + std::unique_ptr theRPCDeadStripsObj; + // Object with dead-strips-vector for all the RPC Detectors + + // The reconstruction algorithm + std::unique_ptr theAlgorithm; + + enum class MaskSource { File, EventSetup } maskSource_, deadSource_; +}; +#endif diff --git a/L1Trigger/RPCTriggerPrimitives/plugins/RPCProcessor.cc b/L1Trigger/RPCTriggerPrimitives/plugins/RPCProcessor.cc new file mode 100644 index 0000000000000..961c0ff1b1cac --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/plugins/RPCProcessor.cc @@ -0,0 +1,288 @@ +#include "L1Trigger/RPCTriggerPrimitives/plugins/RPCProcessor.h" + +RPCProcessor::RPCProcessor() {} + +RPCProcessor::~RPCProcessor() {} + +void RPCProcessor::Process(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + const edm::EDGetToken& RPCDigiToken, + RPCRecHitCollection& primitivedigi, + std::unique_ptr& theRPCMaskedStripsObj, + std::unique_ptr& theRPCDeadStripsObj, + std::unique_ptr& theAlgo, + std::map LBName_ChamberID_Map_1, + std::map LBID_ChamberID_Map_1, + std::map LBName_ChamberID_Map_2, + std::map LBID_ChamberID_Map_2, + bool ApplyLinkBoardCut_, + int LinkboardCut, + int ClusterSizeCut) const { + // Get the RPC Geometry + edm::ESHandle rpcGeom; + iSetup.get().get(rpcGeom); + // Get the RPC Digis + edm::Handle rpcdigis; + iEvent.getByToken(RPCDigiToken, rpcdigis); + // Pass the EventSetup to the algo + theAlgo->setES(iSetup); + + std::map FirstLinkBarrel; + std::map FirstLinkEndCap; + FirstLinkBarrel.clear(); + FirstLinkEndCap.clear(); + + bool PassLinkCutBarrel = true; + bool PassLinkCutEndCap = true; + + for (auto rpcdgIt = rpcdigis->begin(); rpcdgIt != rpcdigis->end(); ++rpcdgIt) { + // The layerId + const RPCDetId& rpcId = (*rpcdgIt).first; + + // Get the GeomDet from the setup + const RPCRoll* roll = rpcGeom->roll(rpcId); + if (roll == nullptr) { + edm::LogError("BadDigiInput") << "Failed to find RPCRoll for ID " << rpcId; + continue; + } + + // Get the iterators over the digis associated with this LayerId + const RPCDigiCollection::Range& range = (*rpcdgIt).second; + + RollMask mask; + const int rawId = rpcId.rawId(); + + for (const auto& tomask : theRPCMaskedStripsObj->MaskVec) { + if (tomask.rawId == rawId) { + const int bit = tomask.strip; + mask.set(bit - 1); + } + } + + for (const auto& tomask : theRPCDeadStripsObj->DeadVec) { + if (tomask.rawId == rawId) { + const int bit = tomask.strip; + mask.set(bit - 1); + } + } + + // Call the reconstruction algorithm + edm::OwnVector recHits = theAlgo->reconstruct(*roll, rpcId, range, mask); + + // LocalError tmpErr; + // LocalPoint point; + // auto digi_pointer = std::make_shared( RPCRecHit(rpcId, 0, 0, 0, point, tmpErr) ); + // recHits.push_back(*digi_pointer.get()); + + // Apply extra Cuts section. + + //Final rechit vector + edm::OwnVector recHit_output; + + //Loop over the recHit vector + for (auto& own : recHits) { + const RPCDetId& rpcId_ = own.rpcId(); + const int region_ = rpcId_.region(); + const int ring_ = rpcId_.ring(); + const int station_ = rpcId_.station(); + const int sector_ = rpcId_.sector(); + const int subsector_ = rpcId_.subsector(); + const int layer_ = rpcId_.layer(); + const int roll_eta_ = rpcId_.roll(); + + //Apply linkboard cut + if (ApplyLinkBoardCut_ == true) { + std::string StringBarrel = ""; + std::string StringEndCap = ""; + + std::string LBNameEndCap = ""; + std::string LBNameBarrel = ""; + + /// Region id: 0 for Barrel, +/-1 For +/- Endcap + if (region_ == 0) { + StringBarrel = GetStringBarrel(ring_, station_, sector_, layer_, subsector_, roll_eta_); + std::string namemap1 = LBName_ChamberID_Map_1[StringBarrel]; + std::string namemap2 = LBName_ChamberID_Map_2[StringBarrel]; + LBNameBarrel = namemap1 + namemap2; + + } else { + //ChamberID only for EndCap region + int nsub = 6; + (ring_ == 1 && station_ > 1) ? nsub = 3 : nsub = 6; + const int chamberID = subsector_ + nsub * (sector_ - 1); + + StringEndCap = GetStringEndCap(station_, ring_, chamberID); + //Getting linkboard name from map + LBNameEndCap = LBName_ChamberID_Map_1[StringEndCap]; + } + + //maximum two cluster per linkboard + if (region_ == 0) { //For Barrel + + std::map::iterator it; + it = FirstLinkBarrel.find(LBNameBarrel); + + int repetitions_Barrel = 0; + if (it == FirstLinkBarrel.end()) { + FirstLinkBarrel[LBNameBarrel] = 1; + } else if (it != FirstLinkBarrel.end()) { + repetitions_Barrel = FirstLinkBarrel[LBNameBarrel]; + FirstLinkBarrel[LBNameBarrel] = repetitions_Barrel + 1; + } + + PassLinkCutBarrel = ApplyLinkBoardCut(FirstLinkBarrel[LBNameBarrel], LinkboardCut); + if (PassLinkCutBarrel) + recHit_output.push_back(own); + + } + + else { //For endcap + + std::map::iterator it; + it = FirstLinkEndCap.find(LBNameEndCap); + + int repetitions_EndCap = 0; + if (it == FirstLinkEndCap.end()) { + FirstLinkEndCap[LBNameEndCap] = 1; + } else if (it != FirstLinkEndCap.end()) { + repetitions_EndCap = FirstLinkEndCap[LBNameEndCap]; + FirstLinkEndCap[LBNameEndCap] = repetitions_EndCap + 1; + } + PassLinkCutEndCap = ApplyLinkBoardCut(FirstLinkEndCap[LBNameEndCap], LinkboardCut); + if (PassLinkCutEndCap) + recHit_output.push_back(own); + } + + } else + recHit_output = recHits; + + } //loop over temporal recHit vector + + if (!recHit_output.empty()) { // Just to make sure + // clustersize cut: + recHit_output = ApplyClusterSizeCut(recHit_output, ClusterSizeCut); + primitivedigi.put(rpcId, recHit_output.begin(), recHit_output.end()); + } + + } // end for loop in RpcDigis +} + +edm::OwnVector RPCProcessor::ApplyClusterSizeCut(const edm::OwnVector recHits_, + int ClusterSizeCut_) { + edm::OwnVector final_; + + for (auto& own : recHits_) { + bool passcut = true; + if (own.clusterSize() > ClusterSizeCut_) { + passcut = false; + } + if (passcut) + final_.push_back(own); + } + + return final_; +} + +bool RPCProcessor::ApplyLinkBoardCut(int NClusters, int LinkboardCut) { + bool passCutsize = true; + if (NClusters > LinkboardCut) + passCutsize = false; + + return passCutsize; +} + +std::string RPCProcessor::GetStringBarrel(const int ring_, + const int station_, + const int sector_, + const int layer_, + const int subsector_, + const int roll_) const { + std::string point = ""; + std::map Wheel; + Wheel[-2] = "W-2/"; + Wheel[-1] = "W-1/"; + Wheel[0] = "W0/"; + Wheel[1] = "W+1/"; + Wheel[2] = "W+2/"; + + point += Wheel[ring_]; + + std::map Station; + Station[1] = "RB1"; + Station[2] = "RB2"; + Station[3] = "RB3"; + Station[4] = "RB4"; + + point += Station[station_]; + + std::map Layer; + Layer[1] = "in"; + Layer[2] = "out"; + //layer 1 is the inner chamber and layer 2 is the outer chamber + if (station_ == 1 || station_ == 2) + point += Layer[layer_]; + + point += "/"; + + // Including the sector + point += std::to_string(sector_); + + //Taken from CondFormats/RPCObjects/src/ChamberLocationSpec.cc + + std::map SubsecFour; + SubsecFour[1] = "--"; + SubsecFour[2] = "-"; + SubsecFour[3] = "+"; + SubsecFour[4] = "++"; + + std::map SubsecTwo; + SubsecTwo[1] = "-"; + SubsecTwo[2] = "+"; + + if (station_ == 3 || station_ == 4) { + if (station_ == 4 && sector_ == 4) { + point += SubsecFour[subsector_]; + } + + else if ((station_ == 4) && (sector_ == 9 || sector_ == 11)) { + point += ""; + } + + else + point += SubsecTwo[subsector_]; + } + + //Taken from DataFormats/MuonDetId/src/RPCDetId.cc + + std::map ROLL; + ROLL[1] = "Backward"; + ROLL[2] = "Central"; + ROLL[3] = "Forward"; + + point += ROLL[roll_]; + + return point; +} + +std::string RPCProcessor::GetStringEndCap(const int station_, const int ring_, const int chamberID_) const { + std::string point = ""; + //Including station number + std::map Station; + Station[-4] = "RE-4"; + Station[-3] = "RE-3"; + Station[-2] = "RE-2"; + Station[-1] = "RE-1"; + Station[1] = "RE+1"; + Station[2] = "RE+2"; + Station[3] = "RE+3"; + Station[4] = "RE+4"; + + point += Station[station_]; + + //Including ring number + point += "/" + std::to_string(ring_); + //Including chamberID number + point += "/" + std::to_string(chamberID_); + + return point; +} diff --git a/L1Trigger/RPCTriggerPrimitives/plugins/RPCProcessor.h b/L1Trigger/RPCTriggerPrimitives/plugins/RPCProcessor.h new file mode 100644 index 0000000000000..1dc2dcb94d36b --- /dev/null +++ b/L1Trigger/RPCTriggerPrimitives/plugins/RPCProcessor.h @@ -0,0 +1,85 @@ +#ifndef L1Trigger_RPCTriggerPrimitives_RPCProcessor_h +#define L1Trigger_RPCTriggerPrimitives_RPCProcessor_h + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "DataFormats/MuonDetId/interface/RPCDetId.h" +#include "DataFormats/RPCDigi/interface/RPCDigiCollection.h" +#include "DataFormats/RPCRecHit/interface/RPCRecHit.h" + +#include "DataFormats/RPCRecHit/interface/RPCRecHit.h" +#include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h" + +#include "Geometry/RPCGeometry/interface/RPCRoll.h" +#include "Geometry/RPCGeometry/interface/RPCGeometry.h" +#include "Geometry/Records/interface/MuonGeometryRecord.h" + +#include "RecoLocalMuon/RPCRecHit/interface/RPCRecHitAlgoFactory.h" + +#include "CondFormats/DataRecord/interface/RPCMaskedStripsRcd.h" +#include "CondFormats/DataRecord/interface/RPCDeadStripsRcd.h" +#include "CondFormats/RPCObjects/interface/RPCMaskedStrips.h" +#include "CondFormats/RPCObjects/interface/RPCDeadStrips.h" +#include "CondFormats/Serialization/interface/Serializable.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class RPCProcessor { +public: + explicit RPCProcessor(); + ~RPCProcessor(); + + struct Map_structure { + std::string linkboard_; + std::string linkboard_ID; + std::string chamber1_; + std::string chamber2_; + COND_SERIALIZABLE; + }; + + void Process(const edm::Event& iEvent, + const edm::EventSetup& iSetup, + const edm::EDGetToken& RPCDigiToken, + RPCRecHitCollection& primitivedigi, + std::unique_ptr& theRPCMaskedStripsObj, + std::unique_ptr& theRPCDeadStripsObj, + std::unique_ptr& theAlgo, + std::map LBName_ChamberID_Map_1, + std::map LBID_ChamberID_Map_1, + std::map LBName_ChamberID_Map_2, + std::map LBID_ChamberID_Map_2, + bool ApplyLinkBoardCut_, + int LinkboardCut, + int ClusterSizeCut) const; + + static edm::OwnVector ApplyClusterSizeCut(const edm::OwnVector recHits_, int ClusterSizeCut_); + static bool ApplyLinkBoardCut(int NClusters, int LinkboardCut); + + std::vector const& GetMapVector() const { return MapVec; } + std::vector MapVec; + + std::string GetStringBarrel(const int ring_, + const int station_, + const int sector_, + const int layer_, + const int subsector_, + const int roll_) const; + std::string GetStringEndCap(const int station_, const int ring_, const int chamberID_) const; + + COND_SERIALIZABLE; + +private: +}; +#endif From a446d0027ecb9db6e4958505ddaa92b00fa6698a Mon Sep 17 00:00:00 2001 From: Manuel Segura Date: Wed, 3 Jul 2019 23:15:21 +0200 Subject: [PATCH 10/11] Trigger primitive phase2 @maseguracern BuildFile_ --- L1Trigger/RPCTriggerPrimitives/BuildFile.xml | 31 ------------------- .../plugins/BuildFile.xml | 31 +++++++++++++++++++ 2 files changed, 31 insertions(+), 31 deletions(-) delete mode 100644 L1Trigger/RPCTriggerPrimitives/BuildFile.xml diff --git a/L1Trigger/RPCTriggerPrimitives/BuildFile.xml b/L1Trigger/RPCTriggerPrimitives/BuildFile.xml deleted file mode 100644 index f2fdfaaab7deb..0000000000000 --- a/L1Trigger/RPCTriggerPrimitives/BuildFile.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/L1Trigger/RPCTriggerPrimitives/plugins/BuildFile.xml b/L1Trigger/RPCTriggerPrimitives/plugins/BuildFile.xml index 98a3106ca3f15..c3213518960ac 100644 --- a/L1Trigger/RPCTriggerPrimitives/plugins/BuildFile.xml +++ b/L1Trigger/RPCTriggerPrimitives/plugins/BuildFile.xml @@ -3,3 +3,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 5dc9b16d8dd8a5aef0444b6b0fcf2bcf5a37a44c Mon Sep 17 00:00:00 2001 From: Manuel Segura Date: Thu, 4 Jul 2019 15:46:17 +0200 Subject: [PATCH 11/11] Trigger primitive phase2 @maseguracern BuildFile fix --- .../plugins/BuildFile.xml | 45 +++++++------------ .../plugins/RPCProcessor.h | 3 -- 2 files changed, 15 insertions(+), 33 deletions(-) diff --git a/L1Trigger/RPCTriggerPrimitives/plugins/BuildFile.xml b/L1Trigger/RPCTriggerPrimitives/plugins/BuildFile.xml index c3213518960ac..80199d6c84f41 100644 --- a/L1Trigger/RPCTriggerPrimitives/plugins/BuildFile.xml +++ b/L1Trigger/RPCTriggerPrimitives/plugins/BuildFile.xml @@ -1,36 +1,21 @@ + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/L1Trigger/RPCTriggerPrimitives/plugins/RPCProcessor.h b/L1Trigger/RPCTriggerPrimitives/plugins/RPCProcessor.h index 1dc2dcb94d36b..2f7a48567649d 100644 --- a/L1Trigger/RPCTriggerPrimitives/plugins/RPCProcessor.h +++ b/L1Trigger/RPCTriggerPrimitives/plugins/RPCProcessor.h @@ -31,10 +31,7 @@ #include #include #include -#include -#include #include -#include class RPCProcessor { public: