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