CMS 3D CMS Logo

List of all members | Public Member Functions | Public Attributes
ValidationMatrix_v2.ReleaseComparison Class Reference
Inheritance diagram for ValidationMatrix_v2.ReleaseComparison:

Public Member Functions

def __init__ (self, work_path=None, db_name=None, clear_db=False, dry=False, no_url=False, use_external=False)
 
def compare (self, rel1, frags1, rel2, frags2, st_tests, url=None, title=None)
 
def was_compared (self, release1, release2, st_test_name)
 

Public Attributes

 clear_db
 
 db_name
 Download needed files. More...
 
 dry
 
 no_url
 
 use_external_script_to_compare_files
 
 work_path
 Create working directory if not given. More...
 

Detailed Description

Generates release comparison information and stores it on SQLite3 .db file.

Definition at line 121 of file ValidationMatrix_v2.py.

Constructor & Destructor Documentation

◆ __init__()

def ValidationMatrix_v2.ReleaseComparison.__init__ (   self,
  work_path = None,
  db_name = None,
  clear_db = False,
  dry = False,
  no_url = False,
  use_external = False 
)

Definition at line 123 of file ValidationMatrix_v2.py.

123  def __init__(self, work_path=None, db_name=None, clear_db=False, dry=False, no_url=False, use_external=False):
124  self.work_path = work_path
125  self.db_name = db_name
126  self.clear_db = clear_db
127  self.dry = dry
128  self.no_url = no_url
129  self.use_external_script_to_compare_files = use_external
130 
def __init__(self, dataset, job_number, job_id, job_name, isDA, isMC, applyBOWS, applyEXTRACOND, extraconditions, runboundary, lumilist, intlumi, maxevents, gt, allFromGT, alignmentDB, alignmentTAG, apeDB, apeTAG, bowDB, bowTAG, vertextype, tracktype, refittertype, ttrhtype, applyruncontrol, ptcut, CMSSW_dir, the_dir)

Member Function Documentation

◆ compare()

def ValidationMatrix_v2.ReleaseComparison.compare (   self,
  rel1,
  frags1,
  rel2,
  frags2,
  st_tests,
  url = None,
  title = None 
)

Definition at line 142 of file ValidationMatrix_v2.py.

References utils_v2.check_disk_for_space(), ValidationMatrix_v2.ReleaseComparison.clear_db, compare_using_files_v2.RootFileComparison.db_name, ValidationMatrix_v2.ReleaseComparison.db_name, AllInOneConfig::Options.dry, ValidationMatrix_v2.ReleaseComparison.dry, beamvalidation.exit(), utils_v2.get_size_to_download(), uploadConditions.get_version(), utils_v2.init_database(), join(), utils_v2.make_file_pairs(), genParticles_cff.map, ValidationMatrix_v2.merge_dbs(), ValidationMatrix_v2.ReleaseComparison.no_url, ValidationMatrix_v2.partial_db_name(), print(), utils_v2.recursive_search_online(), MatrixUtil.remove(), utils_v2.search_on_disk(), ValidationMatrix_v2.ReleaseComparison.use_external_script_to_compare_files, compare_using_files_v2.RootFileComparison.was_compared(), ValidationMatrix_v2.ReleaseComparison.was_compared(), compare_using_files_v2.RootFileComparison.work_path, ValidationMatrix_v2.ReleaseComparison.work_path, and ComparisonHelper.zip().

