Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F7878959
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Subscribers
None
View Options
diff --git a/bin/rivet-findid b/bin/rivet-findid
--- a/bin/rivet-findid
+++ b/bin/rivet-findid
@@ -1,187 +1,187 @@
#! /usr/bin/env python
"""%prog ID [ID ...]
%prog -- paper ID lookup helper for Rivet
Looks up the Rivet analysis and other ID formats matching the given ID.
Arguments:
ID A paper ID in one of the following formats
- - arXiv: yymm.nnnn
+ - arXiv: yymm.nnnnn
- arXiv: foo-bar/yymmnnn
- SPIRES: [S]nnnnnnn
- Inspire: [I]nnnnnn[n]"""
import rivet, sys, os, re
rivet.util.check_python_version()
rivet.util.set_process_name(os.path.basename(__file__))
def main():
## Handle command line args
import optparse
op = optparse.OptionParser(usage=__doc__)
opts, args = op.parse_args()
if not args:
op.print_help()
exit(1)
## Set up some variables before the loop over args
- arxiv_pattern = re.compile('^\d\d[01]\d\.\d{4}$|^(hep-(ex|ph|th)|nucl-ex)/\d\d[01]\d{4}$')
+ arxiv_pattern = re.compile('^\d\d[01]\d\.\d{4,5}$|^(hep-(ex|ph|th)|nucl-ex)/\d\d[01]\d{4}$')
spires_pattern = re.compile('^(S|I)?(\d{6}\d?)$')
## Loop over requested IDs
for N, id in enumerate(args):
a_match = arxiv_pattern.match(id)
s_match = spires_pattern.match(id)
RESULT = {}
if a_match:
RESULT = try_arxiv(id)
elif s_match:
prefix = s_match.group(1)
number = s_match.group(2)
if prefix == 'S' and len(number) == 7:
RESULT = try_spires(number)
elif prefix == 'I':
RESULT = try_inspire(number)
else:
if len(number) == 7:
RESULT = try_spires(number)
RESULT.update( try_inspire(number) )
else:
sys.stderr.write('error Pattern %s does not match any known ID pattern.\n' % id)
continue
rivet_candidates = []
if 'inspire' in RESULT:
rivet_candidates += try_rivet('I'+RESULT['inspire'])
if not rivet_candidates and 'spires' in RESULT:
rivet_candidates += try_rivet('S'+RESULT['spires'])
if rivet_candidates:
RESULT['rivet'] = rivet_candidates[0]
if N > 0:
print ""
output(RESULT)
def output(result):
if not result.get('title'):
return
print 'title %s' % result['title']
ar = result.get('arxiv')
if ar:
print 'arxiv %s' % ar
print 'arxiv_url http://arxiv.org/abs/%s' % ar
sp = result.get('spires')
if sp:
print 'spires %s' % sp
insp = result.get('inspire')
if insp:
print 'inspire %s' % insp
print 'inspire_url http://inspirehep.net/record/%s' % insp
tex = result.get('bibtex')
if tex:
print 'bibtex %s' % tex
riv = result.get('rivet')
if riv:
print 'rivet %s' % riv
def try_arxiv(id):
url = 'http://inspirehep.net/search?p=eprint+%s&of=xm' % id
ret = _search_inspire(url)
if ret.get('arxiv') == id:
return ret
else:
return {}
def try_spires(id):
url = 'http://inspirehep.net/search?p=key+%s&of=xm' % id
ret = _search_inspire(url)
if ret.get('spires') == id:
return ret
else:
return {}
def try_inspire(id):
url = 'http://inspirehep.net/record/%s/export/xm' % id
ret = _search_inspire(url)
if ret.get('inspire') == id:
return ret
else:
return {}
def try_rivet(id):
id = re.compile(id)
import rivet
ALL_ANALYSES = rivet.AnalysisLoader.analysisNames()
return filter(id.search, ALL_ANALYSES)
def _search_inspire(url):
result = {}
import urllib2
urlstream = urllib2.urlopen(url)
ET = rivet.util.import_ET()
tree = ET.parse(urlstream)
for i in tree.getiterator('{http://www.loc.gov/MARC21/slim}controlfield'):
if i.get('tag') == '001':
result['inspire'] = i.text
for i in tree.getiterator('{http://www.loc.gov/MARC21/slim}datafield'):
if i.get('tag') == '035':
entries = {}
for c in i.getchildren():
for k,v in c.items():
if k=='code':
entries[v] = c.text
if entries.get('9') == 'SPIRESTeX':
result['bibtex'] = entries['a']
if i.get('tag') == '037':
entries = {}
for c in i.getchildren():
for k,v in c.items():
if k=='code':
entries[v] = c.text
if entries.get('9') == 'arXiv':
result['arxiv'] = entries['a'].replace('arXiv:','')
elif i.get('tag') == '970':
for c in i.getchildren():
if c.text[:7] == 'SPIRES-':
result['spires'] = c.text[7:]
elif i.get('tag') == '245':
for c in i.getchildren():
result['title'] = c.text
return result
if __name__ == "__main__":
main()
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Tue, Nov 19, 7:05 PM (1 d, 10 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3805755
Default Alt Text
(5 KB)
Attached To
rRIVETHG rivethg
Event Timeline
Log In to Comment