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 120 of file ValidationMatrix_v2.py.

Constructor & Destructor Documentation

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 122 of file ValidationMatrix_v2.py.

122  def __init__(self, work_path=None, db_name=None, clear_db=False, dry=False, no_url=False, use_external=False):
123  self.work_path = work_path
124  self.db_name = db_name
125  self.clear_db = clear_db
126  self.dry = dry
127  self.no_url = no_url
129 
def __init__(self, work_path=None, db_name=None, clear_db=False, dry=False, no_url=False, use_external=False)
work_path
Create working directory if not given.

Member Function Documentation

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

Definition at line 141 of file ValidationMatrix_v2.py.

References estimatePileup.basename, utils_v2.check_disk_for_space(), ValidationMatrix_v2.ReleaseComparison.clear_db, compare_using_files_v2.RootFileComparison.db_name, ValidationMatrix_v2.ReleaseComparison.db_name, ValidationMatrix_v2.ReleaseComparison.dry, cmsRelvalreport.exit, utils_v2.get_size_to_download(), utils_v2.get_version(), utils_v2.init_database(), join(), list(), utils_v2.make_file_pairs(), genParticles_cff.map, ValidationMatrix_v2.merge_dbs(), ValidationMatrix_v2.ReleaseComparison.no_url, ValidationMatrix_v2.partial_db_name(), 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().