142  def compare(self, rel1, frags1, rel2, frags2, st_tests, url=None, title=None):
143  print('\n################# Searching for files ###################')
144  if self.no_url:
145  print('Searching for files on disk at %s' % (self.work_path))
146  files1, files2 = search_on_disk(self.work_path, rel1, frags1, rel2, frags2)
147  file_pairs = make_file_pairs(files1, files2)
148  else:
149  print('Searching for files online at:')
150  files_with_urls1, files_with_urls2 = recursive_search_online(url, rel1, frags1, rel2, frags2)
151  file_pairs = make_file_pairs(files_with_urls1, files_with_urls2)
152  files_with_urls1.update(files_with_urls2)
153  files1, files2 = list(zip(*file_pairs))
154  paired_files_with_urls = [(file, files_with_urls1[file]) for file in files1 + files2]
155 
156  if self.dry:
157  print('DRY: nothing to do. Exiting.')
158  exit()
159 
160 
161  if not self.work_path:
162  self.work_path = '%s___VS___%s' % (get_version(files1[0]), get_version(files2[0]))
163  if self.db_name:
164  self.db_name = join(self.work_path, self.db_name)
165 
166  if not exists(self.work_path):
167  print('\n################### Preparing directory ###################')
168  print('Creating working directory: %s ...' % self.work_path, end=' ')
169  makedirs(self.work_path)
170  print('Done.')
171 
172  print('\n################# Downloading the files ###################')
173  total_size, files_to_download = get_size_to_download(self.work_path, paired_files_with_urls)
174  check_disk_for_space(self.work_path, total_size)
175 
176 
177  q = Queue()
178  show_status_bar.q = q
179  auth_download_file.q = q
180  auth_download_file.work_dir = self.work_path
181 
182  Process(target=show_status_bar, args=(total_size,)).start()
183  Pool(2).map(auth_download_file, files_to_download)
184  if total_size:
185  print("Done.")
186 
187 
188  print('\n################# Preparing Database ###################')
189  if not self.db_name:
190  self.db_name = '%s___VS___%s.db' % (get_version(file_pairs[0][0]), get_version(file_pairs[0][1]))
191 
192  if self.clear_db:
193  print('Clearing DB: %s...' % self.db_name, end=' ')
194  open(join(self.work_path, self.db_name), 'w').close()
195  print('Done.')
196 
197 
198  self.db_name = init_database(join(self.work_path, self.db_name))
199 
200  # TODO: Use multiprocessing for this task.
201  for st_test_name in st_tests.split(','):
202  print('\n################# Comparing Releases (%s) ###################' % st_test_name)
203  st_test = tests[st_test_name]()
204 
205  some_files_compared = False
206  file_comparison_ids = []
207  if self.use_external_script_to_compare_files:
208  # Compare files using compare_using_files_v2.py
209  arg_list = [list(pair) + [self.work_path, partial_db_name(self.db_name, i),
210  self.clear_db] for i, pair in enumerate(file_pairs)]
211  pool = Pool(7)
212  pool.map(call_compare_using_files, arg_list)
213 
214  # Merge databases
215  print('\n################# Merging DBs (%s) ###################' % st_test_name)
216  for i, pair in enumerate(file_pairs):
217  tmp_db = partial_db_name(self.db_name, i)
218  print('Merging %s...' % (basename(tmp_db),), end=' ')
219  file_comparison_ids.append(merge_dbs(self.db_name, tmp_db))
220  remove(tmp_db)
221  print('Done.')
222  some_files_compared = True
223  else:
224  file_comparison = RootFileComparison(self.db_name)
225 
226  for file1, file2 in file_pairs:
227  # TODO: If files are not found desplay nice message.
228  # TODO: Maybe subprocces would control the unwanted reports of RootFileComparison.compare()
229  file1_path = join(self.work_path, file1)
230  file2_path = join(self.work_path, file2)
231 
232  if not file_comparison.was_compared(file1, file2, st_test_name):
233  print("Comparing:\n%s\n%s\n" % (file1, file2))
234  file_comparison_id = file_comparison.compare(file1_path, file2_path, st_test)
235  file_comparison_ids.append(file_comparison_id)
236  some_files_compared = True
237  else:
238  print("Already compared:\n%s\n%s\n" % (file1, file2))
239 
240 
241  release1 = get_version(file_pairs[0][0])
242  release2 = get_version(file_pairs[0][1])
243  if some_files_compared:
244  release_comparison_id = self.was_compared(release1, release2, st_test_name)
245  conn = sqlite3.connect(self.db_name)
246  c = conn.cursor()
247  if not release_comparison_id:
248  print('Inserting release "%s VS %s" description.\n' % (release1, release2))
249  if not title:
250  title = "%s__VS__%s" % (release1, release2)
251  c.execute('''INSERT INTO ReleaseComparison(title, release1, release2,
252  statistical_test) VALUES (?, ?, ?, ?)''', (title,
253  release1, release2, st_test_name))
254  release_comparison_id = c.lastrowid
255  c.executemany('''UPDATE RootFileComparison SET release_comparison_id = ?
256  WHERE id == ?''', [(release_comparison_id, fid) for fid in file_comparison_ids])
257  conn.commit()
258  conn.close()
259 
260 
Definition: start.py:1
bool compare(const P &i, const P &j)
def make_file_pairs(files1, files2)
Definition: utils_v2.py:108
def partial_db_name(db_name, i)
def recursive_search_online(url, rel1, frags1, rel2, frags2)
Definition: utils_v2.py:216
OutputIterator zip(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp)
def get_size_to_download(work_path, files_with_urls)
Definition: utils_v2.py:446
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
def search_on_disk(work_path, rel1, frags1, rel2, frags2)
Definition: utils_v2.py:256
static std::string join(char **cmd)
Definition: RemoteFile.cc:19
def remove(d, key, TELL=False)
Definition: MatrixUtil.py:223
def check_disk_for_space(work_path, size_needed)
Definition: utils_v2.py:462
def init_database(db_path)
Utils.
Definition: utils_v2.py:391
def merge_dbs(main_db, partial_db)
def exit(msg="")

◆ was_compared()

def ValidationMatrix_v2.ReleaseComparison.was_compared (   self,
  release1,
  release2,
  st_test_name 
)

Definition at line 131 of file ValidationMatrix_v2.py.

References compare_using_files_v2.RootFileComparison.db_name, and ValidationMatrix_v2.ReleaseComparison.db_name.

Referenced by ValidationMatrix_v2.ReleaseComparison.compare().

131  def was_compared(self, release1, release2, st_test_name):
132  conn = sqlite3.connect(self.db_name)
133  c = conn.cursor()
134  c.execute('''SELECT id FROM ReleaseComparison WHERE release1=? AND
135  release2=? AND statistical_test=?''', (release1, release2, st_test_name))
136  release_comparison_id = c.fetchone()
137  conn.close()
138  if release_comparison_id:
139  return release_comparison_id[0]
140  return False
141 

Member Data Documentation

◆ clear_db

ValidationMatrix_v2.ReleaseComparison.clear_db

◆ db_name

ValidationMatrix_v2.ReleaseComparison.db_name

Download needed files.

Compare file pairs.

Create database

Definition at line 125 of file ValidationMatrix_v2.py.

Referenced by ValidationMatrix_v2.ReleaseComparison.compare(), and ValidationMatrix_v2.ReleaseComparison.was_compared().

◆ dry

ValidationMatrix_v2.ReleaseComparison.dry

◆ no_url

ValidationMatrix_v2.ReleaseComparison.no_url

◆ use_external_script_to_compare_files

ValidationMatrix_v2.ReleaseComparison.use_external_script_to_compare_files

◆ work_path

ValidationMatrix_v2.ReleaseComparison.work_path

Create working directory if not given.

Definition at line 124 of file ValidationMatrix_v2.py.

Referenced by ValidationMatrix_v2.ReleaseComparison.compare().