为大型强子对撞机信号监测项目提供的带有信号访问和处理api的软件包。
lhcsmapi的Python项目详细描述
大型强子对撞机信号监测api包
这是一个带有api的包,用于lhc信号监测项目的信号访问和处理。
先决条件
为了使用api,必须将python包安装程序安装为
pipinstall--userlhcsmapi
在https://pypi.org/project/lhcsmapi/查看最新版本
api依赖于必须以类似方式安装的外部python包。软件包列表存储在<;u>;requirements.txt<;/u>;文件中。
api的文档存储在http://cern.ch/lhc-sm-api。下面是代码结构的摘录和最常用函数的片段。
项目结构
- 卡尔
- calsdbsignal.py
- detectbmodepattern.py
- 星号
- dbsignal.py
- signal.py
- 信号电气.py
- 信号处理.py
- signalutilities.py
- 流入
- infloxdbsignal.py
- 死后
- pmdbsignal.py
- pmdbrequest.py
- 元数据
- metadata.py
- qpsmetadata.json
- fgcmetadata.json
- ipqd2metadata.json
- ipqd4metadata.json
- ipqd8metadata.json
- qpsmetadata.json
- rbmetadata.json
- rqmetadata.json
- time.py
- timer.py
时间
时间类封装提供了一组用于在各种时间格式之间转换的方法。此外,它还为给定时段之间的天数提供生成器。主要方法有:
- time.convertToUnix时间戳(输入,单位='ns')
- time.converttostring(输入,单位='ns')
- time.convertToDateTime(输入,单位='ns')
- time.converttopandastimestamp(输入,单位='ns')
fromlhcsmapi.TimeimportTimestringDate="2018-05-01 00:00:00"Time.convertToUnixTimestamp(stringDate,unit="ns")>>>1525125600000000000
fromlhcsmapi.TimeimportTimefromdatetimeimportdatetimedateTime=datetime(2017,7,2,1,23,27,0)Time.convertToString(stringDate,unit="ns")>>>'2017-07-02 01:23:27'
fromlhcsmapi.TimeimportTimestringDate="2019-01-02 23:59:11"Time.convertToDatetime(stringDate,unit="ns")>>>datetime.datetime(2019,1,2,23,59,11,tzinfo=<DstTzInfo'Europe/Zurich'CET+1:00:00STD>)
fromlhcsmapi.TimeimportTimestringDate="2019-07-10 10:23:27.013"Time.convertToPandasTimestamp(stringDate,unit="ns")>>>Timestamp('2019-07-10 10:23:27.013000+0200',tz='Europe/Zurich')
- time.getQueryPeriodUnixtTime()
fromlhcsmapi.TimeimportTimestartTimeData=1426220459491000000endTimeData=1426220479491000000Time.getQueryPeriodInUnixTime(startTimeData,endTimeData,None,tz='Europe/Zurich')>>>(1426220459491000000,1426220479491000000)
fromlhcsmapi.TimeimportTimestartTimeData=1426220459491000000durationData=[(20,'s')]Time.getQueryPeriodInUnixTime(startTimeData,None,durationData,tz='Europe/Zurich')>>>(1426220459491000000,1426220479491000000)
fromlhcsmapi.TimeimportTimestartTimeData=1426220469491000000durationData=[(10,'s'),(10,'s')]Time.getQueryPeriodInUnixTime(startTimeData,None,durationData,tz='Europe/Zurich')>>>(1426220459491000000,1426220479491000000)
- time.daterange(开始日期,结束日期)
fromlhcsmapi.TimeimportTimefromdatetimeimportdatestartDate=date(2014,1,1)endDate=date(2014,1,3)forsingleDateinTime.daterange(startDate,endDate):print(singleDate)>>>2014-01-01>>>2014-01-02
fromdatetimeimportdatestartDate=date(2014,1,5)endDate=date(2014,1,3)forsingleDateinTime.daterange(startDate,endDate):print(singleDate)>>>
元数据
元数据类存储有关信号和电路名称的信息。
fromlhcsmapi.metadata.MetadataimportMetadatamagnetType="MB"circuitType="RB"component="QPS"magnetTypeToSignalMetadata=Metadata.getMetadata(component,magnetType)magnetTypeToSignalMetadata[magnetType]>>>{'className':'DQAMCNMB_PMHSU',>>>'sourcePrefix':'MB_',>>>'system':'QPS',>>>'source':'*',>>>'magnetNameRegExp':'[ABC]{1}\\d+[LR]{1}[1-8]{1}',>>>'uNames':['U_HDS_1','U_HDS_2','U_HDS_3','U_HDS_4'],>>>'iNames':['I_HDS_1','I_HDS_2','I_HDS_3','I_HDS_4'],>>>'rNames':['R_HDS_1','R_HDS_2','R_HDS_3','R_HDS_4'],>>>'dRNames':['dR_HDS_1','dR_HDS_2','dR_HDS_3','dR_HDS_4'],>>>'filterNames':['U_HDS_1',>>>'U_HDS_2',>>>'U_HDS_3',>>>'U_HDS_4',>>>'I_HDS_1',>>>'I_HDS_2',>>>'I_HDS_3',>>>'I_HDS_4'],>>>'uNamesCals':['MB.{}:U_HDS_1',>>>'MB.{}:U_HDS_2',>>>'MB.{}:U_HDS_3',>>>'MB.{}:U_HDS_4'],>>>'iNamesCals':['MB.{}:I_HDS_1',>>>'MB.{}:I_HDS_2',>>>'MB.{}:I_HDS_3',>>>'MB.{}:I_HDS_4']}
pmdbquery
pmdbrequest类封装pm数据库查询,以简化给定时间段内pm事件的查询创建和浏览。
- 预期成功响应
fromsource.post_mortem.PmDbRequestimportPmDbRequestsource="*"system="QPS"className="DQAMCNMB_PMHSU"selectedDayTimeStamp=1426201200000000000eventDurationSeconds=24*60*60PmDbRequest.findEvents(source,system,className,eventTime=selectedDayTimeStamp,duration=[(eventDurationSeconds,'s')])>>>[('B20L5',1426220469491000000),>>>...
- 预期失败响应:
fromsource.post_mortem.PmDbRequestimportPmDbRequestsource="*"system="QPS"className="DQAMCNMB_PMHSU"selectedDayTimeStamp=1426201200000000000eventDurationSeconds=1PmDbRequest.findEvents(source,system,className,eventTime=selectedDayTimeStamp,duration=[(eventDurationSeconds,'s')])>>>UserWarning:QueryingPostMortemfailedusingthefollowingquery:http://pm-api-pro/v2/pmdata/header/within/duration?system=QPS&className=DQAMCNMB_PMHSU&source=*&fromTimestampInNanos=1426201200000000000&durationInNanos=1000000000returnednodatasoanemptystringisbeingreturned
信号
signal类封装使用信号数据库的行为。它提供了用于访问事后分析、cals和infloxdbapi的读写方法。
- CALS成功响应
fromlhcsmapi.dbsignal.SignalimportSignalimportpytimberldb=pytimber.LoggingDB()arcCurrentName="RPTE.UA47.RB.A45:I_MEAS"startTime=1426220459491000000endTime=1426220479491000000I_MEAS=Signal().read('cals',name=arcCurrentName,startTime=startTime,endTime=endTime,ldb=ldb)print(I_MEAS.head())>>>RPTE.UA47.RB.A45:I_MEAS>>>1.426220e+0910071.5>>>1.426220e+0910076.5>>>1.426220e+0910081.5>>>1.426220e+0910086.5>>>1.426220e+0910091.5
fromlhcsmapi.dbsignal.SignalimportSignalimportpytimberldb=pytimber.LoggingDB()arcCurrentName="RPTE.UA47.RB.A45:I_MEAS"startTime=1426220459491000000duration=[(20,'s')]I_MEAS=Signal().read('cals',name=arcCurrentName,startTime=startTime,duration=duration,ldb=ldb)print(I_MEAS.head())>>>RPTE.UA47.RB.A45:I_MEAS>>>1.426220e+0910071.5>>>1.426220e+0910076.5>>>1.426220e+0910081.5>>>1.426220e+0910086.5>>>1.426220e+0910091.5
fromlhcsmapi.dbsignal.SignalimportSignalimportpytimberldb=pytimber.LoggingDB()arcCurrentName="RPTE.UA47.RB.A45:I_MEAS"startTime=1426220469491000000duration=[(10,'s'),(10,'s')]I_MEAS=Signal().read('cals',name=arcCurrentName,startTime=startTime,duration=duration,ldb=ldb)print(I_MEAS.head())>>>RPTE.UA47.RB.A45:I_MEAS>>>1.426220e+0910071.5>>>1.426220e+0910076.5>>>1.426220e+0910081.5>>>1.426220e+0910086.5>>>1.426220e+0910091.5
- CALS失败响应
fromlhcsmapi.dbsignal.SignalimportSignalimportpytimberldb=pytimber.LoggingDB()arcCurrentName="RPTE.UA47.RB.A45:I_MEAS"startTime=1426220469491000000duration=[(10,'s'),(10,'s')]I_MEAS=Signal().read('cals',name=arcCurrentName,startTime=startTime,duration=duration)print(I_MEAS.head())>>>Exception:Youhavetoprovideainstanceofpytimber.LoggingDBviatheldbkeyword
fromlhcsmapi.dbsignal.SignalimportSignalimportpytimberldb=pytimber.LoggingDB()arcCurrentName="RPTE.UA47.RB.A45:I_MEA"startTime=1426220469491000000duration=[(10,'s'),(10,'s')]I_MEAS=Signal().read('cals',name=arcCurrentName,startTime=startTime,duration=duration,ldb=ldb)print(I_MEAS.head())>>>WARNING:pytimber.pytimber:Novariablesfound.>>>EmptyDataFrame>>>Columns:[]>>>Index:[]>>>UserWarning:QueryingCALSwiththeparametersname:RPTE.UA47.RB.A45:I_MEA,starttime:1426220459.4910002andendtime:1426220479.4910002returnednodata.>>>AnemptyDataFramewasreturned.>>>___________________________________________________________________________________>>>ReproducetheerrorusingtherawpytimberAPI:>>>importpytimber>>>ldb=pytimber.LoggingDB()>>>ldb.get(RPTE.UA47.RB.A45:I_MEA,1426220459.4910002,1426220479.49100
- PM成功响应
fromlhcsmapi.dbsignal.SignalimportSignalsystem="QPS"className="DQAMCNMB_PMHSU"magnet="B20L5"signalName="I_HDS_4"timestamp=1426220469491000000I_HDS_4=Signal().read('pm',system=system,className=className,source=magnet,signalName=signalName,eventTime=timestamp)print(I_HDS_4.head())>>>I_HDS_4>>>14262204694910208320.089648>>>14262204694910260400.091555>>>14262204694910312480.091555>>>14262204694910364560.093463>>>14262204694910416640.091555
- PM故障响应
fromlhcsmapi.dbsignal.SignalimportSignalsystem="QPS"className="DQAMCNMB_PMHSU"magnet="B20L5"signalName="I_HDS_4"timestamp=1426220469491000000I_HDS_4=Signal().read('pm',system=system,className=className,source=magnet,signalName=signalName,eventTime=timestamp)print(I_HDS_4.head())>>>QueryingPostMortemfailedusingthefollowingquery:>>>http://pm-api-pro/v2/pmdata/signal?system=QPS&className=DQAMCNMB_PMHS&source=B20L5×tampInNanos=1426220469491000000&signal=I_HDS_4