141  def compare(self, rel1, frags1, rel2, frags2, st_tests, url=None, title=None):
142  print '\n################# Searching for files ###################'
143  if self.no_url:
144  print 'Searching for files on disk at %s' % (self.work_path)
145  files1, files2 = search_on_disk(self.work_path, rel1, frags1, rel2, frags2)
146  file_pairs = make_file_pairs(files1, files2)
147  else:
148  print 'Searching for files online at:'
149  files_with_urls1, files_with_urls2 = recursive_search_online(url, rel1, frags1, rel2, frags2)
150  file_pairs = make_file_pairs(files_with_urls1, files_with_urls2)
151  files_with_urls1.update(files_with_urls2)
152  files1, files2 = list(zip(*file_pairs))
153  paired_files_with_urls = [(file, files_with_urls1[file]) for file in files1 + files2]
154 
155  if self.dry:
156  print 'DRY: nothing to do. Exiting.'
157  exit()
158 
159  ## Create working directory if not given.
160  if not self.work_path:
161  self.work_path = '%s___VS___%s' % (get_version(files1[0]), get_version(files2[0]))
162  if self.db_name:
163  self.db_name = join(self.work_path, self.db_name)
164 
165  if not exists(self.work_path):
166  print '\n################### Preparing directory ###################'
167  print 'Creating working directory: %s ...' % self.work_path,
168  makedirs(self.work_path)
169  print 'Done.'
170 
171  print '\n################# Downloading the files ###################'
172  total_size, files_to_download = get_size_to_download(self.work_path, paired_files_with_urls)
173  check_disk_for_space(self.work_path, total_size)
174 
175  ## Download needed files.
176  q = Queue()
177  show_status_bar.q = q
178  auth_download_file.q = q
179  auth_download_file.work_dir = self.work_path
180 
181  Process(target=show_status_bar, args=(total_size,)).start()
182  Pool(2).map(auth_download_file, files_to_download)
183  if total_size:
184  print "Done."
185 
186  ## Create database
187  print '\n################# Preparing Database ###################'
188  if not self.db_name:
189  self.db_name = '%s___VS___%s.db' % (get_version(file_pairs[0][0]), get_version(file_pairs[0][1]))
190 
191  if self.clear_db:
192  print 'Clearing DB: %s...' % self.db_name,
193  open(join(self.work_path, self.db_name), 'w').close()
194  print 'Done.'
195 
196  ## Compare file pairs.
197  self.db_name = init_database(join(self.work_path, self.db_name))
198 
199  # TODO: Use multiprocessing for this task.
200  for st_test_name in st_tests.split(','):
201  print '\n################# Comparing Releases (%s) ###################' % st_test_name
202  st_test = tests[st_test_name]()
203 
204  some_files_compared = False
205  file_comparison_ids = []
207  # Compare files using compare_using_files_v2.py
208  arg_list = [list(pair) + [self.work_path, partial_db_name(self.db_name, i),
209  self.clear_db] for i, pair in enumerate(file_pairs)]
210  pool = Pool(7)
211  pool.map(call_compare_using_files, arg_list)
212 
213  # Merge databases
214  print '\n################# Merging DBs (%s) ###################' % st_test_name
215  for i, pair in enumerate(file_pairs):
216  tmp_db = partial_db_name(self.db_name, i)
217  print 'Merging %s...' % (basename(tmp_db),),
218  file_comparison_ids.append(merge_dbs(self.db_name, tmp_db))
219  remove(tmp_db)
220  print 'Done.'
221  some_files_compared = True
222  else:
223  file_comparison = RootFileComparison(self.db_name)
224 
225  for file1, file2 in file_pairs:
226  # TODO: If files are not found desplay nice message.
227  # TODO: Maybe subprocces would control the unwanted reports of RootFileComparison.compare()
228  file1_path = join(self.work_path, file1)
229  file2_path = join(self.work_path, file2)
230 
231  if not file_comparison.was_compared(file1, file2, st_test_name):
232  print "Comparing:\n%s\n%s\n" % (file1, file2)
233  file_comparison_id = file_comparison.compare(file1_path, file2_path, st_test)
234  file_comparison_ids.append(file_comparison_id)
235  some_files_compared = True
236  else:
237  print "Already compared:\n%s\n%s\n" % (file1, file2)
238 
239  ## Calculate statistics for the release.
240  release1 = get_version(file_pairs[0][0])
241  release2 = get_version(file_pairs[0][1])
242  if some_files_compared:
243  release_comparison_id = self.was_compared(release1, release2, st_test_name)
244  conn = sqlite3.connect(self.db_name)
245  c = conn.cursor()
246  if not release_comparison_id:
247  print 'Inserting release "%s VS %s" description.\n' % (release1, release2)
248  if not title:
249  title = "%s__VS__%s" % (release1, release2)
250  c.execute('''INSERT INTO ReleaseComparison(title, release1, release2,
251  statistical_test) VALUES (?, ?, ?, ?)''', (title,
252  release1, release2, st_test_name))
253  release_comparison_id = c.lastrowid
254  c.executemany('''UPDATE RootFileComparison SET release_comparison_id = ?
255  WHERE id == ?''', [(release_comparison_id, fid) for fid in file_comparison_ids])
256  conn.commit()
257  conn.close()
258 
259 
Definition: start.py:1
def get_version(filename)
Definition: utils_v2.py:432
def make_file_pairs(files1, files2)
Definition: utils_v2.py:105
def partial_db_name(db_name, i)
def recursive_search_online(url, rel1, frags1, rel2, frags2)
Definition: utils_v2.py:213
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:443
work_path
Create working directory if not given.
def search_on_disk(work_path, rel1, frags1, rel2, frags2)
Definition: utils_v2.py:253
static std::string join(char **cmd)
Definition: RemoteFile.cc:18
def was_compared(self, release1, release2, st_test_name)
def remove(d, key, TELL=False)
Definition: MatrixUtil.py:211
def check_disk_for_space(work_path, size_needed)
Definition: utils_v2.py:459
def compare(self, rel1, frags1, rel2, frags2, st_tests, url=None, title=None)
def init_database(db_path)
Utils.
Definition: utils_v2.py:388
def merge_dbs(main_db, partial_db)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run
def ValidationMatrix_v2.ReleaseComparison.was_compared (   self,
  release1,
  release2,
  st_test_name 
)

Definition at line 130 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().

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

Member Data Documentation

ValidationMatrix_v2.ReleaseComparison.clear_db
ValidationMatrix_v2.ReleaseComparison.db_name

Download needed files.

Compare file pairs.

Create database

Definition at line 124 of file ValidationMatrix_v2.py.

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

ValidationMatrix_v2.ReleaseComparison.dry
ValidationMatrix_v2.ReleaseComparison.no_url
ValidationMatrix_v2.ReleaseComparison.use_external_script_to_compare_files
ValidationMatrix_v2.ReleaseComparison.work_path

Create working directory if not given.

Definition at line 123 of file ValidationMatrix_v2.py.

Referenced by ValidationMatrix_v2.ReleaseComparison.compare().