diff --git a/LumiBlock/LumiBlockComps/CMakeLists.txt b/LumiBlock/LumiBlockComps/CMakeLists.txt
index 32c73ffcaa3ff69998dabb9b2d85456c947c7a4e..f88079adc2ddf877b213644ab39cc7dda3dafcc1 100644
--- a/LumiBlock/LumiBlockComps/CMakeLists.txt
+++ b/LumiBlock/LumiBlockComps/CMakeLists.txt
@@ -108,3 +108,8 @@ atlas_add_test( LBDurationCondAlgConfig_test
atlas_add_test( TrigLiveFractionCondAlgConfig_test
SCRIPT python -m LumiBlockComps.TrigLiveFractionCondAlgConfig
EXTRA_PATTERNS "-s ComponentAccumulator|^---|^IOVDbSvc" )
+
+
+atlas_add_test( BunchCrossingCondAlg
+ SCRIPT python ${CMAKE_CURRENT_SOURCE_DIR}/python/BunchCrossingCondAlgTest.py
+ POST_EXEC_SCRIPT " /usr/bin/diff BCData.txt ${CMAKE_CURRENT_SOURCE_DIR}/share/BCData.txt.ref > BC_diff.log " )
diff --git a/LumiBlock/LumiBlockComps/python/BunchCrossingCondAlgConfig.py b/LumiBlock/LumiBlockComps/python/BunchCrossingCondAlgConfig.py
new file mode 100644
index 0000000000000000000000000000000000000000..95f98be5f44bf5f1a49fa01413bf86b6f7ae7d15
--- /dev/null
+++ b/LumiBlock/LumiBlockComps/python/BunchCrossingCondAlgConfig.py
@@ -0,0 +1,82 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+#from AthenaConfiguration.MainServicesConfig import MainServicesSerial
+
+
+def BunchCrossingCondAlgCfg(configFlags):
+ from LumiBlockComps.LumiBlockCompsConf import BunchCrossingCondAlg
+ from IOVDbSvc.IOVDbSvcConfig import addFolders
+
+ result=ComponentAccumulator()
+
+ run1=(configFlags.IOVDb.DatabaseInstance=='COMP200')
+
+ folder = '/TDAQ/OLC/LHC/FILLPARAMS'
+ result.merge(addFolders(configFlags,folder,'TDAQ',className = 'AthenaAttributeList'))
+
+
+ alg = BunchCrossingCondAlg(Run1=run1,
+ FillParamsFolderKey =folder )
+
+ result.addCondAlgo(alg)
+
+ return result
+
+
+
+
+if __name__=="__main__":
+ from AthenaCommon.Configurable import Configurable
+ Configurable.configurableRun3Behavior=1
+
+ from AthenaConfiguration.AllConfigFlags import ConfigFlags
+
+
+ from AthenaConfiguration.MainServicesConfig import MainServicesSerialCfg
+
+ ConfigFlags.IOVDb.DatabaseInstance="CONDBR2"
+ ConfigFlags.Input.isMC=False
+ ConfigFlags.IOVDb.GlobalTag="CONDBR2-BLKPA-2017-05"
+ ConfigFlags.lock()
+
+
+
+
+ result=MainServicesSerialCfg()
+
+
+ from McEventSelector.McEventSelectorConf import McEventSelector,McCnvSvc
+ from GaudiSvc.GaudiSvcConf import EvtPersistencySvc
+
+ #event & time-stamp from the q431 test input
+ mcevtsel=McEventSelector(RunNumber=330470,
+ EventsPerRun=1,
+ FirstEvent=1183722158,
+ FirstLB=310,
+ EventsPerLB=1,
+ InitialTimeStamp=1500867637,
+ TimeStampInterval=1
+ )
+
+ result.addService(mcevtsel)
+ result.setAppProperty("EvtSel",mcevtsel.getFullJobOptName())
+
+ mccnvsvc=McCnvSvc()
+ result.addService(mccnvsvc)
+
+
+ result.addService(EvtPersistencySvc("EventPersistencySvc",CnvServices=[mccnvsvc.getFullJobOptName(),]))
+
+ result.merge(BunchCrossingCondAlgCfg(ConfigFlags))
+
+
+ from LumiBlockComps.LumiBlockCompsConf import BunchCrossingCondTest
+ result.addEventAlgo(BunchCrossingCondTest(FileName="BCData1.txt"))
+
+ result.run(1)
+
+
+ #f=open("test.pkl","w")
+ #result.store(f)
+ #f.close()
diff --git a/LumiBlock/LumiBlockComps/python/BunchCrossingCondAlgDefault.py b/LumiBlock/LumiBlockComps/python/BunchCrossingCondAlgDefault.py
new file mode 100644
index 0000000000000000000000000000000000000000..ed7eb9d2f5d8e879d5ffff435356c94eaf96b602
--- /dev/null
+++ b/LumiBlock/LumiBlockComps/python/BunchCrossingCondAlgDefault.py
@@ -0,0 +1,33 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
+from AthenaCommon.AlgSequence import AthSequencer
+#from AthenaCommon.Logging import logging
+
+
+def BunchCrossingCondAlgDefault():
+ name = 'BunchCrossingCondAlgDefault'
+ condSeq = AthSequencer ('AthCondSeq')
+
+ if hasattr (condSeq, name):
+ return getattr (condSeq, name)
+
+
+ from LumiBlockComps.LumiBlockCompsConf import BunchCrossingCondAlg
+ from IOVDbSvc.CondDB import conddb
+
+ run1=(conddb.dbdata == 'COMP200')
+
+
+ folder = '/TDAQ/OLC/LHC/FILLPARAMS'
+
+ # Mistakenly created as multi-version folder, must specify HEAD
+ conddb.addFolderWithTag('TDAQ', folder, 'HEAD',
+ className = 'AthenaAttributeList')
+
+ alg = BunchCrossingCondAlg(name,
+ Run1=run1,
+ FillParamsFolderKey =folder )
+
+ condSeq += alg
+
+ return alg
diff --git a/LumiBlock/LumiBlockComps/python/BunchCrossingCondAlgTest.py b/LumiBlock/LumiBlockComps/python/BunchCrossingCondAlgTest.py
new file mode 100644
index 0000000000000000000000000000000000000000..eb698cdf28862e72b3dddc8e17fce7163e37ebd7
--- /dev/null
+++ b/LumiBlock/LumiBlockComps/python/BunchCrossingCondAlgTest.py
@@ -0,0 +1,127 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+from future import standard_library
+standard_library.install_aliases()
+
+import sys
+from LumiBlockComps.BunchCrossingCondAlgConfig import BunchCrossingCondAlgCfg
+
+from LumiBlockComps.dummyLHCFillDB import createSqlite,fillFolder
+
+
+def createBCMask1():
+ mask=[]
+ #pre-fill with zero
+ for i in range(0,3564):
+ mask.append(0x0)
+
+ #A train across the wrap-around:
+ for i in range (0,25):
+ mask[i]=0x3
+
+ for i in range (3550,3564):
+ mask[i]=0x3
+
+ #A short sequence of bunches that doesn't qualify as train
+ for i in range (1000,1030):
+
+ mask[i]=0x3
+ return mask
+
+
+def createBCMask2():
+ mask=[]
+ #pre-fill with zero
+ for i in range(0,3564):
+ mask.append(0x0)
+
+ t8b4e=[0x3,0x3,0x3,0x3, 0x3,0x3,0x3,0x3, 0x0,0x0,0x0,0x0]
+
+ for i in range(0,20):
+ #create a train of 20 8be4 groups start
+ mask[100+i*12:100+(i+1)*12]=t8b4e
+
+ return mask
+
+
+
+
+#First, create a dummy database to work with:
+
+#Copy the standard db content for one run (330470, LB301) to IOV 1 - 2
+copycmd='AtlCoolCopy "COOLONL_TDAQ/CONDBR2" "sqlite://;schema=test.db;dbname=CONDBR2" -c -f /TDAQ/OLC/LHC/FILLPARAMS -ts 1500867637 -tu 1500867638 -a -nts 0 -ntu 2'
+
+from subprocess import getstatusoutput
+stat,out=getstatusoutput(copycmd)
+
+if (stat):
+ print(out)
+ sys.exit(-1)
+
+
+db,folder=createSqlite("test.db")
+
+d1=createBCMask1()
+d2=createBCMask2()
+
+onesec=1000000000
+
+#Add two dummy masks with iov 2-3 and 3-4
+fillFolder(folder,d1,iovMin=2*onesec,iovMax=3*onesec)
+
+fillFolder(folder,d2,3*onesec,4*onesec)
+
+db.closeDatabase()
+
+
+
+from AthenaCommon.Configurable import Configurable
+Configurable.configurableRun3Behavior=1
+
+from AthenaConfiguration.AllConfigFlags import ConfigFlags
+
+
+from AthenaConfiguration.MainServicesConfig import MainServicesSerialCfg
+
+ConfigFlags.IOVDb.DatabaseInstance="CONDBR2"
+ConfigFlags.Input.isMC=False
+ConfigFlags.IOVDb.GlobalTag="CONDBR2-BLKPA-2017-05"
+ConfigFlags.lock()
+
+result=MainServicesSerialCfg()
+
+
+from McEventSelector.McEventSelectorConf import McEventSelector,McCnvSvc
+from GaudiSvc.GaudiSvcConf import EvtPersistencySvc
+
+mcevtsel=McEventSelector(RunNumber=330470,
+ EventsPerRun=1,
+ FirstEvent=1183722158,
+ FirstLB=310,
+ EventsPerLB=1,
+ #InitialTimeStamp=1500867637,
+ InitialTimeStamp=1,
+ TimeStampInterval=1
+ )
+
+result.addService(mcevtsel)
+result.setAppProperty("EvtSel",mcevtsel.getFullJobOptName())
+
+mccnvsvc=McCnvSvc()
+result.addService(mccnvsvc)
+
+
+result.addService(EvtPersistencySvc("EventPersistencySvc",CnvServices=[mccnvsvc.getFullJobOptName(),]))
+
+result.merge(BunchCrossingCondAlgCfg(ConfigFlags))
+
+result.getService("IOVDbSvc").Folders=["sqlite://;schema=test.db;dbname=CONDBR2HEAD/TDAQ/OLC/LHC/FILLPARAMS"]
+result.getCondAlgo("BunchCrossingCondAlg").OutputLevel=1
+
+from LumiBlockComps.LumiBlockCompsConf import BunchCrossingCondTest
+result.addEventAlgo(BunchCrossingCondTest(FileName="BCData.txt",compact=True))
+
+
+#result.setDebugStage("exec")
+
+result.run(3)
+
diff --git a/LumiBlock/LumiBlockComps/python/dummyLHCFillDB.py b/LumiBlock/LumiBlockComps/python/dummyLHCFillDB.py
new file mode 100644
index 0000000000000000000000000000000000000000..ad7149f8be6bc55a3848c0afcf47fe8ebd3819df
--- /dev/null
+++ b/LumiBlock/LumiBlockComps/python/dummyLHCFillDB.py
@@ -0,0 +1,127 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+from PyCool import cool
+import ROOT
+import os
+
+
+
+def createSqlite(sqliteName,folderName="/TDAQ/OLC/LHC/FILLPARAMS"):
+
+ dbSvc = cool.DatabaseSvcFactory.databaseService()
+
+ if os.access(sqliteName,os.R_OK):
+ print ("UPDATING existing sqlite file %s" % sqliteName)
+ db=dbSvc.openDatabase("sqlite://;schema="+sqliteName+";dbname=CONDBR2",False)
+ else:
+ print("Creating new sqlite file %s" % sqliteName)
+ db=dbSvc.createDatabase("sqlite://;schema="+sqliteName+";dbname=CONDBR2")
+ pass
+
+ spec = cool.RecordSpecification()
+ spec.extend("Beam1Bunches",cool.StorageType.UInt32)
+ spec.extend("Beam2Bunches",cool.StorageType.UInt32)
+ spec.extend("LuminousBunches",cool.StorageType.UInt32)
+ spec.extend("BCIDmasks",cool.StorageType.Blob64k)
+ descr='timeAthenaAttributeList'
+
+ if db.existsFolder(folderName):
+ folder=db.getFolder(folderName)
+ else:
+ print("Creating COOL folder/tag %s" % (folderName))
+ #folder = db.createFolder(folderName, spec, desc, cool.FolderVersioning.MULTI_VERSION, True)
+ folderSpec = cool.FolderSpecification(cool.FolderVersioning.SINGLE_VERSION, spec)
+ folder = db.createFolder(folderName, folderSpec, descr, True)
+ pass
+
+ return db,folder
+
+def fillFolder(folder,data=[],iovMin=cool.ValidityKeyMin,iovMax=cool.ValidityKeyMax):
+
+ nB1=0
+ nB2=0
+ nColl=0
+
+ for bcid in data:
+ if (bcid & 0x1): nB1+=1
+ if (bcid & 0x2): nB2+=1
+ if (bcid & 0x3 == 0x3): nColl+=1
+ pass
+
+
+ payload=cool.Record(folder.payloadSpecification())
+
+ payload['Beam1Bunches']=nB1
+ payload['Beam2Bunches']=nB2
+ payload['LuminousBunches']=nColl
+
+ btype=getattr(ROOT,"coral::Blob")
+
+ bcmask=btype()
+ bcmask.resize(3564)
+
+ for i,d in enumerate(data):
+ bcmask[i]=d
+
+
+ payload['BCIDmasks']=bcmask
+
+
+ print("Storing CaloCondBlob object")
+ folder.storeObject(iovMin, iovMax, payload, cool.ChannelId(0))
+
+ return
+
+
+
+def createBCMask1():
+ mask=[]
+ #pre-fill with zero
+ for i in range(0,3564):
+ mask.append(0x0)
+
+ #A train across the wrap-around:
+ for i in range (0,25):
+ mask[i]=0x3
+
+ for i in range (3550,3564):
+ mask[i]=0x3
+
+ #A short sequence of bunches that doesn't qualify as train
+ for i in range (1000,1030):
+
+ mask[i]=0x3
+ return mask
+
+
+def createBCMask2():
+ mask=[]
+ #pre-fill with zero
+ for i in range(0,3564):
+ mask.append(0x0)
+
+ t8b4e=[0x3,0x3,0x3,0x3, 0x3,0x3,0x3,0x3, 0x0,0x0,0x0,0x0]
+
+ for i in range(0,20):
+ #create a train of 20 8be4 groups start
+ mask[100+i*12:100+(i+1)*12]=t8b4e
+
+ return mask
+
+
+
+
+if __name__=="__main__":
+
+
+ db,folder=createSqlite("test.db")
+
+ d1=createBCMask1()
+ d2=createBCMask2()
+
+ fillFolder(folder,d1,iovMin=cool.ValidityKey(1e6),iovMax=cool.ValidityKey(2e6))
+ fillFolder(folder,d2,iovMin=cool.ValidityKey(2e6),iovMax=cool.ValidityKey(3e6))
+
+
+ db.closeDatabase()
+
+
diff --git a/LumiBlock/LumiBlockComps/share/BCData.txt.ref b/LumiBlock/LumiBlockComps/share/BCData.txt.ref
new file mode 100644
index 0000000000000000000000000000000000000000..baad970de5815f10c0f6f090923434ef329f70a1
--- /dev/null
+++ b/LumiBlock/LumiBlockComps/share/BCData.txt.ref
@@ -0,0 +1,2809 @@
+
+Timestamp:1 ns:0
+numberOfBunchTrains=53
+numberOfUnpairedBunches= 24
+1 U 2
+2 U 2
+3 U 2
+4 U 2
+5 U 2
+6 U 2
+7 U 2
+8 U 2
+9 U 2
+10 U 2
+11 U 2
+12 U 2
+13 U1
+14 U1
+15 U1
+16 U1
+17 U1
+18 U1
+19 U1
+20 U1
+21 U1
+22 U1
+23 U1
+24 U1
+56 FT 12/0/1175
+57 FT 12/25/1150
+58 FT 12/50/1125
+59 FT 12/75/1100
+60 FT 12/100/1075
+61 FT 12/125/1050
+62 FT 12/150/1025
+63 FT 12/175/1000
+64 FT 12/200/975
+65 FT 12/225/950
+66 FT 12/250/925
+67 FT 12/275/900
+68 FT 12/300/875
+69 FT 12/325/850
+70 FT 12/350/825
+71 FT 12/375/800
+72 FT 12/400/775
+73 FT 12/425/750
+74 FT 12/450/725
+75 FT 12/475/700
+76 FT 12/500/675
+77 FT 12/525/650
+78 FT 12/550/625
+79 FT 12/575/600
+80 FT 12/600/575
+81 FT 12/625/550
+82 FT 12/650/525
+83 FT 12/675/500
+84 FT 12/700/475
+85 FT 12/725/450
+86 FT 12/750/425
+87 FT 12/775/400
+88 FT 12/800/375
+89 FT 12/825/350
+90 FT 12/850/325
+91 FT 12/875/300
+92 FT 12/900/275
+93 FT 12/925/250
+94 FT 12/950/225
+95 FT 12/975/200
+96 FT 12/1000/175
+97 FT 12/1025/150
+98 FT 12/1050/125
+99 FT 12/1075/100
+100 FT 12/1100/75
+101 FT 12/1125/50
+102 FT 12/1150/25
+103 FT 12/1175/0
+111 FT 12/0/1175
+112 FT 12/25/1150
+113 FT 12/50/1125
+114 FT 12/75/1100
+115 FT 12/100/1075
+116 FT 12/125/1050
+117 FT 12/150/1025
+118 FT 12/175/1000
+119 FT 12/200/975
+120 FT 12/225/950
+121 FT 12/250/925
+122 FT 12/275/900
+123 FT 12/300/875
+124 FT 12/325/850
+125 FT 12/350/825
+126 FT 12/375/800
+127 FT 12/400/775
+128 FT 12/425/750
+129 FT 12/450/725
+130 FT 12/475/700
+131 FT 12/500/675
+132 FT 12/525/650
+133 FT 12/550/625
+134 FT 12/575/600
+135 FT 12/600/575
+136 FT 12/625/550
+137 FT 12/650/525
+138 FT 12/675/500
+139 FT 12/700/475
+140 FT 12/725/450
+141 FT 12/750/425
+142 FT 12/775/400
+143 FT 12/800/375
+144 FT 12/825/350
+145 FT 12/850/325
+146 FT 12/875/300
+147 FT 12/900/275
+148 FT 12/925/250
+149 FT 12/950/225
+150 FT 12/975/200
+151 FT 12/1000/175
+152 FT 12/1025/150
+153 FT 12/1050/125
+154 FT 12/1075/100
+155 FT 12/1100/75
+156 FT 12/1125/50
+157 FT 12/1150/25
+158 FT 12/1175/0
+190 FT 12/0/1175
+191 FT 12/25/1150
+192 FT 12/50/1125
+193 FT 12/75/1100
+194 FT 12/100/1075
+195 FT 12/125/1050
+196 FT 12/150/1025
+197 FT 12/175/1000
+198 FT 12/200/975
+199 FT 12/225/950
+200 FT 12/250/925
+201 FT 12/275/900
+202 FT 12/300/875
+203 FT 12/325/850
+204 FT 12/350/825
+205 FT 12/375/800
+206 FT 12/400/775
+207 FT 12/425/750
+208 FT 12/450/725
+209 FT 12/475/700
+210 FT 12/500/675
+211 FT 12/525/650
+212 FT 12/550/625
+213 FT 12/575/600
+214 FT 12/600/575
+215 FT 12/625/550
+216 FT 12/650/525
+217 FT 12/675/500
+218 FT 12/700/475
+219 FT 12/725/450
+220 FT 12/750/425
+221 FT 12/775/400
+222 FT 12/800/375
+223 FT 12/825/350
+224 FT 12/850/325
+225 FT 12/875/300
+226 FT 12/900/275
+227 FT 12/925/250
+228 FT 12/950/225
+229 FT 12/975/200
+230 FT 12/1000/175
+231 FT 12/1025/150
+232 FT 12/1050/125
+233 FT 12/1075/100
+234 FT 12/1100/75
+235 FT 12/1125/50
+236 FT 12/1150/25
+237 FT 12/1175/0
+245 FT 12/0/1175
+246 FT 12/25/1150
+247 FT 12/50/1125
+248 FT 12/75/1100
+249 FT 12/100/1075
+250 FT 12/125/1050
+251 FT 12/150/1025
+252 FT 12/175/1000
+253 FT 12/200/975
+254 FT 12/225/950
+255 FT 12/250/925
+256 FT 12/275/900
+257 FT 12/300/875
+258 FT 12/325/850
+259 FT 12/350/825
+260 FT 12/375/800
+261 FT 12/400/775
+262 FT 12/425/750
+263 FT 12/450/725
+264 FT 12/475/700
+265 FT 12/500/675
+266 FT 12/525/650
+267 FT 12/550/625
+268 FT 12/575/600
+269 FT 12/600/575
+270 FT 12/625/550
+271 FT 12/650/525
+272 FT 12/675/500
+273 FT 12/700/475
+274 FT 12/725/450
+275 FT 12/750/425
+276 FT 12/775/400
+277 FT 12/800/375
+278 FT 12/825/350
+279 FT 12/850/325
+280 FT 12/875/300
+281 FT 12/900/275
+282 FT 12/925/250
+283 FT 12/950/225
+284 FT 12/975/200
+285 FT 12/1000/175
+286 FT 12/1025/150
+287 FT 12/1050/125
+288 FT 12/1075/100
+289 FT 12/1100/75
+290 FT 12/1125/50
+291 FT 12/1150/25
+292 FT 12/1175/0
+300 FT 12/0/1175
+301 FT 12/25/1150
+302 FT 12/50/1125
+303 FT 12/75/1100
+304 FT 12/100/1075
+305 FT 12/125/1050
+306 FT 12/150/1025
+307 FT 12/175/1000
+308 FT 12/200/975
+309 FT 12/225/950
+310 FT 12/250/925
+311 FT 12/275/900
+312 FT 12/300/875
+313 FT 12/325/850
+314 FT 12/350/825
+315 FT 12/375/800
+316 FT 12/400/775
+317 FT 12/425/750
+318 FT 12/450/725
+319 FT 12/475/700
+320 FT 12/500/675
+321 FT 12/525/650
+322 FT 12/550/625
+323 FT 12/575/600
+324 FT 12/600/575
+325 FT 12/625/550
+326 FT 12/650/525
+327 FT 12/675/500
+328 FT 12/700/475
+329 FT 12/725/450
+330 FT 12/750/425
+331 FT 12/775/400
+332 FT 12/800/375
+333 FT 12/825/350
+334 FT 12/850/325
+335 FT 12/875/300
+336 FT 12/900/275
+337 FT 12/925/250
+338 FT 12/950/225
+339 FT 12/975/200
+340 FT 12/1000/175
+341 FT 12/1025/150
+342 FT 12/1050/125
+343 FT 12/1075/100
+344 FT 12/1100/75
+345 FT 12/1125/50
+346 FT 12/1150/25
+347 FT 12/1175/0
+379 FT 12/0/1175
+380 FT 12/25/1150
+381 FT 12/50/1125
+382 FT 12/75/1100
+383 FT 12/100/1075
+384 FT 12/125/1050
+385 FT 12/150/1025
+386 FT 12/175/1000
+387 FT 12/200/975
+388 FT 12/225/950
+389 FT 12/250/925
+390 FT 12/275/900
+391 FT 12/300/875
+392 FT 12/325/850
+393 FT 12/350/825
+394 FT 12/375/800
+395 FT 12/400/775
+396 FT 12/425/750
+397 FT 12/450/725
+398 FT 12/475/700
+399 FT 12/500/675
+400 FT 12/525/650
+401 FT 12/550/625
+402 FT 12/575/600
+403 FT 12/600/575
+404 FT 12/625/550
+405 FT 12/650/525
+406 FT 12/675/500
+407 FT 12/700/475
+408 FT 12/725/450
+409 FT 12/750/425
+410 FT 12/775/400
+411 FT 12/800/375
+412 FT 12/825/350
+413 FT 12/850/325
+414 FT 12/875/300
+415 FT 12/900/275
+416 FT 12/925/250
+417 FT 12/950/225
+418 FT 12/975/200
+419 FT 12/1000/175
+420 FT 12/1025/150
+421 FT 12/1050/125
+422 FT 12/1075/100
+423 FT 12/1100/75
+424 FT 12/1125/50
+425 FT 12/1150/25
+426 FT 12/1175/0
+434 FT 12/0/1175
+435 FT 12/25/1150
+436 FT 12/50/1125
+437 FT 12/75/1100
+438 FT 12/100/1075
+439 FT 12/125/1050
+440 FT 12/150/1025
+441 FT 12/175/1000
+442 FT 12/200/975
+443 FT 12/225/950
+444 FT 12/250/925
+445 FT 12/275/900
+446 FT 12/300/875
+447 FT 12/325/850
+448 FT 12/350/825
+449 FT 12/375/800
+450 FT 12/400/775
+451 FT 12/425/750
+452 FT 12/450/725
+453 FT 12/475/700
+454 FT 12/500/675
+455 FT 12/525/650
+456 FT 12/550/625
+457 FT 12/575/600
+458 FT 12/600/575
+459 FT 12/625/550
+460 FT 12/650/525
+461 FT 12/675/500
+462 FT 12/700/475
+463 FT 12/725/450
+464 FT 12/750/425
+465 FT 12/775/400
+466 FT 12/800/375
+467 FT 12/825/350
+468 FT 12/850/325
+469 FT 12/875/300
+470 FT 12/900/275
+471 FT 12/925/250
+472 FT 12/950/225
+473 FT 12/975/200
+474 FT 12/1000/175
+475 FT 12/1025/150
+476 FT 12/1050/125
+477 FT 12/1075/100
+478 FT 12/1100/75
+479 FT 12/1125/50
+480 FT 12/1150/25
+481 FT 12/1175/0
+489 FT 12/0/1175
+490 FT 12/25/1150
+491 FT 12/50/1125
+492 FT 12/75/1100
+493 FT 12/100/1075
+494 FT 12/125/1050
+495 FT 12/150/1025
+496 FT 12/175/1000
+497 FT 12/200/975
+498 FT 12/225/950
+499 FT 12/250/925
+500 FT 12/275/900
+501 FT 12/300/875
+502 FT 12/325/850
+503 FT 12/350/825
+504 FT 12/375/800
+505 FT 12/400/775
+506 FT 12/425/750
+507 FT 12/450/725
+508 FT 12/475/700
+509 FT 12/500/675
+510 FT 12/525/650
+511 FT 12/550/625
+512 FT 12/575/600
+513 FT 12/600/575
+514 FT 12/625/550
+515 FT 12/650/525
+516 FT 12/675/500
+517 FT 12/700/475
+518 FT 12/725/450
+519 FT 12/750/425
+520 FT 12/775/400
+521 FT 12/800/375
+522 FT 12/825/350
+523 FT 12/850/325
+524 FT 12/875/300
+525 FT 12/900/275
+526 FT 12/925/250
+527 FT 12/950/225
+528 FT 12/975/200
+529 FT 12/1000/175
+530 FT 12/1025/150
+531 FT 12/1050/125
+532 FT 12/1075/100
+533 FT 12/1100/75
+534 FT 12/1125/50
+535 FT 12/1150/25
+536 FT 12/1175/0
+568 FT 12/0/1175
+569 FT 12/25/1150
+570 FT 12/50/1125
+571 FT 12/75/1100
+572 FT 12/100/1075
+573 FT 12/125/1050
+574 FT 12/150/1025
+575 FT 12/175/1000
+576 FT 12/200/975
+577 FT 12/225/950
+578 FT 12/250/925
+579 FT 12/275/900
+580 FT 12/300/875
+581 FT 12/325/850
+582 FT 12/350/825
+583 FT 12/375/800
+584 FT 12/400/775
+585 FT 12/425/750
+586 FT 12/450/725
+587 FT 12/475/700
+588 FT 12/500/675
+589 FT 12/525/650
+590 FT 12/550/625
+591 FT 12/575/600
+592 FT 12/600/575
+593 FT 12/625/550
+594 FT 12/650/525
+595 FT 12/675/500
+596 FT 12/700/475
+597 FT 12/725/450
+598 FT 12/750/425
+599 FT 12/775/400
+600 FT 12/800/375
+601 FT 12/825/350
+602 FT 12/850/325
+603 FT 12/875/300
+604 FT 12/900/275
+605 FT 12/925/250
+606 FT 12/950/225
+607 FT 12/975/200
+608 FT 12/1000/175
+609 FT 12/1025/150
+610 FT 12/1050/125
+611 FT 12/1075/100
+612 FT 12/1100/75
+613 FT 12/1125/50
+614 FT 12/1150/25
+615 FT 12/1175/0
+623 FT 12/0/1175
+624 FT 12/25/1150
+625 FT 12/50/1125
+626 FT 12/75/1100
+627 FT 12/100/1075
+628 FT 12/125/1050
+629 FT 12/150/1025
+630 FT 12/175/1000
+631 FT 12/200/975
+632 FT 12/225/950
+633 FT 12/250/925
+634 FT 12/275/900
+635 FT 12/300/875
+636 FT 12/325/850
+637 FT 12/350/825
+638 FT 12/375/800
+639 FT 12/400/775
+640 FT 12/425/750
+641 FT 12/450/725
+642 FT 12/475/700
+643 FT 12/500/675
+644 FT 12/525/650
+645 FT 12/550/625
+646 FT 12/575/600
+647 FT 12/600/575
+648 FT 12/625/550
+649 FT 12/650/525
+650 FT 12/675/500
+651 FT 12/700/475
+652 FT 12/725/450
+653 FT 12/750/425
+654 FT 12/775/400
+655 FT 12/800/375
+656 FT 12/825/350
+657 FT 12/850/325
+658 FT 12/875/300
+659 FT 12/900/275
+660 FT 12/925/250
+661 FT 12/950/225
+662 FT 12/975/200
+663 FT 12/1000/175
+664 FT 12/1025/150
+665 FT 12/1050/125
+666 FT 12/1075/100
+667 FT 12/1100/75
+668 FT 12/1125/50
+669 FT 12/1150/25
+670 FT 12/1175/0
+678 FT 12/0/1175
+679 FT 12/25/1150
+680 FT 12/50/1125
+681 FT 12/75/1100
+682 FT 12/100/1075
+683 FT 12/125/1050
+684 FT 12/150/1025
+685 FT 12/175/1000
+686 FT 12/200/975
+687 FT 12/225/950
+688 FT 12/250/925
+689 FT 12/275/900
+690 FT 12/300/875
+691 FT 12/325/850
+692 FT 12/350/825
+693 FT 12/375/800
+694 FT 12/400/775
+695 FT 12/425/750
+696 FT 12/450/725
+697 FT 12/475/700
+698 FT 12/500/675
+699 FT 12/525/650
+700 FT 12/550/625
+701 FT 12/575/600
+702 FT 12/600/575
+703 FT 12/625/550
+704 FT 12/650/525
+705 FT 12/675/500
+706 FT 12/700/475
+707 FT 12/725/450
+708 FT 12/750/425
+709 FT 12/775/400
+710 FT 12/800/375
+711 FT 12/825/350
+712 FT 12/850/325
+713 FT 12/875/300
+714 FT 12/900/275
+715 FT 12/925/250
+716 FT 12/950/225
+717 FT 12/975/200
+718 FT 12/1000/175
+719 FT 12/1025/150
+720 FT 12/1050/125
+721 FT 12/1075/100
+722 FT 12/1100/75
+723 FT 12/1125/50
+724 FT 12/1150/25
+725 FT 12/1175/0
+761 FT 12/0/1175
+762 FT 12/25/1150
+763 FT 12/50/1125
+764 FT 12/75/1100
+765 FT 12/100/1075
+766 FT 12/125/1050
+767 FT 12/150/1025
+768 FT 12/175/1000
+769 FT 12/200/975
+770 FT 12/225/950
+771 FT 12/250/925
+772 FT 12/275/900
+773 FT 12/300/875
+774 FT 12/325/850
+775 FT 12/350/825
+776 FT 12/375/800
+777 FT 12/400/775
+778 FT 12/425/750
+779 FT 12/450/725
+780 FT 12/475/700
+781 FT 12/500/675
+782 FT 12/525/650
+783 FT 12/550/625
+784 FT 12/575/600
+785 FT 12/600/575
+786 FT 12/625/550
+787 FT 12/650/525
+788 FT 12/675/500
+789 FT 12/700/475
+790 FT 12/725/450
+791 FT 12/750/425
+792 FT 12/775/400
+793 FT 12/800/375
+794 FT 12/825/350
+795 FT 12/850/325
+796 FT 12/875/300
+797 FT 12/900/275
+798 FT 12/925/250
+799 FT 12/950/225
+800 FT 12/975/200
+801 FT 12/1000/175
+802 FT 12/1025/150
+803 FT 12/1050/125
+804 FT 12/1075/100
+805 FT 12/1100/75
+806 FT 12/1125/50
+807 FT 12/1150/25
+808 FT 12/1175/0
+816 FT 12/0/1175
+817 FT 12/25/1150
+818 FT 12/50/1125
+819 FT 12/75/1100
+820 FT 12/100/1075
+821 FT 12/125/1050
+822 FT 12/150/1025
+823 FT 12/175/1000
+824 FT 12/200/975
+825 FT 12/225/950
+826 FT 12/250/925
+827 FT 12/275/900
+828 FT 12/300/875
+829 FT 12/325/850
+830 FT 12/350/825
+831 FT 12/375/800
+832 FT 12/400/775
+833 FT 12/425/750
+834 FT 12/450/725
+835 FT 12/475/700
+836 FT 12/500/675
+837 FT 12/525/650
+838 FT 12/550/625
+839 FT 12/575/600
+840 FT 12/600/575
+841 FT 12/625/550
+842 FT 12/650/525
+843 FT 12/675/500
+844 FT 12/700/475
+845 FT 12/725/450
+846 FT 12/750/425
+847 FT 12/775/400
+848 FT 12/800/375
+849 FT 12/825/350
+850 FT 12/850/325
+851 FT 12/875/300
+852 FT 12/900/275
+853 FT 12/925/250
+854 FT 12/950/225
+855 FT 12/975/200
+856 FT 12/1000/175
+857 FT 12/1025/150
+858 FT 12/1050/125
+859 FT 12/1075/100
+860 FT 12/1100/75
+861 FT 12/1125/50
+862 FT 12/1150/25
+863 FT 12/1175/0
+895 FT 12/0/1175
+896 FT 12/25/1150
+897 FT 12/50/1125
+898 FT 12/75/1100
+899 FT 12/100/1075
+900 FT 12/125/1050
+901 FT 12/150/1025
+902 FT 12/175/1000
+903 FT 12/200/975
+904 FT 12/225/950
+905 FT 12/250/925
+906 FT 12/275/900
+907 FT 12/300/875
+908 FT 12/325/850
+909 FT 12/350/825
+910 FT 12/375/800
+911 FT 12/400/775
+912 FT 12/425/750
+913 FT 12/450/725
+914 FT 12/475/700
+915 FT 12/500/675
+916 FT 12/525/650
+917 FT 12/550/625
+918 FT 12/575/600
+919 FT 12/600/575
+920 FT 12/625/550
+921 FT 12/650/525
+922 FT 12/675/500
+923 FT 12/700/475
+924 FT 12/725/450
+925 FT 12/750/425
+926 FT 12/775/400
+927 FT 12/800/375
+928 FT 12/825/350
+929 FT 12/850/325
+930 FT 12/875/300
+931 FT 12/900/275
+932 FT 12/925/250
+933 FT 12/950/225
+934 FT 12/975/200
+935 FT 12/1000/175
+936 FT 12/1025/150
+937 FT 12/1050/125
+938 FT 12/1075/100
+939 FT 12/1100/75
+940 FT 12/1125/50
+941 FT 12/1150/25
+942 FT 12/1175/0
+950 FT 12/0/1175
+951 FT 12/25/1150
+952 FT 12/50/1125
+953 FT 12/75/1100
+954 FT 12/100/1075
+955 FT 12/125/1050
+956 FT 12/150/1025
+957 FT 12/175/1000
+958 FT 12/200/975
+959 FT 12/225/950
+960 FT 12/250/925
+961 FT 12/275/900
+962 FT 12/300/875
+963 FT 12/325/850
+964 FT 12/350/825
+965 FT 12/375/800
+966 FT 12/400/775
+967 FT 12/425/750
+968 FT 12/450/725
+969 FT 12/475/700
+970 FT 12/500/675
+971 FT 12/525/650
+972 FT 12/550/625
+973 FT 12/575/600
+974 FT 12/600/575
+975 FT 12/625/550
+976 FT 12/650/525
+977 FT 12/675/500
+978 FT 12/700/475
+979 FT 12/725/450
+980 FT 12/750/425
+981 FT 12/775/400
+982 FT 12/800/375
+983 FT 12/825/350
+984 FT 12/850/325
+985 FT 12/875/300
+986 FT 12/900/275
+987 FT 12/925/250
+988 FT 12/950/225
+989 FT 12/975/200
+990 FT 12/1000/175
+991 FT 12/1025/150
+992 FT 12/1050/125
+993 FT 12/1075/100
+994 FT 12/1100/75
+995 FT 12/1125/50
+996 FT 12/1150/25
+997 FT 12/1175/0
+1005 FT 12/0/1175
+1006 FT 12/25/1150
+1007 FT 12/50/1125
+1008 FT 12/75/1100
+1009 FT 12/100/1075
+1010 FT 12/125/1050
+1011 FT 12/150/1025
+1012 FT 12/175/1000
+1013 FT 12/200/975
+1014 FT 12/225/950
+1015 FT 12/250/925
+1016 FT 12/275/900
+1017 FT 12/300/875
+1018 FT 12/325/850
+1019 FT 12/350/825
+1020 FT 12/375/800
+1021 FT 12/400/775
+1022 FT 12/425/750
+1023 FT 12/450/725
+1024 FT 12/475/700
+1025 FT 12/500/675
+1026 FT 12/525/650
+1027 FT 12/550/625
+1028 FT 12/575/600
+1029 FT 12/600/575
+1030 FT 12/625/550
+1031 FT 12/650/525
+1032 FT 12/675/500
+1033 FT 12/700/475
+1034 FT 12/725/450
+1035 FT 12/750/425
+1036 FT 12/775/400
+1037 FT 12/800/375
+1038 FT 12/825/350
+1039 FT 12/850/325
+1040 FT 12/875/300
+1041 FT 12/900/275
+1042 FT 12/925/250
+1043 FT 12/950/225
+1044 FT 12/975/200
+1045 FT 12/1000/175
+1046 FT 12/1025/150
+1047 FT 12/1050/125
+1048 FT 12/1075/100
+1049 FT 12/1100/75
+1050 FT 12/1125/50
+1051 FT 12/1150/25
+1052 FT 12/1175/0
+1084 FT 12/0/1175
+1085 FT 12/25/1150
+1086 FT 12/50/1125
+1087 FT 12/75/1100
+1088 FT 12/100/1075
+1089 FT 12/125/1050
+1090 FT 12/150/1025
+1091 FT 12/175/1000
+1092 FT 12/200/975
+1093 FT 12/225/950
+1094 FT 12/250/925
+1095 FT 12/275/900
+1096 FT 12/300/875
+1097 FT 12/325/850
+1098 FT 12/350/825
+1099 FT 12/375/800
+1100 FT 12/400/775
+1101 FT 12/425/750
+1102 FT 12/450/725
+1103 FT 12/475/700
+1104 FT 12/500/675
+1105 FT 12/525/650
+1106 FT 12/550/625
+1107 FT 12/575/600
+1108 FT 12/600/575
+1109 FT 12/625/550
+1110 FT 12/650/525
+1111 FT 12/675/500
+1112 FT 12/700/475
+1113 FT 12/725/450
+1114 FT 12/750/425
+1115 FT 12/775/400
+1116 FT 12/800/375
+1117 FT 12/825/350
+1118 FT 12/850/325
+1119 FT 12/875/300
+1120 FT 12/900/275
+1121 FT 12/925/250
+1122 FT 12/950/225
+1123 FT 12/975/200
+1124 FT 12/1000/175
+1125 FT 12/1025/150
+1126 FT 12/1050/125
+1127 FT 12/1075/100
+1128 FT 12/1100/75
+1129 FT 12/1125/50
+1130 FT 12/1150/25
+1131 FT 12/1175/0
+1139 FT 12/0/1175
+1140 FT 12/25/1150
+1141 FT 12/50/1125
+1142 FT 12/75/1100
+1143 FT 12/100/1075
+1144 FT 12/125/1050
+1145 FT 12/150/1025
+1146 FT 12/175/1000
+1147 FT 12/200/975
+1148 FT 12/225/950
+1149 FT 12/250/925
+1150 FT 12/275/900
+1151 FT 12/300/875
+1152 FT 12/325/850
+1153 FT 12/350/825
+1154 FT 12/375/800
+1155 FT 12/400/775
+1156 FT 12/425/750
+1157 FT 12/450/725
+1158 FT 12/475/700
+1159 FT 12/500/675
+1160 FT 12/525/650
+1161 FT 12/550/625
+1162 FT 12/575/600
+1163 FT 12/600/575
+1164 FT 12/625/550
+1165 FT 12/650/525
+1166 FT 12/675/500
+1167 FT 12/700/475
+1168 FT 12/725/450
+1169 FT 12/750/425
+1170 FT 12/775/400
+1171 FT 12/800/375
+1172 FT 12/825/350
+1173 FT 12/850/325
+1174 FT 12/875/300
+1175 FT 12/900/275
+1176 FT 12/925/250
+1177 FT 12/950/225
+1178 FT 12/975/200
+1179 FT 12/1000/175
+1180 FT 12/1025/150
+1181 FT 12/1050/125
+1182 FT 12/1075/100
+1183 FT 12/1100/75
+1184 FT 12/1125/50
+1185 FT 12/1150/25
+1186 FT 12/1175/0
+1194 FT 12/0/1175
+1195 FT 12/25/1150
+1196 FT 12/50/1125
+1197 FT 12/75/1100
+1198 FT 12/100/1075
+1199 FT 12/125/1050
+1200 FT 12/150/1025
+1201 FT 12/175/1000
+1202 FT 12/200/975
+1203 FT 12/225/950
+1204 FT 12/250/925
+1205 FT 12/275/900
+1206 FT 12/300/875
+1207 FT 12/325/850
+1208 FT 12/350/825
+1209 FT 12/375/800
+1210 FT 12/400/775
+1211 FT 12/425/750
+1212 FT 12/450/725
+1213 FT 12/475/700
+1214 FT 12/500/675
+1215 FT 12/525/650
+1216 FT 12/550/625
+1217 FT 12/575/600
+1218 FT 12/600/575
+1219 FT 12/625/550
+1220 FT 12/650/525
+1221 FT 12/675/500
+1222 FT 12/700/475
+1223 FT 12/725/450
+1224 FT 12/750/425
+1225 FT 12/775/400
+1226 FT 12/800/375
+1227 FT 12/825/350
+1228 FT 12/850/325
+1229 FT 12/875/300
+1230 FT 12/900/275
+1231 FT 12/925/250
+1232 FT 12/950/225
+1233 FT 12/975/200
+1234 FT 12/1000/175
+1235 FT 12/1025/150
+1236 FT 12/1050/125
+1237 FT 12/1075/100
+1238 FT 12/1100/75
+1239 FT 12/1125/50
+1240 FT 12/1150/25
+1241 FT 12/1175/0
+1273 FT 12/0/1175
+1274 FT 12/25/1150
+1275 FT 12/50/1125
+1276 FT 12/75/1100
+1277 FT 12/100/1075
+1278 FT 12/125/1050
+1279 FT 12/150/1025
+1280 FT 12/175/1000
+1281 FT 12/200/975
+1282 FT 12/225/950
+1283 FT 12/250/925
+1284 FT 12/275/900
+1285 FT 12/300/875
+1286 FT 12/325/850
+1287 FT 12/350/825
+1288 FT 12/375/800
+1289 FT 12/400/775
+1290 FT 12/425/750
+1291 FT 12/450/725
+1292 FT 12/475/700
+1293 FT 12/500/675
+1294 FT 12/525/650
+1295 FT 12/550/625
+1296 FT 12/575/600
+1297 FT 12/600/575
+1298 FT 12/625/550
+1299 FT 12/650/525
+1300 FT 12/675/500
+1301 FT 12/700/475
+1302 FT 12/725/450
+1303 FT 12/750/425
+1304 FT 12/775/400
+1305 FT 12/800/375
+1306 FT 12/825/350
+1307 FT 12/850/325
+1308 FT 12/875/300
+1309 FT 12/900/275
+1310 FT 12/925/250
+1311 FT 12/950/225
+1312 FT 12/975/200
+1313 FT 12/1000/175
+1314 FT 12/1025/150
+1315 FT 12/1050/125
+1316 FT 12/1075/100
+1317 FT 12/1100/75
+1318 FT 12/1125/50
+1319 FT 12/1150/25
+1320 FT 12/1175/0
+1328 FT 12/0/1175
+1329 FT 12/25/1150
+1330 FT 12/50/1125
+1331 FT 12/75/1100
+1332 FT 12/100/1075
+1333 FT 12/125/1050
+1334 FT 12/150/1025
+1335 FT 12/175/1000
+1336 FT 12/200/975
+1337 FT 12/225/950
+1338 FT 12/250/925
+1339 FT 12/275/900
+1340 FT 12/300/875
+1341 FT 12/325/850
+1342 FT 12/350/825
+1343 FT 12/375/800
+1344 FT 12/400/775
+1345 FT 12/425/750
+1346 FT 12/450/725
+1347 FT 12/475/700
+1348 FT 12/500/675
+1349 FT 12/525/650
+1350 FT 12/550/625
+1351 FT 12/575/600
+1352 FT 12/600/575
+1353 FT 12/625/550
+1354 FT 12/650/525
+1355 FT 12/675/500
+1356 FT 12/700/475
+1357 FT 12/725/450
+1358 FT 12/750/425
+1359 FT 12/775/400
+1360 FT 12/800/375
+1361 FT 12/825/350
+1362 FT 12/850/325
+1363 FT 12/875/300
+1364 FT 12/900/275
+1365 FT 12/925/250
+1366 FT 12/950/225
+1367 FT 12/975/200
+1368 FT 12/1000/175
+1369 FT 12/1025/150
+1370 FT 12/1050/125
+1371 FT 12/1075/100
+1372 FT 12/1100/75
+1373 FT 12/1125/50
+1374 FT 12/1150/25
+1375 FT 12/1175/0
+1383 FT 12/0/1175
+1384 FT 12/25/1150
+1385 FT 12/50/1125
+1386 FT 12/75/1100
+1387 FT 12/100/1075
+1388 FT 12/125/1050
+1389 FT 12/150/1025
+1390 FT 12/175/1000
+1391 FT 12/200/975
+1392 FT 12/225/950
+1393 FT 12/250/925
+1394 FT 12/275/900
+1395 FT 12/300/875
+1396 FT 12/325/850
+1397 FT 12/350/825
+1398 FT 12/375/800
+1399 FT 12/400/775
+1400 FT 12/425/750
+1401 FT 12/450/725
+1402 FT 12/475/700
+1403 FT 12/500/675
+1404 FT 12/525/650
+1405 FT 12/550/625
+1406 FT 12/575/600
+1407 FT 12/600/575
+1408 FT 12/625/550
+1409 FT 12/650/525
+1410 FT 12/675/500
+1411 FT 12/700/475
+1412 FT 12/725/450
+1413 FT 12/750/425
+1414 FT 12/775/400
+1415 FT 12/800/375
+1416 FT 12/825/350
+1417 FT 12/850/325
+1418 FT 12/875/300
+1419 FT 12/900/275
+1420 FT 12/925/250
+1421 FT 12/950/225
+1422 FT 12/975/200
+1423 FT 12/1000/175
+1424 FT 12/1025/150
+1425 FT 12/1050/125
+1426 FT 12/1075/100
+1427 FT 12/1100/75
+1428 FT 12/1125/50
+1429 FT 12/1150/25
+1430 FT 12/1175/0
+1462 FT 12/0/1175
+1463 FT 12/25/1150
+1464 FT 12/50/1125
+1465 FT 12/75/1100
+1466 FT 12/100/1075
+1467 FT 12/125/1050
+1468 FT 12/150/1025
+1469 FT 12/175/1000
+1470 FT 12/200/975
+1471 FT 12/225/950
+1472 FT 12/250/925
+1473 FT 12/275/900
+1474 FT 12/300/875
+1475 FT 12/325/850
+1476 FT 12/350/825
+1477 FT 12/375/800
+1478 FT 12/400/775
+1479 FT 12/425/750
+1480 FT 12/450/725
+1481 FT 12/475/700
+1482 FT 12/500/675
+1483 FT 12/525/650
+1484 FT 12/550/625
+1485 FT 12/575/600
+1486 FT 12/600/575
+1487 FT 12/625/550
+1488 FT 12/650/525
+1489 FT 12/675/500
+1490 FT 12/700/475
+1491 FT 12/725/450
+1492 FT 12/750/425
+1493 FT 12/775/400
+1494 FT 12/800/375
+1495 FT 12/825/350
+1496 FT 12/850/325
+1497 FT 12/875/300
+1498 FT 12/900/275
+1499 FT 12/925/250
+1500 FT 12/950/225
+1501 FT 12/975/200
+1502 FT 12/1000/175
+1503 FT 12/1025/150
+1504 FT 12/1050/125
+1505 FT 12/1075/100
+1506 FT 12/1100/75
+1507 FT 12/1125/50
+1508 FT 12/1150/25
+1509 FT 12/1175/0
+1517 FT 12/0/1175
+1518 FT 12/25/1150
+1519 FT 12/50/1125
+1520 FT 12/75/1100
+1521 FT 12/100/1075
+1522 FT 12/125/1050
+1523 FT 12/150/1025
+1524 FT 12/175/1000
+1525 FT 12/200/975
+1526 FT 12/225/950
+1527 FT 12/250/925
+1528 FT 12/275/900
+1529 FT 12/300/875
+1530 FT 12/325/850
+1531 FT 12/350/825
+1532 FT 12/375/800
+1533 FT 12/400/775
+1534 FT 12/425/750
+1535 FT 12/450/725
+1536 FT 12/475/700
+1537 FT 12/500/675
+1538 FT 12/525/650
+1539 FT 12/550/625
+1540 FT 12/575/600
+1541 FT 12/600/575
+1542 FT 12/625/550
+1543 FT 12/650/525
+1544 FT 12/675/500
+1545 FT 12/700/475
+1546 FT 12/725/450
+1547 FT 12/750/425
+1548 FT 12/775/400
+1549 FT 12/800/375
+1550 FT 12/825/350
+1551 FT 12/850/325
+1552 FT 12/875/300
+1553 FT 12/900/275
+1554 FT 12/925/250
+1555 FT 12/950/225
+1556 FT 12/975/200
+1557 FT 12/1000/175
+1558 FT 12/1025/150
+1559 FT 12/1050/125
+1560 FT 12/1075/100
+1561 FT 12/1100/75
+1562 FT 12/1125/50
+1563 FT 12/1150/25
+1564 FT 12/1175/0
+1572 FT 12/0/1175
+1573 FT 12/25/1150
+1574 FT 12/50/1125
+1575 FT 12/75/1100
+1576 FT 12/100/1075
+1577 FT 12/125/1050
+1578 FT 12/150/1025
+1579 FT 12/175/1000
+1580 FT 12/200/975
+1581 FT 12/225/950
+1582 FT 12/250/925
+1583 FT 12/275/900
+1584 FT 12/300/875
+1585 FT 12/325/850
+1586 FT 12/350/825
+1587 FT 12/375/800
+1588 FT 12/400/775
+1589 FT 12/425/750
+1590 FT 12/450/725
+1591 FT 12/475/700
+1592 FT 12/500/675
+1593 FT 12/525/650
+1594 FT 12/550/625
+1595 FT 12/575/600
+1596 FT 12/600/575
+1597 FT 12/625/550
+1598 FT 12/650/525
+1599 FT 12/675/500
+1600 FT 12/700/475
+1601 FT 12/725/450
+1602 FT 12/750/425
+1603 FT 12/775/400
+1604 FT 12/800/375
+1605 FT 12/825/350
+1606 FT 12/850/325
+1607 FT 12/875/300
+1608 FT 12/900/275
+1609 FT 12/925/250
+1610 FT 12/950/225
+1611 FT 12/975/200
+1612 FT 12/1000/175
+1613 FT 12/1025/150
+1614 FT 12/1050/125
+1615 FT 12/1075/100
+1616 FT 12/1100/75
+1617 FT 12/1125/50
+1618 FT 12/1150/25
+1619 FT 12/1175/0
+1655 FT 12/0/1175
+1656 FT 12/25/1150
+1657 FT 12/50/1125
+1658 FT 12/75/1100
+1659 FT 12/100/1075
+1660 FT 12/125/1050
+1661 FT 12/150/1025
+1662 FT 12/175/1000
+1663 FT 12/200/975
+1664 FT 12/225/950
+1665 FT 12/250/925
+1666 FT 12/275/900
+1667 FT 12/300/875
+1668 FT 12/325/850
+1669 FT 12/350/825
+1670 FT 12/375/800
+1671 FT 12/400/775
+1672 FT 12/425/750
+1673 FT 12/450/725
+1674 FT 12/475/700
+1675 FT 12/500/675
+1676 FT 12/525/650
+1677 FT 12/550/625
+1678 FT 12/575/600
+1679 FT 12/600/575
+1680 FT 12/625/550
+1681 FT 12/650/525
+1682 FT 12/675/500
+1683 FT 12/700/475
+1684 FT 12/725/450
+1685 FT 12/750/425
+1686 FT 12/775/400
+1687 FT 12/800/375
+1688 FT 12/825/350
+1689 FT 12/850/325
+1690 FT 12/875/300
+1691 FT 12/900/275
+1692 FT 12/925/250
+1693 FT 12/950/225
+1694 FT 12/975/200
+1695 FT 12/1000/175
+1696 FT 12/1025/150
+1697 FT 12/1050/125
+1698 FT 12/1075/100
+1699 FT 12/1100/75
+1700 FT 12/1125/50
+1701 FT 12/1150/25
+1702 FT 12/1175/0
+1710 FT 12/0/1175
+1711 FT 12/25/1150
+1712 FT 12/50/1125
+1713 FT 12/75/1100
+1714 FT 12/100/1075
+1715 FT 12/125/1050
+1716 FT 12/150/1025
+1717 FT 12/175/1000
+1718 FT 12/200/975
+1719 FT 12/225/950
+1720 FT 12/250/925
+1721 FT 12/275/900
+1722 FT 12/300/875
+1723 FT 12/325/850
+1724 FT 12/350/825
+1725 FT 12/375/800
+1726 FT 12/400/775
+1727 FT 12/425/750
+1728 FT 12/450/725
+1729 FT 12/475/700
+1730 FT 12/500/675
+1731 FT 12/525/650
+1732 FT 12/550/625
+1733 FT 12/575/600
+1734 FT 12/600/575
+1735 FT 12/625/550
+1736 FT 12/650/525
+1737 FT 12/675/500
+1738 FT 12/700/475
+1739 FT 12/725/450
+1740 FT 12/750/425
+1741 FT 12/775/400
+1742 FT 12/800/375
+1743 FT 12/825/350
+1744 FT 12/850/325
+1745 FT 12/875/300
+1746 FT 12/900/275
+1747 FT 12/925/250
+1748 FT 12/950/225
+1749 FT 12/975/200
+1750 FT 12/1000/175
+1751 FT 12/1025/150
+1752 FT 12/1050/125
+1753 FT 12/1075/100
+1754 FT 12/1100/75
+1755 FT 12/1125/50
+1756 FT 12/1150/25
+1757 FT 12/1175/0
+1789 FT 12/0/1175
+1790 FT 12/25/1150
+1791 FT 12/50/1125
+1792 FT 12/75/1100
+1793 FT 12/100/1075
+1794 FT 12/125/1050
+1795 FT 12/150/1025
+1796 FT 12/175/1000
+1797 FT 12/200/975
+1798 FT 12/225/950
+1799 FT 12/250/925
+1800 FT 12/275/900
+1801 FT 12/300/875
+1802 FT 12/325/850
+1803 FT 12/350/825
+1804 FT 12/375/800
+1805 FT 12/400/775
+1806 FT 12/425/750
+1807 FT 12/450/725
+1808 FT 12/475/700
+1809 FT 12/500/675
+1810 FT 12/525/650
+1811 FT 12/550/625
+1812 FT 12/575/600
+1813 FT 12/600/575
+1814 FT 12/625/550
+1815 FT 12/650/525
+1816 FT 12/675/500
+1817 FT 12/700/475
+1818 FT 12/725/450
+1819 FT 12/750/425
+1820 FT 12/775/400
+1821 FT 12/800/375
+1822 FT 12/825/350
+1823 FT 12/850/325
+1824 FT 12/875/300
+1825 FT 12/900/275
+1826 FT 12/925/250
+1827 FT 12/950/225
+1828 FT 12/975/200
+1829 FT 12/1000/175
+1830 FT 12/1025/150
+1831 FT 12/1050/125
+1832 FT 12/1075/100
+1833 FT 12/1100/75
+1834 FT 12/1125/50
+1835 FT 12/1150/25
+1836 FT 12/1175/0
+1844 FT 12/0/1175
+1845 FT 12/25/1150
+1846 FT 12/50/1125
+1847 FT 12/75/1100
+1848 FT 12/100/1075
+1849 FT 12/125/1050
+1850 FT 12/150/1025
+1851 FT 12/175/1000
+1852 FT 12/200/975
+1853 FT 12/225/950
+1854 FT 12/250/925
+1855 FT 12/275/900
+1856 FT 12/300/875
+1857 FT 12/325/850
+1858 FT 12/350/825
+1859 FT 12/375/800
+1860 FT 12/400/775
+1861 FT 12/425/750
+1862 FT 12/450/725
+1863 FT 12/475/700
+1864 FT 12/500/675
+1865 FT 12/525/650
+1866 FT 12/550/625
+1867 FT 12/575/600
+1868 FT 12/600/575
+1869 FT 12/625/550
+1870 FT 12/650/525
+1871 FT 12/675/500
+1872 FT 12/700/475
+1873 FT 12/725/450
+1874 FT 12/750/425
+1875 FT 12/775/400
+1876 FT 12/800/375
+1877 FT 12/825/350
+1878 FT 12/850/325
+1879 FT 12/875/300
+1880 FT 12/900/275
+1881 FT 12/925/250
+1882 FT 12/950/225
+1883 FT 12/975/200
+1884 FT 12/1000/175
+1885 FT 12/1025/150
+1886 FT 12/1050/125
+1887 FT 12/1075/100
+1888 FT 12/1100/75
+1889 FT 12/1125/50
+1890 FT 12/1150/25
+1891 FT 12/1175/0
+1899 FT 12/0/1175
+1900 FT 12/25/1150
+1901 FT 12/50/1125
+1902 FT 12/75/1100
+1903 FT 12/100/1075
+1904 FT 12/125/1050
+1905 FT 12/150/1025
+1906 FT 12/175/1000
+1907 FT 12/200/975
+1908 FT 12/225/950
+1909 FT 12/250/925
+1910 FT 12/275/900
+1911 FT 12/300/875
+1912 FT 12/325/850
+1913 FT 12/350/825
+1914 FT 12/375/800
+1915 FT 12/400/775
+1916 FT 12/425/750
+1917 FT 12/450/725
+1918 FT 12/475/700
+1919 FT 12/500/675
+1920 FT 12/525/650
+1921 FT 12/550/625
+1922 FT 12/575/600
+1923 FT 12/600/575
+1924 FT 12/625/550
+1925 FT 12/650/525
+1926 FT 12/675/500
+1927 FT 12/700/475
+1928 FT 12/725/450
+1929 FT 12/750/425
+1930 FT 12/775/400
+1931 FT 12/800/375
+1932 FT 12/825/350
+1933 FT 12/850/325
+1934 FT 12/875/300
+1935 FT 12/900/275
+1936 FT 12/925/250
+1937 FT 12/950/225
+1938 FT 12/975/200
+1939 FT 12/1000/175
+1940 FT 12/1025/150
+1941 FT 12/1050/125
+1942 FT 12/1075/100
+1943 FT 12/1100/75
+1944 FT 12/1125/50
+1945 FT 12/1150/25
+1946 FT 12/1175/0
+1978 FT 12/0/1175
+1979 FT 12/25/1150
+1980 FT 12/50/1125
+1981 FT 12/75/1100
+1982 FT 12/100/1075
+1983 FT 12/125/1050
+1984 FT 12/150/1025
+1985 FT 12/175/1000
+1986 FT 12/200/975
+1987 FT 12/225/950
+1988 FT 12/250/925
+1989 FT 12/275/900
+1990 FT 12/300/875
+1991 FT 12/325/850
+1992 FT 12/350/825
+1993 FT 12/375/800
+1994 FT 12/400/775
+1995 FT 12/425/750
+1996 FT 12/450/725
+1997 FT 12/475/700
+1998 FT 12/500/675
+1999 FT 12/525/650
+2000 FT 12/550/625
+2001 FT 12/575/600
+2002 FT 12/600/575
+2003 FT 12/625/550
+2004 FT 12/650/525
+2005 FT 12/675/500
+2006 FT 12/700/475
+2007 FT 12/725/450
+2008 FT 12/750/425
+2009 FT 12/775/400
+2010 FT 12/800/375
+2011 FT 12/825/350
+2012 FT 12/850/325
+2013 FT 12/875/300
+2014 FT 12/900/275
+2015 FT 12/925/250
+2016 FT 12/950/225
+2017 FT 12/975/200
+2018 FT 12/1000/175
+2019 FT 12/1025/150
+2020 FT 12/1050/125
+2021 FT 12/1075/100
+2022 FT 12/1100/75
+2023 FT 12/1125/50
+2024 FT 12/1150/25
+2025 FT 12/1175/0
+2033 FT 12/0/1175
+2034 FT 12/25/1150
+2035 FT 12/50/1125
+2036 FT 12/75/1100
+2037 FT 12/100/1075
+2038 FT 12/125/1050
+2039 FT 12/150/1025
+2040 FT 12/175/1000
+2041 FT 12/200/975
+2042 FT 12/225/950
+2043 FT 12/250/925
+2044 FT 12/275/900
+2045 FT 12/300/875
+2046 FT 12/325/850
+2047 FT 12/350/825
+2048 FT 12/375/800
+2049 FT 12/400/775
+2050 FT 12/425/750
+2051 FT 12/450/725
+2052 FT 12/475/700
+2053 FT 12/500/675
+2054 FT 12/525/650
+2055 FT 12/550/625
+2056 FT 12/575/600
+2057 FT 12/600/575
+2058 FT 12/625/550
+2059 FT 12/650/525
+2060 FT 12/675/500
+2061 FT 12/700/475
+2062 FT 12/725/450
+2063 FT 12/750/425
+2064 FT 12/775/400
+2065 FT 12/800/375
+2066 FT 12/825/350
+2067 FT 12/850/325
+2068 FT 12/875/300
+2069 FT 12/900/275
+2070 FT 12/925/250
+2071 FT 12/950/225
+2072 FT 12/975/200
+2073 FT 12/1000/175
+2074 FT 12/1025/150
+2075 FT 12/1050/125
+2076 FT 12/1075/100
+2077 FT 12/1100/75
+2078 FT 12/1125/50
+2079 FT 12/1150/25
+2080 FT 12/1175/0
+2088 FT 12/0/1175
+2089 FT 12/25/1150
+2090 FT 12/50/1125
+2091 FT 12/75/1100
+2092 FT 12/100/1075
+2093 FT 12/125/1050
+2094 FT 12/150/1025
+2095 FT 12/175/1000
+2096 FT 12/200/975
+2097 FT 12/225/950
+2098 FT 12/250/925
+2099 FT 12/275/900
+2100 FT 12/300/875
+2101 FT 12/325/850
+2102 FT 12/350/825
+2103 FT 12/375/800
+2104 FT 12/400/775
+2105 FT 12/425/750
+2106 FT 12/450/725
+2107 FT 12/475/700
+2108 FT 12/500/675
+2109 FT 12/525/650
+2110 FT 12/550/625
+2111 FT 12/575/600
+2112 FT 12/600/575
+2113 FT 12/625/550
+2114 FT 12/650/525
+2115 FT 12/675/500
+2116 FT 12/700/475
+2117 FT 12/725/450
+2118 FT 12/750/425
+2119 FT 12/775/400
+2120 FT 12/800/375
+2121 FT 12/825/350
+2122 FT 12/850/325
+2123 FT 12/875/300
+2124 FT 12/900/275
+2125 FT 12/925/250
+2126 FT 12/950/225
+2127 FT 12/975/200
+2128 FT 12/1000/175
+2129 FT 12/1025/150
+2130 FT 12/1050/125
+2131 FT 12/1075/100
+2132 FT 12/1100/75
+2133 FT 12/1125/50
+2134 FT 12/1150/25
+2135 FT 12/1175/0
+2167 FT 12/0/1175
+2168 FT 12/25/1150
+2169 FT 12/50/1125
+2170 FT 12/75/1100
+2171 FT 12/100/1075
+2172 FT 12/125/1050
+2173 FT 12/150/1025
+2174 FT 12/175/1000
+2175 FT 12/200/975
+2176 FT 12/225/950
+2177 FT 12/250/925
+2178 FT 12/275/900
+2179 FT 12/300/875
+2180 FT 12/325/850
+2181 FT 12/350/825
+2182 FT 12/375/800
+2183 FT 12/400/775
+2184 FT 12/425/750
+2185 FT 12/450/725
+2186 FT 12/475/700
+2187 FT 12/500/675
+2188 FT 12/525/650
+2189 FT 12/550/625
+2190 FT 12/575/600
+2191 FT 12/600/575
+2192 FT 12/625/550
+2193 FT 12/650/525
+2194 FT 12/675/500
+2195 FT 12/700/475
+2196 FT 12/725/450
+2197 FT 12/750/425
+2198 FT 12/775/400
+2199 FT 12/800/375
+2200 FT 12/825/350
+2201 FT 12/850/325
+2202 FT 12/875/300
+2203 FT 12/900/275
+2204 FT 12/925/250
+2205 FT 12/950/225
+2206 FT 12/975/200
+2207 FT 12/1000/175
+2208 FT 12/1025/150
+2209 FT 12/1050/125
+2210 FT 12/1075/100
+2211 FT 12/1100/75
+2212 FT 12/1125/50
+2213 FT 12/1150/25
+2214 FT 12/1175/0
+2222 FT 12/0/1175
+2223 FT 12/25/1150
+2224 FT 12/50/1125
+2225 FT 12/75/1100
+2226 FT 12/100/1075
+2227 FT 12/125/1050
+2228 FT 12/150/1025
+2229 FT 12/175/1000
+2230 FT 12/200/975
+2231 FT 12/225/950
+2232 FT 12/250/925
+2233 FT 12/275/900
+2234 FT 12/300/875
+2235 FT 12/325/850
+2236 FT 12/350/825
+2237 FT 12/375/800
+2238 FT 12/400/775
+2239 FT 12/425/750
+2240 FT 12/450/725
+2241 FT 12/475/700
+2242 FT 12/500/675
+2243 FT 12/525/650
+2244 FT 12/550/625
+2245 FT 12/575/600
+2246 FT 12/600/575
+2247 FT 12/625/550
+2248 FT 12/650/525
+2249 FT 12/675/500
+2250 FT 12/700/475
+2251 FT 12/725/450
+2252 FT 12/750/425
+2253 FT 12/775/400
+2254 FT 12/800/375
+2255 FT 12/825/350
+2256 FT 12/850/325
+2257 FT 12/875/300
+2258 FT 12/900/275
+2259 FT 12/925/250
+2260 FT 12/950/225
+2261 FT 12/975/200
+2262 FT 12/1000/175
+2263 FT 12/1025/150
+2264 FT 12/1050/125
+2265 FT 12/1075/100
+2266 FT 12/1100/75
+2267 FT 12/1125/50
+2268 FT 12/1150/25
+2269 FT 12/1175/0
+2277 FT 12/0/1175
+2278 FT 12/25/1150
+2279 FT 12/50/1125
+2280 FT 12/75/1100
+2281 FT 12/100/1075
+2282 FT 12/125/1050
+2283 FT 12/150/1025
+2284 FT 12/175/1000
+2285 FT 12/200/975
+2286 FT 12/225/950
+2287 FT 12/250/925
+2288 FT 12/275/900
+2289 FT 12/300/875
+2290 FT 12/325/850
+2291 FT 12/350/825
+2292 FT 12/375/800
+2293 FT 12/400/775
+2294 FT 12/425/750
+2295 FT 12/450/725
+2296 FT 12/475/700
+2297 FT 12/500/675
+2298 FT 12/525/650
+2299 FT 12/550/625
+2300 FT 12/575/600
+2301 FT 12/600/575
+2302 FT 12/625/550
+2303 FT 12/650/525
+2304 FT 12/675/500
+2305 FT 12/700/475
+2306 FT 12/725/450
+2307 FT 12/750/425
+2308 FT 12/775/400
+2309 FT 12/800/375
+2310 FT 12/825/350
+2311 FT 12/850/325
+2312 FT 12/875/300
+2313 FT 12/900/275
+2314 FT 12/925/250
+2315 FT 12/950/225
+2316 FT 12/975/200
+2317 FT 12/1000/175
+2318 FT 12/1025/150
+2319 FT 12/1050/125
+2320 FT 12/1075/100
+2321 FT 12/1100/75
+2322 FT 12/1125/50
+2323 FT 12/1150/25
+2324 FT 12/1175/0
+2356 FT 12/0/1175
+2357 FT 12/25/1150
+2358 FT 12/50/1125
+2359 FT 12/75/1100
+2360 FT 12/100/1075
+2361 FT 12/125/1050
+2362 FT 12/150/1025
+2363 FT 12/175/1000
+2364 FT 12/200/975
+2365 FT 12/225/950
+2366 FT 12/250/925
+2367 FT 12/275/900
+2368 FT 12/300/875
+2369 FT 12/325/850
+2370 FT 12/350/825
+2371 FT 12/375/800
+2372 FT 12/400/775
+2373 FT 12/425/750
+2374 FT 12/450/725
+2375 FT 12/475/700
+2376 FT 12/500/675
+2377 FT 12/525/650
+2378 FT 12/550/625
+2379 FT 12/575/600
+2380 FT 12/600/575
+2381 FT 12/625/550
+2382 FT 12/650/525
+2383 FT 12/675/500
+2384 FT 12/700/475
+2385 FT 12/725/450
+2386 FT 12/750/425
+2387 FT 12/775/400
+2388 FT 12/800/375
+2389 FT 12/825/350
+2390 FT 12/850/325
+2391 FT 12/875/300
+2392 FT 12/900/275
+2393 FT 12/925/250
+2394 FT 12/950/225
+2395 FT 12/975/200
+2396 FT 12/1000/175
+2397 FT 12/1025/150
+2398 FT 12/1050/125
+2399 FT 12/1075/100
+2400 FT 12/1100/75
+2401 FT 12/1125/50
+2402 FT 12/1150/25
+2403 FT 12/1175/0
+2411 FT 12/0/1175
+2412 FT 12/25/1150
+2413 FT 12/50/1125
+2414 FT 12/75/1100
+2415 FT 12/100/1075
+2416 FT 12/125/1050
+2417 FT 12/150/1025
+2418 FT 12/175/1000
+2419 FT 12/200/975
+2420 FT 12/225/950
+2421 FT 12/250/925
+2422 FT 12/275/900
+2423 FT 12/300/875
+2424 FT 12/325/850
+2425 FT 12/350/825
+2426 FT 12/375/800
+2427 FT 12/400/775
+2428 FT 12/425/750
+2429 FT 12/450/725
+2430 FT 12/475/700
+2431 FT 12/500/675
+2432 FT 12/525/650
+2433 FT 12/550/625
+2434 FT 12/575/600
+2435 FT 12/600/575
+2436 FT 12/625/550
+2437 FT 12/650/525
+2438 FT 12/675/500
+2439 FT 12/700/475
+2440 FT 12/725/450
+2441 FT 12/750/425
+2442 FT 12/775/400
+2443 FT 12/800/375
+2444 FT 12/825/350
+2445 FT 12/850/325
+2446 FT 12/875/300
+2447 FT 12/900/275
+2448 FT 12/925/250
+2449 FT 12/950/225
+2450 FT 12/975/200
+2451 FT 12/1000/175
+2452 FT 12/1025/150
+2453 FT 12/1050/125
+2454 FT 12/1075/100
+2455 FT 12/1100/75
+2456 FT 12/1125/50
+2457 FT 12/1150/25
+2458 FT 12/1175/0
+2466 FT 12/0/1175
+2467 FT 12/25/1150
+2468 FT 12/50/1125
+2469 FT 12/75/1100
+2470 FT 12/100/1075
+2471 FT 12/125/1050
+2472 FT 12/150/1025
+2473 FT 12/175/1000
+2474 FT 12/200/975
+2475 FT 12/225/950
+2476 FT 12/250/925
+2477 FT 12/275/900
+2478 FT 12/300/875
+2479 FT 12/325/850
+2480 FT 12/350/825
+2481 FT 12/375/800
+2482 FT 12/400/775
+2483 FT 12/425/750
+2484 FT 12/450/725
+2485 FT 12/475/700
+2486 FT 12/500/675
+2487 FT 12/525/650
+2488 FT 12/550/625
+2489 FT 12/575/600
+2490 FT 12/600/575
+2491 FT 12/625/550
+2492 FT 12/650/525
+2493 FT 12/675/500
+2494 FT 12/700/475
+2495 FT 12/725/450
+2496 FT 12/750/425
+2497 FT 12/775/400
+2498 FT 12/800/375
+2499 FT 12/825/350
+2500 FT 12/850/325
+2501 FT 12/875/300
+2502 FT 12/900/275
+2503 FT 12/925/250
+2504 FT 12/950/225
+2505 FT 12/975/200
+2506 FT 12/1000/175
+2507 FT 12/1025/150
+2508 FT 12/1050/125
+2509 FT 12/1075/100
+2510 FT 12/1100/75
+2511 FT 12/1125/50
+2512 FT 12/1150/25
+2513 FT 12/1175/0
+2549 FT 12/0/1175
+2550 FT 12/25/1150
+2551 FT 12/50/1125
+2552 FT 12/75/1100
+2553 FT 12/100/1075
+2554 FT 12/125/1050
+2555 FT 12/150/1025
+2556 FT 12/175/1000
+2557 FT 12/200/975
+2558 FT 12/225/950
+2559 FT 12/250/925
+2560 FT 12/275/900
+2561 FT 12/300/875
+2562 FT 12/325/850
+2563 FT 12/350/825
+2564 FT 12/375/800
+2565 FT 12/400/775
+2566 FT 12/425/750
+2567 FT 12/450/725
+2568 FT 12/475/700
+2569 FT 12/500/675
+2570 FT 12/525/650
+2571 FT 12/550/625
+2572 FT 12/575/600
+2573 FT 12/600/575
+2574 FT 12/625/550
+2575 FT 12/650/525
+2576 FT 12/675/500
+2577 FT 12/700/475
+2578 FT 12/725/450
+2579 FT 12/750/425
+2580 FT 12/775/400
+2581 FT 12/800/375
+2582 FT 12/825/350
+2583 FT 12/850/325
+2584 FT 12/875/300
+2585 FT 12/900/275
+2586 FT 12/925/250
+2587 FT 12/950/225
+2588 FT 12/975/200
+2589 FT 12/1000/175
+2590 FT 12/1025/150
+2591 FT 12/1050/125
+2592 FT 12/1075/100
+2593 FT 12/1100/75
+2594 FT 12/1125/50
+2595 FT 12/1150/25
+2596 FT 12/1175/0
+2604 FT 12/0/1175
+2605 FT 12/25/1150
+2606 FT 12/50/1125
+2607 FT 12/75/1100
+2608 FT 12/100/1075
+2609 FT 12/125/1050
+2610 FT 12/150/1025
+2611 FT 12/175/1000
+2612 FT 12/200/975
+2613 FT 12/225/950
+2614 FT 12/250/925
+2615 FT 12/275/900
+2616 FT 12/300/875
+2617 FT 12/325/850
+2618 FT 12/350/825
+2619 FT 12/375/800
+2620 FT 12/400/775
+2621 FT 12/425/750
+2622 FT 12/450/725
+2623 FT 12/475/700
+2624 FT 12/500/675
+2625 FT 12/525/650
+2626 FT 12/550/625
+2627 FT 12/575/600
+2628 FT 12/600/575
+2629 FT 12/625/550
+2630 FT 12/650/525
+2631 FT 12/675/500
+2632 FT 12/700/475
+2633 FT 12/725/450
+2634 FT 12/750/425
+2635 FT 12/775/400
+2636 FT 12/800/375
+2637 FT 12/825/350
+2638 FT 12/850/325
+2639 FT 12/875/300
+2640 FT 12/900/275
+2641 FT 12/925/250
+2642 FT 12/950/225
+2643 FT 12/975/200
+2644 FT 12/1000/175
+2645 FT 12/1025/150
+2646 FT 12/1050/125
+2647 FT 12/1075/100
+2648 FT 12/1100/75
+2649 FT 12/1125/50
+2650 FT 12/1150/25
+2651 FT 12/1175/0
+2683 FT 12/0/1175
+2684 FT 12/25/1150
+2685 FT 12/50/1125
+2686 FT 12/75/1100
+2687 FT 12/100/1075
+2688 FT 12/125/1050
+2689 FT 12/150/1025
+2690 FT 12/175/1000
+2691 FT 12/200/975
+2692 FT 12/225/950
+2693 FT 12/250/925
+2694 FT 12/275/900
+2695 FT 12/300/875
+2696 FT 12/325/850
+2697 FT 12/350/825
+2698 FT 12/375/800
+2699 FT 12/400/775
+2700 FT 12/425/750
+2701 FT 12/450/725
+2702 FT 12/475/700
+2703 FT 12/500/675
+2704 FT 12/525/650
+2705 FT 12/550/625
+2706 FT 12/575/600
+2707 FT 12/600/575
+2708 FT 12/625/550
+2709 FT 12/650/525
+2710 FT 12/675/500
+2711 FT 12/700/475
+2712 FT 12/725/450
+2713 FT 12/750/425
+2714 FT 12/775/400
+2715 FT 12/800/375
+2716 FT 12/825/350
+2717 FT 12/850/325
+2718 FT 12/875/300
+2719 FT 12/900/275
+2720 FT 12/925/250
+2721 FT 12/950/225
+2722 FT 12/975/200
+2723 FT 12/1000/175
+2724 FT 12/1025/150
+2725 FT 12/1050/125
+2726 FT 12/1075/100
+2727 FT 12/1100/75
+2728 FT 12/1125/50
+2729 FT 12/1150/25
+2730 FT 12/1175/0
+2738 FT 12/0/1175
+2739 FT 12/25/1150
+2740 FT 12/50/1125
+2741 FT 12/75/1100
+2742 FT 12/100/1075
+2743 FT 12/125/1050
+2744 FT 12/150/1025
+2745 FT 12/175/1000
+2746 FT 12/200/975
+2747 FT 12/225/950
+2748 FT 12/250/925
+2749 FT 12/275/900
+2750 FT 12/300/875
+2751 FT 12/325/850
+2752 FT 12/350/825
+2753 FT 12/375/800
+2754 FT 12/400/775
+2755 FT 12/425/750
+2756 FT 12/450/725
+2757 FT 12/475/700
+2758 FT 12/500/675
+2759 FT 12/525/650
+2760 FT 12/550/625
+2761 FT 12/575/600
+2762 FT 12/600/575
+2763 FT 12/625/550
+2764 FT 12/650/525
+2765 FT 12/675/500
+2766 FT 12/700/475
+2767 FT 12/725/450
+2768 FT 12/750/425
+2769 FT 12/775/400
+2770 FT 12/800/375
+2771 FT 12/825/350
+2772 FT 12/850/325
+2773 FT 12/875/300
+2774 FT 12/900/275
+2775 FT 12/925/250
+2776 FT 12/950/225
+2777 FT 12/975/200
+2778 FT 12/1000/175
+2779 FT 12/1025/150
+2780 FT 12/1050/125
+2781 FT 12/1075/100
+2782 FT 12/1100/75
+2783 FT 12/1125/50
+2784 FT 12/1150/25
+2785 FT 12/1175/0
+2793 FT 12/0/1175
+2794 FT 12/25/1150
+2795 FT 12/50/1125
+2796 FT 12/75/1100
+2797 FT 12/100/1075
+2798 FT 12/125/1050
+2799 FT 12/150/1025
+2800 FT 12/175/1000
+2801 FT 12/200/975
+2802 FT 12/225/950
+2803 FT 12/250/925
+2804 FT 12/275/900
+2805 FT 12/300/875
+2806 FT 12/325/850
+2807 FT 12/350/825
+2808 FT 12/375/800
+2809 FT 12/400/775
+2810 FT 12/425/750
+2811 FT 12/450/725
+2812 FT 12/475/700
+2813 FT 12/500/675
+2814 FT 12/525/650
+2815 FT 12/550/625
+2816 FT 12/575/600
+2817 FT 12/600/575
+2818 FT 12/625/550
+2819 FT 12/650/525
+2820 FT 12/675/500
+2821 FT 12/700/475
+2822 FT 12/725/450
+2823 FT 12/750/425
+2824 FT 12/775/400
+2825 FT 12/800/375
+2826 FT 12/825/350
+2827 FT 12/850/325
+2828 FT 12/875/300
+2829 FT 12/900/275
+2830 FT 12/925/250
+2831 FT 12/950/225
+2832 FT 12/975/200
+2833 FT 12/1000/175
+2834 FT 12/1025/150
+2835 FT 12/1050/125
+2836 FT 12/1075/100
+2837 FT 12/1100/75
+2838 FT 12/1125/50
+2839 FT 12/1150/25
+2840 FT 12/1175/0
+2872 FT 12/0/1175
+2873 FT 12/25/1150
+2874 FT 12/50/1125
+2875 FT 12/75/1100
+2876 FT 12/100/1075
+2877 FT 12/125/1050
+2878 FT 12/150/1025
+2879 FT 12/175/1000
+2880 FT 12/200/975
+2881 FT 12/225/950
+2882 FT 12/250/925
+2883 FT 12/275/900
+2884 FT 12/300/875
+2885 FT 12/325/850
+2886 FT 12/350/825
+2887 FT 12/375/800
+2888 FT 12/400/775
+2889 FT 12/425/750
+2890 FT 12/450/725
+2891 FT 12/475/700
+2892 FT 12/500/675
+2893 FT 12/525/650
+2894 FT 12/550/625
+2895 FT 12/575/600
+2896 FT 12/600/575
+2897 FT 12/625/550
+2898 FT 12/650/525
+2899 FT 12/675/500
+2900 FT 12/700/475
+2901 FT 12/725/450
+2902 FT 12/750/425
+2903 FT 12/775/400
+2904 FT 12/800/375
+2905 FT 12/825/350
+2906 FT 12/850/325
+2907 FT 12/875/300
+2908 FT 12/900/275
+2909 FT 12/925/250
+2910 FT 12/950/225
+2911 FT 12/975/200
+2912 FT 12/1000/175
+2913 FT 12/1025/150
+2914 FT 12/1050/125
+2915 FT 12/1075/100
+2916 FT 12/1100/75
+2917 FT 12/1125/50
+2918 FT 12/1150/25
+2919 FT 12/1175/0
+2927 FT 12/0/1175
+2928 FT 12/25/1150
+2929 FT 12/50/1125
+2930 FT 12/75/1100
+2931 FT 12/100/1075
+2932 FT 12/125/1050
+2933 FT 12/150/1025
+2934 FT 12/175/1000
+2935 FT 12/200/975
+2936 FT 12/225/950
+2937 FT 12/250/925
+2938 FT 12/275/900
+2939 FT 12/300/875
+2940 FT 12/325/850
+2941 FT 12/350/825
+2942 FT 12/375/800
+2943 FT 12/400/775
+2944 FT 12/425/750
+2945 FT 12/450/725
+2946 FT 12/475/700
+2947 FT 12/500/675
+2948 FT 12/525/650
+2949 FT 12/550/625
+2950 FT 12/575/600
+2951 FT 12/600/575
+2952 FT 12/625/550
+2953 FT 12/650/525
+2954 FT 12/675/500
+2955 FT 12/700/475
+2956 FT 12/725/450
+2957 FT 12/750/425
+2958 FT 12/775/400
+2959 FT 12/800/375
+2960 FT 12/825/350
+2961 FT 12/850/325
+2962 FT 12/875/300
+2963 FT 12/900/275
+2964 FT 12/925/250
+2965 FT 12/950/225
+2966 FT 12/975/200
+2967 FT 12/1000/175
+2968 FT 12/1025/150
+2969 FT 12/1050/125
+2970 FT 12/1075/100
+2971 FT 12/1100/75
+2972 FT 12/1125/50
+2973 FT 12/1150/25
+2974 FT 12/1175/0
+2982 FT 12/0/1175
+2983 FT 12/25/1150
+2984 FT 12/50/1125
+2985 FT 12/75/1100
+2986 FT 12/100/1075
+2987 FT 12/125/1050
+2988 FT 12/150/1025
+2989 FT 12/175/1000
+2990 FT 12/200/975
+2991 FT 12/225/950
+2992 FT 12/250/925
+2993 FT 12/275/900
+2994 FT 12/300/875
+2995 FT 12/325/850
+2996 FT 12/350/825
+2997 FT 12/375/800
+2998 FT 12/400/775
+2999 FT 12/425/750
+3000 FT 12/450/725
+3001 FT 12/475/700
+3002 FT 12/500/675
+3003 FT 12/525/650
+3004 FT 12/550/625
+3005 FT 12/575/600
+3006 FT 12/600/575
+3007 FT 12/625/550
+3008 FT 12/650/525
+3009 FT 12/675/500
+3010 FT 12/700/475
+3011 FT 12/725/450
+3012 FT 12/750/425
+3013 FT 12/775/400
+3014 FT 12/800/375
+3015 FT 12/825/350
+3016 FT 12/850/325
+3017 FT 12/875/300
+3018 FT 12/900/275
+3019 FT 12/925/250
+3020 FT 12/950/225
+3021 FT 12/975/200
+3022 FT 12/1000/175
+3023 FT 12/1025/150
+3024 FT 12/1050/125
+3025 FT 12/1075/100
+3026 FT 12/1100/75
+3027 FT 12/1125/50
+3028 FT 12/1150/25
+3029 FT 12/1175/0
+3061 FT 12/0/1175
+3062 FT 12/25/1150
+3063 FT 12/50/1125
+3064 FT 12/75/1100
+3065 FT 12/100/1075
+3066 FT 12/125/1050
+3067 FT 12/150/1025
+3068 FT 12/175/1000
+3069 FT 12/200/975
+3070 FT 12/225/950
+3071 FT 12/250/925
+3072 FT 12/275/900
+3073 FT 12/300/875
+3074 FT 12/325/850
+3075 FT 12/350/825
+3076 FT 12/375/800
+3077 FT 12/400/775
+3078 FT 12/425/750
+3079 FT 12/450/725
+3080 FT 12/475/700
+3081 FT 12/500/675
+3082 FT 12/525/650
+3083 FT 12/550/625
+3084 FT 12/575/600
+3085 FT 12/600/575
+3086 FT 12/625/550
+3087 FT 12/650/525
+3088 FT 12/675/500
+3089 FT 12/700/475
+3090 FT 12/725/450
+3091 FT 12/750/425
+3092 FT 12/775/400
+3093 FT 12/800/375
+3094 FT 12/825/350
+3095 FT 12/850/325
+3096 FT 12/875/300
+3097 FT 12/900/275
+3098 FT 12/925/250
+3099 FT 12/950/225
+3100 FT 12/975/200
+3101 FT 12/1000/175
+3102 FT 12/1025/150
+3103 FT 12/1050/125
+3104 FT 12/1075/100
+3105 FT 12/1100/75
+3106 FT 12/1125/50
+3107 FT 12/1150/25
+3108 FT 12/1175/0
+3116 FT 12/0/1175
+3117 FT 12/25/1150
+3118 FT 12/50/1125
+3119 FT 12/75/1100
+3120 FT 12/100/1075
+3121 FT 12/125/1050
+3122 FT 12/150/1025
+3123 FT 12/175/1000
+3124 FT 12/200/975
+3125 FT 12/225/950
+3126 FT 12/250/925
+3127 FT 12/275/900
+3128 FT 12/300/875
+3129 FT 12/325/850
+3130 FT 12/350/825
+3131 FT 12/375/800
+3132 FT 12/400/775
+3133 FT 12/425/750
+3134 FT 12/450/725
+3135 FT 12/475/700
+3136 FT 12/500/675
+3137 FT 12/525/650
+3138 FT 12/550/625
+3139 FT 12/575/600
+3140 FT 12/600/575
+3141 FT 12/625/550
+3142 FT 12/650/525
+3143 FT 12/675/500
+3144 FT 12/700/475
+3145 FT 12/725/450
+3146 FT 12/750/425
+3147 FT 12/775/400
+3148 FT 12/800/375
+3149 FT 12/825/350
+3150 FT 12/850/325
+3151 FT 12/875/300
+3152 FT 12/900/275
+3153 FT 12/925/250
+3154 FT 12/950/225
+3155 FT 12/975/200
+3156 FT 12/1000/175
+3157 FT 12/1025/150
+3158 FT 12/1050/125
+3159 FT 12/1075/100
+3160 FT 12/1100/75
+3161 FT 12/1125/50
+3162 FT 12/1150/25
+3163 FT 12/1175/0
+3171 FT 12/0/1175
+3172 FT 12/25/1150
+3173 FT 12/50/1125
+3174 FT 12/75/1100
+3175 FT 12/100/1075
+3176 FT 12/125/1050
+3177 FT 12/150/1025
+3178 FT 12/175/1000
+3179 FT 12/200/975
+3180 FT 12/225/950
+3181 FT 12/250/925
+3182 FT 12/275/900
+3183 FT 12/300/875
+3184 FT 12/325/850
+3185 FT 12/350/825
+3186 FT 12/375/800
+3187 FT 12/400/775
+3188 FT 12/425/750
+3189 FT 12/450/725
+3190 FT 12/475/700
+3191 FT 12/500/675
+3192 FT 12/525/650
+3193 FT 12/550/625
+3194 FT 12/575/600
+3195 FT 12/600/575
+3196 FT 12/625/550
+3197 FT 12/650/525
+3198 FT 12/675/500
+3199 FT 12/700/475
+3200 FT 12/725/450
+3201 FT 12/750/425
+3202 FT 12/775/400
+3203 FT 12/800/375
+3204 FT 12/825/350
+3205 FT 12/850/325
+3206 FT 12/875/300
+3207 FT 12/900/275
+3208 FT 12/925/250
+3209 FT 12/950/225
+3210 FT 12/975/200
+3211 FT 12/1000/175
+3212 FT 12/1025/150
+3213 FT 12/1050/125
+3214 FT 12/1075/100
+3215 FT 12/1100/75
+3216 FT 12/1125/50
+3217 FT 12/1150/25
+3218 FT 12/1175/0
+3250 FT 12/0/1175
+3251 FT 12/25/1150
+3252 FT 12/50/1125
+3253 FT 12/75/1100
+3254 FT 12/100/1075
+3255 FT 12/125/1050
+3256 FT 12/150/1025
+3257 FT 12/175/1000
+3258 FT 12/200/975
+3259 FT 12/225/950
+3260 FT 12/250/925
+3261 FT 12/275/900
+3262 FT 12/300/875
+3263 FT 12/325/850
+3264 FT 12/350/825
+3265 FT 12/375/800
+3266 FT 12/400/775
+3267 FT 12/425/750
+3268 FT 12/450/725
+3269 FT 12/475/700
+3270 FT 12/500/675
+3271 FT 12/525/650
+3272 FT 12/550/625
+3273 FT 12/575/600
+3274 FT 12/600/575
+3275 FT 12/625/550
+3276 FT 12/650/525
+3277 FT 12/675/500
+3278 FT 12/700/475
+3279 FT 12/725/450
+3280 FT 12/750/425
+3281 FT 12/775/400
+3282 FT 12/800/375
+3283 FT 12/825/350
+3284 FT 12/850/325
+3285 FT 12/875/300
+3286 FT 12/900/275
+3287 FT 12/925/250
+3288 FT 12/950/225
+3289 FT 12/975/200
+3290 FT 12/1000/175
+3291 FT 12/1025/150
+3292 FT 12/1050/125
+3293 FT 12/1075/100
+3294 FT 12/1100/75
+3295 FT 12/1125/50
+3296 FT 12/1150/25
+3297 FT 12/1175/0
+3305 FT 12/0/1175
+3306 FT 12/25/1150
+3307 FT 12/50/1125
+3308 FT 12/75/1100
+3309 FT 12/100/1075
+3310 FT 12/125/1050
+3311 FT 12/150/1025
+3312 FT 12/175/1000
+3313 FT 12/200/975
+3314 FT 12/225/950
+3315 FT 12/250/925
+3316 FT 12/275/900
+3317 FT 12/300/875
+3318 FT 12/325/850
+3319 FT 12/350/825
+3320 FT 12/375/800
+3321 FT 12/400/775
+3322 FT 12/425/750
+3323 FT 12/450/725
+3324 FT 12/475/700
+3325 FT 12/500/675
+3326 FT 12/525/650
+3327 FT 12/550/625
+3328 FT 12/575/600
+3329 FT 12/600/575
+3330 FT 12/625/550
+3331 FT 12/650/525
+3332 FT 12/675/500
+3333 FT 12/700/475
+3334 FT 12/725/450
+3335 FT 12/750/425
+3336 FT 12/775/400
+3337 FT 12/800/375
+3338 FT 12/825/350
+3339 FT 12/850/325
+3340 FT 12/875/300
+3341 FT 12/900/275
+3342 FT 12/925/250
+3343 FT 12/950/225
+3344 FT 12/975/200
+3345 FT 12/1000/175
+3346 FT 12/1025/150
+3347 FT 12/1050/125
+3348 FT 12/1075/100
+3349 FT 12/1100/75
+3350 FT 12/1125/50
+3351 FT 12/1150/25
+3352 FT 12/1175/0
+3360 FT 12/0/1175
+3361 FT 12/25/1150
+3362 FT 12/50/1125
+3363 FT 12/75/1100
+3364 FT 12/100/1075
+3365 FT 12/125/1050
+3366 FT 12/150/1025
+3367 FT 12/175/1000
+3368 FT 12/200/975
+3369 FT 12/225/950
+3370 FT 12/250/925
+3371 FT 12/275/900
+3372 FT 12/300/875
+3373 FT 12/325/850
+3374 FT 12/350/825
+3375 FT 12/375/800
+3376 FT 12/400/775
+3377 FT 12/425/750
+3378 FT 12/450/725
+3379 FT 12/475/700
+3380 FT 12/500/675
+3381 FT 12/525/650
+3382 FT 12/550/625
+3383 FT 12/575/600
+3384 FT 12/600/575
+3385 FT 12/625/550
+3386 FT 12/650/525
+3387 FT 12/675/500
+3388 FT 12/700/475
+3389 FT 12/725/450
+3390 FT 12/750/425
+3391 FT 12/775/400
+3392 FT 12/800/375
+3393 FT 12/825/350
+3394 FT 12/850/325
+3395 FT 12/875/300
+3396 FT 12/900/275
+3397 FT 12/925/250
+3398 FT 12/950/225
+3399 FT 12/975/200
+3400 FT 12/1000/175
+3401 FT 12/1025/150
+3402 FT 12/1050/125
+3403 FT 12/1075/100
+3404 FT 12/1100/75
+3405 FT 12/1125/50
+3406 FT 12/1150/25
+3407 FT 12/1175/0
+
+Timestamp:2 ns:0
+numberOfBunchTrains=2
+numberOfUnpairedBunches= 0
+0 FT 12/350/600
+1 FT 12/375/575
+2 FT 12/400/550
+3 FT 12/425/525
+4 FT 12/450/500
+5 FT 12/475/475
+6 FT 12/500/450
+7 FT 12/525/425
+8 FT 12/550/400
+9 FT 12/575/375
+10 FT 12/600/350
+11 FT 12/625/325
+12 FT 12/650/300
+13 FT 12/675/275
+14 FT 12/700/250
+15 FT 12/725/225
+16 FT 12/750/200
+17 FT 12/775/175
+18 FT 12/800/150
+19 FT 12/825/125
+20 FT 12/850/100
+21 FT 12/875/75
+22 FT 12/900/50
+23 FT 12/925/25
+24 FT 12/950/0
+1000 F 12
+1001 F 12
+1002 F 12
+1003 F 12
+1004 F 12
+1005 F 12
+1006 F 12
+1007 F 12
+1008 F 12
+1009 F 12
+1010 F 12
+1011 F 12
+1012 F 12
+1013 F 12
+1014 F 12
+1015 F 12
+1016 F 12
+1017 F 12
+1018 F 12
+1019 F 12
+1020 F 12
+1021 F 12
+1022 F 12
+1023 F 12
+1024 F 12
+1025 F 12
+1026 F 12
+1027 F 12
+1028 F 12
+1029 F 12
+3550 FT 12/0/950
+3551 FT 12/25/925
+3552 FT 12/50/900
+3553 FT 12/75/875
+3554 FT 12/100/850
+3555 FT 12/125/825
+3556 FT 12/150/800
+3557 FT 12/175/775
+3558 FT 12/200/750
+3559 FT 12/225/725
+3560 FT 12/250/700
+3561 FT 12/275/675
+3562 FT 12/300/650
+3563 FT 12/325/625
+
+Timestamp:3 ns:0
+numberOfBunchTrains=1
+numberOfUnpairedBunches= 0
+100 FT 12/0/5875
+101 FT 12/25/5850
+102 FT 12/50/5825
+103 FT 12/75/5800
+104 FT 12/100/5775
+105 FT 12/125/5750
+106 FT 12/150/5725
+107 FT 12/175/5700
+112 FT 12/300/5575
+113 FT 12/325/5550
+114 FT 12/350/5525
+115 FT 12/375/5500
+116 FT 12/400/5475
+117 FT 12/425/5450
+118 FT 12/450/5425
+119 FT 12/475/5400
+124 FT 12/600/5275
+125 FT 12/625/5250
+126 FT 12/650/5225
+127 FT 12/675/5200
+128 FT 12/700/5175
+129 FT 12/725/5150
+130 FT 12/750/5125
+131 FT 12/775/5100
+136 FT 12/900/4975
+137 FT 12/925/4950
+138 FT 12/950/4925
+139 FT 12/975/4900
+140 FT 12/1000/4875
+141 FT 12/1025/4850
+142 FT 12/1050/4825
+143 FT 12/1075/4800
+148 FT 12/1200/4675
+149 FT 12/1225/4650
+150 FT 12/1250/4625
+151 FT 12/1275/4600
+152 FT 12/1300/4575
+153 FT 12/1325/4550
+154 FT 12/1350/4525
+155 FT 12/1375/4500
+160 FT 12/1500/4375
+161 FT 12/1525/4350
+162 FT 12/1550/4325
+163 FT 12/1575/4300
+164 FT 12/1600/4275
+165 FT 12/1625/4250
+166 FT 12/1650/4225
+167 FT 12/1675/4200
+172 FT 12/1800/4075
+173 FT 12/1825/4050
+174 FT 12/1850/4025
+175 FT 12/1875/4000
+176 FT 12/1900/3975
+177 FT 12/1925/3950
+178 FT 12/1950/3925
+179 FT 12/1975/3900
+184 FT 12/2100/3775
+185 FT 12/2125/3750
+186 FT 12/2150/3725
+187 FT 12/2175/3700
+188 FT 12/2200/3675
+189 FT 12/2225/3650
+190 FT 12/2250/3625
+191 FT 12/2275/3600
+196 FT 12/2400/3475
+197 FT 12/2425/3450
+198 FT 12/2450/3425
+199 FT 12/2475/3400
+200 FT 12/2500/3375
+201 FT 12/2525/3350
+202 FT 12/2550/3325
+203 FT 12/2575/3300
+208 FT 12/2700/3175
+209 FT 12/2725/3150
+210 FT 12/2750/3125
+211 FT 12/2775/3100
+212 FT 12/2800/3075
+213 FT 12/2825/3050
+214 FT 12/2850/3025
+215 FT 12/2875/3000
+220 FT 12/3000/2875
+221 FT 12/3025/2850
+222 FT 12/3050/2825
+223 FT 12/3075/2800
+224 FT 12/3100/2775
+225 FT 12/3125/2750
+226 FT 12/3150/2725
+227 FT 12/3175/2700
+232 FT 12/3300/2575
+233 FT 12/3325/2550
+234 FT 12/3350/2525
+235 FT 12/3375/2500
+236 FT 12/3400/2475
+237 FT 12/3425/2450
+238 FT 12/3450/2425
+239 FT 12/3475/2400
+244 FT 12/3600/2275
+245 FT 12/3625/2250
+246 FT 12/3650/2225
+247 FT 12/3675/2200
+248 FT 12/3700/2175
+249 FT 12/3725/2150
+250 FT 12/3750/2125
+251 FT 12/3775/2100
+256 FT 12/3900/1975
+257 FT 12/3925/1950
+258 FT 12/3950/1925
+259 FT 12/3975/1900
+260 FT 12/4000/1875
+261 FT 12/4025/1850
+262 FT 12/4050/1825
+263 FT 12/4075/1800
+268 FT 12/4200/1675
+269 FT 12/4225/1650
+270 FT 12/4250/1625
+271 FT 12/4275/1600
+272 FT 12/4300/1575
+273 FT 12/4325/1550
+274 FT 12/4350/1525
+275 FT 12/4375/1500
+280 FT 12/4500/1375
+281 FT 12/4525/1350
+282 FT 12/4550/1325
+283 FT 12/4575/1300
+284 FT 12/4600/1275
+285 FT 12/4625/1250
+286 FT 12/4650/1225
+287 FT 12/4675/1200
+292 FT 12/4800/1075
+293 FT 12/4825/1050
+294 FT 12/4850/1025
+295 FT 12/4875/1000
+296 FT 12/4900/975
+297 FT 12/4925/950
+298 FT 12/4950/925
+299 FT 12/4975/900
+304 FT 12/5100/775
+305 FT 12/5125/750
+306 FT 12/5150/725
+307 FT 12/5175/700
+308 FT 12/5200/675
+309 FT 12/5225/650
+310 FT 12/5250/625
+311 FT 12/5275/600
+316 FT 12/5400/475
+317 FT 12/5425/450
+318 FT 12/5450/425
+319 FT 12/5475/400
+320 FT 12/5500/375
+321 FT 12/5525/350
+322 FT 12/5550/325
+323 FT 12/5575/300
+328 FT 12/5700/175
+329 FT 12/5725/150
+330 FT 12/5750/125
+331 FT 12/5775/100
+332 FT 12/5800/75
+333 FT 12/5825/50
+334 FT 12/5850/25
+335 FT 12/5875/0
diff --git a/LumiBlock/LumiBlockComps/src/BunchCrossingCondAlg.cxx b/LumiBlock/LumiBlockComps/src/BunchCrossingCondAlg.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..487fe3c615c5f68559ab10375c88df6add7cde15
--- /dev/null
+++ b/LumiBlock/LumiBlockComps/src/BunchCrossingCondAlg.cxx
@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration.
+ */
+
+#include "BunchCrossingCondAlg.h"
+#include "StoreGate/ReadCondHandle.h"
+#include "StoreGate/WriteCondHandle.h"
+#include
+#include "CoralBase/Blob.h"
+#include "CoolKernel/IObject.h"
+
+StatusCode BunchCrossingCondAlg::initialize() {
+ ATH_CHECK( m_fillParamsFolderKey.initialize() );
+ ATH_CHECK( m_outputKey.initialize() );
+ return StatusCode::SUCCESS;
+}
+
+
+StatusCode BunchCrossingCondAlg::execute (const EventContext& ctx) const {
+
+ SG::ReadCondHandle fillParamsHdl (m_fillParamsFolderKey, ctx);
+ EventIDRange range;
+ ATH_CHECK( fillParamsHdl.range (range) );
+
+ const AthenaAttributeList* attrList=*fillParamsHdl;
+
+ if ((*attrList)["BCIDmasks"].isNull()) {
+ ATH_MSG_ERROR( "BunchCode is NULL in " << m_fillParamsFolderKey.key() << "!" );
+ return StatusCode::FAILURE;
+ }
+
+ //Output object:
+ auto bccd=std::make_unique();
+
+
+ // Do everything here for now, but should copy this to a vanilla object based on attrList
+ cool::UInt32 nb1 = (*attrList)["Beam1Bunches"].data();
+ cool::UInt32 nb2 = (*attrList)["Beam2Bunches"].data();
+ cool::UInt32 ncol = (*attrList)["LuminousBunches"].data();
+
+ ATH_MSG_DEBUG( "Beam1Bunches: " << nb1 );
+ ATH_MSG_DEBUG( "Beam2Bunches: " << nb2 );
+ ATH_MSG_DEBUG( "LuminousBunches: " << ncol );
+
+ const coral::Blob& blob = (*attrList)["BCIDmasks"].data();
+
+ if (m_isRun1) { //Assume run1 layout as explained at https://twiki.cern.ch/twiki/bin/view/AtlasComputing/CoolOnlineData
+ ATH_MSG_DEBUG("Assuming run 1 database");
+ // Verify length
+ if ( static_cast( blob.size() ) != 2 * (nb1 + nb2 + ncol)) {
+ ATH_MSG_WARNING( "BCIDmasks length " << blob.size() << " != 2 * " << (nb1+nb2+ncol) );
+ return StatusCode::SUCCESS;
+ }
+ const uint16_t* blobAddr=static_cast(blob.startingAddress());
+ //Decode beam1 filling:
+ for (size_t idx=0;idxm_beam1.set(bcid);
+ }
+
+ //Decode beam2 filling:
+ for (size_t idx=nb1;idxm_beam2.set(bcid);
+ }
+
+ //Decode colliding:
+ for (size_t idx=nb2;idxm_luminous.set(bcid);
+ }
+ }
+ else {
+ ATH_MSG_DEBUG("Assuming run 2/3 database");
+ //Assume run2 layout as explained at https://twiki.cern.ch/twiki/bin/view/AtlasComputing/CoolOnlineData
+ //Verify length
+ if (blob.size()!=BunchCrossingCondData::m_MAX_BCID) {
+ ATH_MSG_ERROR("Found blob with unexpected length " << blob.size() << "(expect " << BunchCrossingCondData::m_MAX_BCID <<") in folder " << m_fillParamsFolderKey.key());
+ return StatusCode::FAILURE;
+ }
+ const uint8_t* blobAddr=static_cast(blob.startingAddress());
+ for (uint32_t bcid=0;bcidm_beam1.set(bcid);
+ }
+ if (blobAddr[bcid] & 0x2) {
+ bccd->m_beam2.set(bcid);
+ }
+ if ((blobAddr[bcid] & 0x3) == 0x3) {
+ bccd->m_luminous.set(bcid);
+ }
+ }
+
+ //Consistency checks:
+ if (bccd->m_beam1.count()!= nb1) {
+ ATH_MSG_WARNING("Found " << bccd->m_beam1.count() << " bunches in beam1, expected " << nb1);
+ }
+
+ if (bccd->m_beam2.count()!= nb2) {
+ ATH_MSG_WARNING("Found " << bccd->m_beam2.count() << " bunches in beam2, expected " << nb2);
+ }
+
+ if (bccd->m_luminous.count()!= ncol) {
+ ATH_MSG_WARNING("Found " << bccd->m_luminous.count() << " colliding bunches, expected " << ncol);
+ }
+ }//end else run2
+
+ bccd->m_trains=findTrains(bccd->m_luminous, m_maxBunchSpacing,m_minBunchesPerTrain);
+
+ SG::WriteCondHandle writeHdl(m_outputKey, ctx);
+ ATH_CHECK( writeHdl.record (range, std::move (bccd)) );
+ return StatusCode::SUCCESS;
+}
+
+
+std::vector BunchCrossingCondAlg::findTrains(const std::bitset< BunchCrossingCondData::m_MAX_BCID>& collidingBCIDs, const int maxSpacingInTrain, const unsigned minBunchesPerTrain) const {
+
+ constexpr int MAX_BCID=collidingBCIDs.size();
+ std::vector result;
+
+ std::vector > holes;
+ int start=0;
+ int stop=0;
+
+ while (stopmaxSpacingInTrain) {
+ holes.emplace_back(start,stop);
+ }//end if >maxSpacingInTrain
+ ++stop;
+ }//end outer loop
+
+
+ ATH_MSG_DEBUG("Found " << holes.size() << " gaps larger than " << maxSpacingInTrain << " in the bunch structure");
+ if (msgLvl(MSG::VERBOSE)) {
+ for (auto& h : holes) {
+ msg(MSG::VERBOSE) << "Hole: " << h.first << " - " << h.second << endmsg;
+ }
+ }
+
+
+ if (holes.size()<1) {
+ ATH_MSG_ERROR("Looks like we have bunch train spanning the entire ring w/o any gap. Really?");
+ return result;
+ }
+
+
+ if (holes.size()>1) {
+ //generic case of having at least 2 gaps int the bunch structure
+ for (unsigned i=0;i result1;
+ result1.reserve(result.size());
+ for (const bunchTrain_t& train: result) {
+ if (train.m_nColl >= minBunchesPerTrain) {
+ result1.emplace_back(train);
+ }
+ }
+
+ ATH_MSG_DEBUG("Found " << result1.size() << " Bunch trains have at least " << minBunchesPerTrain << " colliding bunches");
+
+
+ if (msgLvl(MSG::VERBOSE)) {
+ for (auto& r : result1) {
+ msg(MSG::VERBOSE) << "Train " << r.m_first << " - " << r.m_last << ", " << r.m_nColl << " colliding bcids" << endmsg;
+ }
+ }
+
+ return result1;
+}
diff --git a/LumiBlock/LumiBlockComps/src/BunchCrossingCondAlg.h b/LumiBlock/LumiBlockComps/src/BunchCrossingCondAlg.h
new file mode 100644
index 0000000000000000000000000000000000000000..60584b2b453261659f1c79210d78e295e7f674b3
--- /dev/null
+++ b/LumiBlock/LumiBlockComps/src/BunchCrossingCondAlg.h
@@ -0,0 +1,58 @@
+// This file's extension implies that it's C, but it's really -*- C++ -*-.
+/*
+ * Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration.
+ */
+/**
+ * @file BunchCrossingCondAlg.h
+ * @author Walter Lampl
+ * @date Oct, 2019
+ * @brief Conditions algorithm to fill BunchCrossingCondData
+ */
+
+
+#ifndef LUMIBLOCKCOMPS_BUNCHCROSSINGCONDALG_H
+#define LUMIBLOCKCOMPS_BUNCHCROSSINGCONDALG_H
+
+
+#include "CoolLumiUtilities/FillParamsCondData.h"
+#include "LumiBlockData/BunchCrossingCondData.h"
+#include "AthenaBaseComps/AthReentrantAlgorithm.h"
+#include "StoreGate/ReadCondHandleKey.h"
+#include "StoreGate/WriteCondHandleKey.h"
+
+
+/**
+ * @brief Conditions algorithm to unpack fill parameters from COOL.
+ */
+class BunchCrossingCondAlg : public AthReentrantAlgorithm {
+
+public:
+ /// Forward base class ctor.
+ using AthReentrantAlgorithm::AthReentrantAlgorithm;
+ typedef BunchCrossingCondData::bunchTrain_t bunchTrain_t;
+
+
+ /// Gaudi initialize method.
+ virtual StatusCode initialize() override;
+
+
+ /// Algorithm execute method.
+ virtual StatusCode execute (const EventContext& ctx) const override;
+
+
+private:
+ /// Input conditions object.
+ SG::ReadCondHandleKey m_fillParamsFolderKey{ this, "FillParamsFolderKey", "/TDAQ/OLC/LHC/FILLPARAMS", "" };
+ /// Output conditions object.
+ SG::WriteCondHandleKey m_outputKey{this, "OutputKey", "BunchCrossingData", "Key of output CDO" };
+
+ std::vector findTrains(const std::bitset< BunchCrossingCondData::m_MAX_BCID>& pairsToConsume, const int maxSpacingInTrain, const unsigned minBunchesPerTrain) const;
+
+ Gaudi::Property m_maxBunchSpacing{this, "MaxBunchSpacing",5, "Maximal bunch-spacing to be considered a 'bunch train'"};
+ Gaudi::Property m_minBunchesPerTrain{this, "MinBunchesPerTrain",32, "Minimal number of bunches to be considerd a 'bunch train'"};
+
+ Gaudi::Property m_isRun1{this,"Run1",false,"Assume run-1 database"};
+};
+
+
+#endif
diff --git a/LumiBlock/LumiBlockComps/src/BunchCrossingCondTest.cxx b/LumiBlock/LumiBlockComps/src/BunchCrossingCondTest.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..f81bead3655e5921d223cf16731a9065a2bb1011
--- /dev/null
+++ b/LumiBlock/LumiBlockComps/src/BunchCrossingCondTest.cxx
@@ -0,0 +1,89 @@
+/*
+ Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+// Local include(s):
+#include "BunchCrossingCondTest.h"
+
+
+StatusCode BunchCrossingCondTest::initialize() {
+ ATH_MSG_INFO( "Initializing..." );
+
+ ATH_CHECK( m_inputKey.initialize() );
+
+ if (m_fileName.size()>0) {
+ m_fileOut.open(m_fileName);
+ if (m_fileOut.is_open()) {
+ ATH_MSG_INFO("Writing to file " << m_fileName);
+ }
+ else {
+ msg(MSG::ERROR) << "Failed to open file " << m_fileName << endmsg;
+ return StatusCode::FAILURE;
+ }
+ }
+ else
+ ATH_MSG_INFO("Writing to stdout");
+
+ return StatusCode::SUCCESS;
+}
+
+
+StatusCode BunchCrossingCondTest::execute() {
+
+ // Retrieve the object holding the BCID of the current event:
+ const EventContext& ctx = Gaudi::Hive::currentContext();
+
+
+ std::ostream& out = m_fileOut.good() ? m_fileOut : std::cout;
+
+ SG::ReadCondHandle readHdl(m_inputKey);
+ const BunchCrossingCondData* bccd=*readHdl;
+
+ out << "\nTimestamp:" << ctx.eventID().time_stamp() << " ns:" << ctx.eventID().time_stamp_ns_offset() << std::endl;
+ out << "numberOfBunchTrains=" << bccd->numberOfBunchTrains() << std::endl;
+ out << "numberOfUnpairedBunches= " << bccd->numberOfUnpairedBunches() << std::endl;
+
+ for (unsigned bcid=0;bcid<3564;++bcid) {
+ if (m_compact) {
+ printCompactInfo(bccd,bcid,out);
+ }
+ else {
+ printInfo(bccd,bcid,out);
+ }
+ }
+ return StatusCode::SUCCESS;
+}
+
+
+void BunchCrossingCondTest::printInfo(const BunchCrossingCondData* bccd, unsigned int bcid, std::ostream& out ) {
+
+ out << "BCID " << bcid;
+ out << " Filled=" << bccd->isFilled(bcid) << ", isInTrain=" << bccd->isInTrain(bcid)
+ << ", isUnPaired=" << bccd->isUnpaired(bcid)
+ << ", isBeam1="<< bccd->isBeam1(bcid) << ", isBeam2=" <isBeam2(bcid);
+ out << ", distFront=" << bccd->distanceFromFront(bcid)
+ << ", distTail= " << bccd->distanceFromTail(bcid);
+ out << std::endl;
+
+}
+
+void BunchCrossingCondTest::printCompactInfo(const BunchCrossingCondData* bccd, unsigned int bcid, std::ostream& out ) {
+
+ if (bccd->isBeam1(bcid) || bccd->isBeam2(bcid)) {
+ out << bcid << " ";
+ out << (bccd->isFilled(bcid) ? "F" : " ");
+ out << (bccd->isInTrain(bcid) ? "T" : " ");
+ out << (bccd->isUnpaired(bcid) ? "U" : " ");
+ out << (bccd->isBeam1(bcid) ? "1" : " ");
+ out << (bccd->isBeam2(bcid) ? "2" : " ");
+ int df=bccd->distanceFromFront(bcid);
+ if (df>=0) {
+ out << "/" << df;
+ }
+ int dt=bccd->distanceFromTail(bcid);
+ if (dt>=0) {
+ out << "/" << dt;
+ }
+ out << std::endl;
+ }
+}
diff --git a/LumiBlock/LumiBlockComps/src/BunchCrossingCondTest.h b/LumiBlock/LumiBlockComps/src/BunchCrossingCondTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..cc78063370370609fbee3f94de9b4ac637739666
--- /dev/null
+++ b/LumiBlock/LumiBlockComps/src/BunchCrossingCondTest.h
@@ -0,0 +1,47 @@
+// Dear emacs, this is -*- c++ -*-
+
+/*
+ Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef LUMIBLOCKCOMPS_BUNCHCROSSINGCONDTEST_H
+#define LUMIBLOCKCOMPS_BUNCHCROSSINGCONDTEST_H
+
+// Gaudi/Athena include(s):
+#include "GaudiKernel/ToolHandle.h"
+#include "GaudiKernel/Property.h"
+#include "AthenaBaseComps/AthAlgorithm.h"
+#include "LumiBlockData/BunchCrossingCondData.h"
+
+#include
+
+class BunchCrossingCondTest : public AthAlgorithm {
+
+public:
+ /// Regular Athena algorithm constructor
+ using AthAlgorithm::AthAlgorithm;
+
+ /// Initialization run before the event loop
+ virtual StatusCode initialize();
+ /// Function called once per event
+ virtual StatusCode execute();
+
+private:
+ /// Function for printing detailed info about a given bunch crossing
+ void printInfo(const BunchCrossingCondData* bccd, unsigned int bcid, std::ostream& out);
+
+ void printCompactInfo(const BunchCrossingCondData* bccd, unsigned int bcid, std::ostream& out);
+
+ SG::ReadCondHandleKey m_inputKey{this,"InputKey","BunchCrossingData",""};
+
+ Gaudi::Property m_fileName{this,"FileName",""};
+
+ Gaudi::Property m_compact{this,"compact",false};
+
+ std::ofstream m_fileOut;
+
+};
+
+
+
+#endif
diff --git a/LumiBlock/LumiBlockComps/src/components/LumiBlockComps_entries.cxx b/LumiBlock/LumiBlockComps/src/components/LumiBlockComps_entries.cxx
index fab9b79799f7be22fda123995a06152027974a58..c1a57bd9a117cb2d9dbe2ed2013feeed89495514 100644
--- a/LumiBlock/LumiBlockComps/src/components/LumiBlockComps_entries.cxx
+++ b/LumiBlock/LumiBlockComps/src/components/LumiBlockComps_entries.cxx
@@ -9,7 +9,10 @@
#include "LumiBlockComps/LumiBlockTester.h"
#include "../LBDurationCondAlg.h"
#include "../LuminosityCondAlg.h"
+#include "../BunchCrossingCondAlg.h"
#include "../TrigLiveFractionCondAlg.h"
+
+#include "../BunchCrossingCondTest.h"
#endif
DECLARE_COMPONENT( CreateLumiBlockCollectionFromFile )
@@ -20,7 +23,9 @@ DECLARE_COMPONENT( LumiBlockMuTool )
DECLARE_COMPONENT( LumiCalcSvc )
DECLARE_COMPONENT( LBDurationCondAlg )
DECLARE_COMPONENT( LuminosityCondAlg )
+DECLARE_COMPONENT( BunchCrossingCondAlg )
DECLARE_COMPONENT( TrigLiveFractionCondAlg )
+DECLARE_COMPONENT ( BunchCrossingCondTest )
#endif
DECLARE_COMPONENT( LumiBlockMetaDataTool )
diff --git a/LumiBlock/LumiBlockData/LumiBlockData/BunchCrossingCondData.h b/LumiBlock/LumiBlockData/LumiBlockData/BunchCrossingCondData.h
new file mode 100644
index 0000000000000000000000000000000000000000..5ee23e6243415881545ee6eb784abd1945d49bdd
--- /dev/null
+++ b/LumiBlock/LumiBlockData/LumiBlockData/BunchCrossingCondData.h
@@ -0,0 +1,274 @@
+// This file's extension implies that it's C, but it's really -*- C++ -*-.
+/*
+ * Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration.
+ */
+/**
+ * @file LumiBlockData/BunchCrossingCondData.h
+ * @author Walter Lampl
+ * @date Oct 2019
+ * @brief Replaces the BunchCrossing AlgTool used in run1/2
+ */
+
+
+#ifndef LUMIBLOCKDATA_BUNCHCROSSINGCONDDATA_H
+#define LUMIBLOCKDATA_BUNCHCROSSINGCONDDATA_H
+
+
+#include "AthenaKernel/CondCont.h"
+#include "AthenaKernel/CLASS_DEF.h"
+#include
+#include
+
+
+class BunchCrossingCondData {
+
+public:
+
+ typedef unsigned int bcid_type;
+ static constexpr int m_MAX_BCID=3564;
+ static constexpr int m_BUNCH_SPACING = 25;
+
+
+ /// The simplest query: Is the bunch crossing filled or not?
+ /**
+ * This is the simplest question that one can ask the configuration:
+ * Was the current BCID coming from a collision or not? If people
+ * properly use the triggers to select their events, then this function
+ * is not too useful, but for some special analyses it might be a good
+ * idea to have it.
+ *
+ * @param bcid The bcid that should be checked
+ * @returns true
if the bcid was a collision bunch crossing,
+ * false
otherwise
+ */
+ bool isFilled(const bcid_type bcid ) const;
+
+
+ /// Function deciding if a given bunch crossing is in a filled train
+ /**
+ * Most of the functionality of the interface only makes sense for bunches
+ * which were in trains. So this function can be checked at the beginning
+ * of the analysis code, to make sure that the BC in question is interesting.
+ *
+ * @param bcid The bcid that should be checked
+ * @returns true
if the bcid is part of a bunch train,
+ * false
otherwise
+ */
+ bool isInTrain(const bcid_type bcid ) const;
+
+ /// Function deciding if a given bunch crossing has an unpaired bunch
+ /**
+ * This function can be used to quickly decide whether the current event
+ * came from an unpaired bunch. Note that the function doesn't make a difference
+ * between "isolated" and "non isolated" unpaired bunches. You have to use
+ * the gapBeforeBunch
function to decide how isolated an
+ * unpaired bunch is.
+ *
+ * @param bcid The bcid that should be checked
+ * @returns true
if the bcid belongs to an unpaired bunch,
+ * false
otherwise
+ */
+ bool isUnpaired(const bcid_type bcid ) const;
+
+ /// Function deciding if there was a bunch from "beam 1" in this bunch crossing
+ /**
+ * This function is useful for differentiating the unpaired bunch
+ * crossings based on which beam provided the unpaired bunch.
+ *
+ * @param bcid The bcid that should be checked
+ * @returns true
if the bcid contained a bunch from beam 1,
+ * false
otherwise
+ */
+ bool isBeam1(const bcid_type bcid ) const;
+
+ /// Function deciding if there was a bunch from "beam 2" in this bunch crossing
+ /**
+ * This function is useful for differentiating the unpaired bunch
+ * crossings based on which beam provided the unpaired bunch.
+ *
+ * @param bcid The bcid that should be checked
+ * @returns true
if the bcid contained a bunch from beam 2,
+ * false
otherwise
+ */
+ bool isBeam2(const bcid_type bcid ) const;
+
+
+ /// Enumeration specifying the units in which to expect the bunch distance type
+ /**
+ * To make it clear for the following functions what units to interpret their
+ * return values in, it is possible to request their return values in different
+ * units.
+ */
+ enum BunchDistanceType {
+ NanoSec, ///< Distance in nanoseconds
+ BunchCrossings, ///< Distance in units of 25 nanoseconds
+ /// Distance in units of filled bunches (depends on filling scheme)
+ FilledBunches
+ };
+
+ /// The distance of the specific bunch crossing from the front of the train
+ /**
+ * Get the distance of the specified bunch crossing from the front of the
+ * bunch train. If the specified bunch crossing is not part of a bunch
+ * train, then the function returns -1.
+ *
+ * The distance can be returned in multiple units. By default it is
+ * returned in nanoseconds. If one specifies BunchCrossings, then the
+ * distance is returned in nanosec_distance / 25. Finally, if one
+ * specifies FilledBunches, then the distance is returned in the units of
+ * the bunch spacing within the train.
+ *
+ * @param bcid The bcid that should be checked
+ * @param type The type of the requested return value
+ * @returns The distance of the bcid in question from the front of its
+ * bunch train
+ */
+
+ int distanceFromFront( const bcid_type bcid,
+ const BunchDistanceType type = NanoSec ) const;
+ /// The distance of the specific bunch crossing from the tail of the train
+ /**
+ * Get the distance of the specified bunch crossing from the tail of the
+ * bunch train. If the specified bunch crossing is not part of a bunch
+ * train, then the function returns -1.
+ *
+ * The distance can be returned in multiple units. By default it is
+ * returned in nanoseconds. If one specifies BunchCrossings, then the
+ * distance is returned in nanosec_distance / 25. Finally, if one
+ * specifies FilledBunches, then the distance is returned in the units of
+ * the bunch spacing within the train.
+ *
+ * @param bcid The bcid that should be checked
+ * @param type The type of the requested return value
+ * @returns The distance of the bcid in question from the tail of its
+ * bunch train
+ */
+ int distanceFromTail( const bcid_type bcid,
+ const BunchDistanceType type = NanoSec ) const;
+
+ /// Gap before the train this BCID is in
+ /**
+ * Get the gap that's between the train that the specified BCID is in, and
+ * the previous train. This is a useful number for some jet/MET studies.
+ *
+ * Note that the function doesn't work with the FilledBunches type, as the
+ * size of the gaps doesn't have to be a multiple of the bunch distance
+ * within the trains.
+ *
+ * Returns "-1" when there's no right answer to the question. (BCID not
+ * part of a train.)
+ *
+ * @param bcid The bcid whose train should be investigated
+ * @param type The type of the requested return value
+ * @returns The gap before the train of the specified bcid
+ */
+
+ unsigned int numberOfFilledBunches() const;
+
+ /// Get the number of unpaired bunches in the current configuration
+ /**
+ * This function gives the total number of unpaired bunches in the current
+ * configuration. This could come in handy in some circumstances.
+ *
+ * @returns The total number of unpaired bunches in the machine
+ */
+ unsigned int numberOfUnpairedBunches() const;
+
+ /// Get the number of the bunch trains in the current configuration
+ /**
+ * This function gives the total number of bunch trains that were
+ * identified in the current configuration. This could come in handy in
+ * some circumstances.
+ *
+ * @returns The total number of bunch trains in the machine
+ */
+ unsigned int numberOfBunchTrains() const;
+
+
+ /// Get colliding and total bcids in a train
+ /**
+ * This function gives the number of colliding bunches and the total
+ * number of bcids in a given train
+ *
+ * @param bcid The bcid whose train should be investigated
+ * @returns a pair bcids in this train
+ */
+ std::pair bunchTrainPopulation(const bcid_type bcid) const;
+
+
+private:
+
+ friend class BunchCrossingCondAlg;// The cond-alg filling this class
+
+
+ // Data
+ std::bitset m_beam1;
+ std::bitset m_beam2;
+ std::bitset m_luminous;
+
+ struct bunchTrain_t {
+ bunchTrain_t(bcid_type first, bcid_type last, unsigned ncoll) :
+ m_first(first),m_last(last),m_nColl(ncoll) {};
+ int m_first; ///First BCID of this train
+ int m_last; ///Last BCID of this train
+ unsigned m_nColl; ///Number of colliding bunches in this train
+ };
+
+ std::vector m_trains;
+
+ unsigned m_nTrains; //might be one less than the size of m_trains
+
+ ///Helper method to find the train of a bcid (nullptr if bcd is not in a train)
+ const bunchTrain_t* findTrain(const bcid_type bcid) const;
+
+ ///Helper method to count colliding bunches in the range from-to
+ unsigned countColliding(int from, int to) const;
+
+};
+
+CLASS_DEF (BunchCrossingCondData, 158463439, 0)
+CONDCONT_DEF (BunchCrossingCondData, 157905099 );
+
+inline
+bool BunchCrossingCondData::isFilled(const bcid_type bcid) const {
+ if (ATH_UNLIKELY(bcid>=m_MAX_BCID)) return false;
+ return m_luminous.test(bcid);
+}
+
+inline
+bool BunchCrossingCondData::isBeam1(const bcid_type bcid) const {
+ if (ATH_UNLIKELY(bcid>=m_MAX_BCID)) return false;
+ return m_beam1.test(bcid);
+}
+
+inline
+bool BunchCrossingCondData::isBeam2(const bcid_type bcid) const {
+ if (ATH_UNLIKELY(bcid>=m_MAX_BCID)) return false;
+ return m_beam2.test(bcid);
+}
+
+
+inline
+bool BunchCrossingCondData::isUnpaired(const bcid_type bcid) const {
+ if (ATH_UNLIKELY(bcid>=m_MAX_BCID)) return false;
+ return ((m_beam1.test(bcid) || m_beam2.test(bcid)) && !m_luminous.test(bcid));
+
+}
+
+inline
+unsigned BunchCrossingCondData::numberOfFilledBunches() const {
+ return m_luminous.count();
+}
+
+
+inline
+unsigned int BunchCrossingCondData::numberOfBunchTrains() const {
+ return m_trains.size();
+}
+
+inline
+bool BunchCrossingCondData::isInTrain(const bcid_type bcid ) const {
+ return (findTrain(bcid) != nullptr);
+}
+
+#endif // not COOLLUMIUTILITIES_FILLPARAMSCONDDATA_H
diff --git a/LumiBlock/LumiBlockData/src/BunchCrossingCondData.cxx b/LumiBlock/LumiBlockData/src/BunchCrossingCondData.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..49eb6ffa7e106ba3c0d7f05e0f0e0cc024d2083f
--- /dev/null
+++ b/LumiBlock/LumiBlockData/src/BunchCrossingCondData.cxx
@@ -0,0 +1,124 @@
+#include "LumiBlockData/BunchCrossingCondData.h"
+#include "AthenaKernel/getMessageSvc.h"
+#include
+
+const BunchCrossingCondData::bunchTrain_t* BunchCrossingCondData::findTrain(const bcid_type bcid) const {
+
+ const int bcidi=static_cast(bcid);
+ const auto it=std::find_if(m_trains.begin(),m_trains.end(),[&bcidi](const bunchTrain_t& bt){return (bt.m_first<=bcidi && bt.m_last>=bcidi);});
+
+ if (it==m_trains.end()) {
+ return nullptr;
+ }
+ else {
+ return &(*it);
+ }
+
+ /*
+ auto& it=std::lower_bound(m_trains.begin(),m_trains.end(),bunchTrain_t(bcid,0,0));
+ if (it==m_trains.end() || it==m_trains.begin()) return nullptr;
+
+ //it points now tho the train that starts after the bcid we are looking for
+ //if the bcid is in a train, it must be the train before.
+ it--;
+ if (it->m_first>=bcid && it->m_last<=bcid) {
+ return &(*it);
+ }
+ else {
+ return nullptr;
+ }
+ */
+
+
+}
+
+int BunchCrossingCondData::distanceFromFront( const bcid_type bcid,
+ const BunchDistanceType type ) const {
+
+ const bunchTrain_t* bt=findTrain(bcid);
+ if (!bt) {
+ return -1;
+ }
+
+ const int dist=bcid-bt->m_first;
+
+ switch( type ) {
+ case NanoSec:
+ return dist*m_BUNCH_SPACING;
+ break;
+ case BunchCrossings:
+ return dist;
+ case FilledBunches:
+ return countColliding(bt->m_first,bt->m_last);
+ default:
+ MsgStream msg(Athena::getMessageSvc(),"BunchCrossingCondData::distanceFromFront");
+ msg << MSG::ERROR << "BunchDistanceType not understood!" << endmsg;
+ return -1;
+ }//end switch
+}
+
+int BunchCrossingCondData::distanceFromTail( const bcid_type bcid,
+ const BunchDistanceType type ) const {
+
+ const bunchTrain_t* bt=findTrain(bcid);
+ if (!bt) {
+ return -1;
+ }
+
+ const int dist=bt->m_last-bcid;
+
+ switch( type ) {
+ case NanoSec:
+ return dist*m_BUNCH_SPACING;
+ break;
+ case BunchCrossings:
+ return dist;
+ case FilledBunches:
+ return countColliding(bt->m_first,bt->m_last);
+ default:
+ MsgStream msg(Athena::getMessageSvc(),"BunchCrossingCondData::distanceFromTail");
+ msg << MSG::ERROR << "BunchDistanceType not understood!" << endmsg;
+ return -1;
+ }//end switch
+}
+
+unsigned BunchCrossingCondData::numberOfUnpairedBunches() const {
+ return ((m_beam1 | m_beam2) & ~m_luminous).count();
+}
+
+
+std::pair BunchCrossingCondData::bunchTrainPopulation(const bcid_type bcid) const {
+
+ const bunchTrain_t* bt=findTrain(bcid);
+ if (!bt) {
+ return std::pair(0,0);
+ }
+ else {
+ return std::pair(bt->m_nColl,(bt->m_last-bt->m_first));
+ }
+}
+
+
+unsigned BunchCrossingCondData::countColliding(int from, int to) const {
+ unsigned ncoll=0;
+
+ if (from<0) {
+ //wrap-around ...
+ for (int idx=m_MAX_BCID-from;idx<0;++idx) {
+ if (m_luminous.test(idx)) ++ncoll;
+ }
+ from=0;
+ }
+
+ if (to>m_MAX_BCID) {
+ for (int idx=0;idx