ATLAS Offline Software
Loading...
Searching...
No Matches
createTRTPIDTool.py
Go to the documentation of this file.
1# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
2
3__author__ = 'mborodin'
4
5# python createTRTPIDTool.py infile.txt 'sqlite://;schema=TRTPID.db;dbname=CONDBR2'
6
7import sys
8import logging
9from PyCool import cool
10
11FOLDER_NAME = '/TRT/Calib/PID_vector'
12TAG_NAME = 'TRTCalibPID_vector_Data15_noArCFs_noZR_00-01'
13# python createTRTPIDTool.py CorrectionFactors_HRformat_Jared_Data.txt 'sqlite://;schema=TRTPIDData.db;dbname=CONDBR2'
14
15
16#TAG_NAME = 'TRTCalibPID_vector_MC_OnSetMC_CorrMC_00-01'
17# python createTRTPIDTool.py CorrectionFactors_HRformat_Jared_MC.txt 'sqlite://;schema=TRTPIDMC.db;dbname=CONDBR2'
18
19
20logging.basicConfig(level=logging.DEBUG)
21_logger = logging.getLogger('createPIDTool')
22
23
24
25
26
27def store_PID_to_folder(db,values_list):
28 """
29 Function to create folder FOLDER_NAME in db with channels and input data from values_list with tag TAG_NAME
30 :param db: Open cool db
31 :param values_list: list of tuples ('channel name', valus array)
32
33 """
34 spec = cool.RecordSpecification()
35 spec.extend('array_value',cool.StorageType.Float)
36 _logger.info('Create folder %s' % FOLDER_NAME)
37 folder_spec = cool.FolderSpecification(cool.FolderVersioning.MULTI_VERSION,
38 spec,
39 cool.PayloadMode.VECTORPAYLOAD)
40 folder = db.createFolder(FOLDER_NAME, folder_spec,
41 ' <timeStamp>run-lumi</timeStamp><addrHeader><address_header service_type="71" clid="55403898"/></addrHeader><typeName>CondAttrListVec</typeName>',
42 True)
43
44 for index, channel_name in enumerate(values_list):
45 folder.createChannel(index,channel_name[0])
46 print '%i - %s' % (index, channel_name[0])
47 folder.setupStorageBuffer()
48 for index, channel_values in enumerate(values_list):
49 _logger.info('Store data from %s' % channel_values[0])
50 values = channel_values[1]
51 # print channel_values[0]
52 # print channel_values[1]
53 vector = cool.IRecordVector()
54 for value in values:
55 # print value
56 data = cool.PyCool.Helpers.IRecordPtr(spec)
57 data.get()['array_value'] = value
58 vector.push_back(data)
59 folder.storeObject(0,cool.ValidityKeyMax, vector, index, TAG_NAME )
60 folder.flushStorageBuffer()
61
62
63def read_PID_txt(input_file_name):
64 """
65 Read data from input txt file in awful format
66 :param input_file_name: input file path
67 """
68 output_list=[]
69 with open(input_file_name,'r') as input_file:
70 for line in input_file:
71# print line
72 #line = line.replace(' ','').replace("\n",'')
73 line = line.replace("\n",'')
74 if line and (line.find('#')==-1):
75 #elements = line.split(',')
76 elements = line.split()
77 print elements
78
79 if len(elements) > 5:
80 #Why?!
81 barrel_or_endcap = elements[2].replace('EndcapWheels','EW')
82 electrons = elements[3].replace('Electrons','Elecs')
83 ChannelName = elements[4] + '_' +elements[1] + '_' + elements[2] + '_' +elements[0] + '_' + elements[3]
84 #ChannelName = elements[4] + '_' + elements[2] + '_' +elements[1] + '_' +elements[0] + '_' + elements[3]
85 #output_list.append(((elements[1]+'_'+barrel_or_endcap+'_'+electrons),map(float,elements[8:])))
86 print elements[0:4]
87 print ChannelName
88 # print elements[5:]
89 output_list.append(( ChannelName ,map(float,elements[5:])))
90 else:
91 print "SIZE OF THE LINE ODD. CHECK!!! "
92 print line
93 return output_list
94
95
96def main():
97
98 if len(sys.argv) != 3:
99 print "Usage: %s input_file connection_string" % sys.argv[0]
100 return -1
101 values_dict = read_PID_txt(sys.argv[1])
102 print "\nREAD OVER"
103 connect_string = sys.argv[2]
104 _logger.info("data from file: %s" % values_dict)
105 #print values_dict
106 try:
107 dbSvc = cool.DatabaseSvcFactory.databaseService()
108 _logger.debug('dropping database %s' % connect_string)
109 dbSvc.dropDatabase( connect_string )
110 _logger.debug('creating database')
111 db = dbSvc.createDatabase( connect_string )
112 except Exception,e:
113 _logger.error("Problem with database: %s" % e)
114 return -1
115 store_PID_to_folder(db, values_dict)
116 db.closeDatabase()
117
118if __name__=='__main__':
119 main()
STL class.
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition hcg.cxx:310
store_PID_to_folder(db, values_list)
read_PID_txt(input_file_name)