CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Functions | Variables
mps_setup_new_align Namespace Reference

Functions

def add_campaign
 
def copy_default_templates
 
def get_first_match
 
def main
 

Variables

tuple required_version = (2,7)
 

Function Documentation

def mps_setup_new_align.add_campaign (   campaign_file,
  campaign,
  args 
)
Adds a line with campaign information from `args` to `campaign_file`.

Arguments:
- `campaign_file`: output file
- `campaign`: name of the campaign
- `args`: command line arguments for this campaign

Definition at line 139 of file mps_setup_new_align.py.

References split.

Referenced by main().

140 def add_campaign(campaign_file, campaign, args):
141  """Adds a line with campaign information from `args` to `campaign_file`.
142 
143  Arguments:
144  - `campaign_file`: output file
145  - `campaign`: name of the campaign
146  - `args`: command line arguments for this campaign
147  """
148 
149  campaign_info = campaign.ljust(10)
150  campaign_info += os.environ["USER"].ljust(12)
151  campaign_info += datetime.date.today().isoformat().ljust(11)
152 
153  version = os.environ["CMSSW_VERSION"]
154  if args.checked_out[1]:
155  local_area = os.path.join(os.environ["CMSSW_BASE"], "src")
156  with open(os.devnull, 'w') as devnull:
157  # check which tags (-> e.g. release names) point at current commit
158  p = subprocess.Popen(["git", "tag", "--points-at", "HEAD"],
159  cwd = local_area, stdout=subprocess.PIPE,
160  stderr=devnull)
161  tags = p.communicate()[0].split()
162  # check for deleted, untracked, modified files respecting .gitignore:
163  p = subprocess.Popen(["git", "ls-files", "-d", "-o", "-m",
164  "--exclude-standard"],
165  cwd = local_area, stdout=subprocess.PIPE,
166  stderr=devnull)
167  files = p.communicate()[0].split()
168  # check for staged tracked files:
169  p = subprocess.Popen(["git", "diff", "--name-only", "--staged"],
170  cwd = local_area, stdout=subprocess.PIPE,
171  stderr=devnull)
172  files.extend(p.communicate()[0].split())
173  if version not in tags or len(files) != 0:
174  version += " (mod.)"
175 
176  campaign_info += version.ljust(34)
177  campaign_info += args.type.ljust(17)
178  campaign_info += args.description.strip() + "\n"
179 
180  fcntl.flock(campaign_file, fcntl.LOCK_EX)
181  campaign_file.write(campaign_info)
182  fcntl.flock(campaign_file, fcntl.LOCK_UN)
183 
double split
Definition: MVATrainer.cc:139
def mps_setup_new_align.copy_default_templates (   MPS_dir,
  next_campaign 
)
Copies the default configuration templates.

Arguments:
- `MPS_dir`: location of the default templates
- `next_campaign`: destination for the copy operation

Definition at line 184 of file mps_setup_new_align.py.

Referenced by main().

185 def copy_default_templates(MPS_dir, next_campaign):
186  """Copies the default configuration templates.
187 
188  Arguments:
189  - `MPS_dir`: location of the default templates
190  - `next_campaign`: destination for the copy operation
191  """
192 
193  default_conf_dir = os.path.join(MPS_dir, "test")
194  for f in ("universalConfigTemplate.py", "alignment_config.ini"):
195  shutil.copy(os.path.join(default_conf_dir, f), next_campaign)
196  print " - copied default configuration templates from",
197  print "'"+default_conf_dir+"'"
198 
def mps_setup_new_align.get_first_match (   regex,
  directory 
)
Checks if `directory` matches `regex` and returns the first match converted
to an integer. If it does not match -1 is returned.

Arguments:
- `regex`: Regular expression to be tested against
- `directory`: name of the directory under test

Definition at line 122 of file mps_setup_new_align.py.

Referenced by main().

123 def get_first_match(regex, directory):
124  """
125  Checks if `directory` matches `regex` and returns the first match converted
126  to an integer. If it does not match -1 is returned.
127 
128  Arguments:
129  - `regex`: Regular expression to be tested against
130  - `directory`: name of the directory under test
131  """
132 
133  result = regex.search(directory)
134  if result is None:
135  return -1
136  else:
137  return int(result.group(1))
138 
def mps_setup_new_align.main (   argv = None)
Main routine of the script.

Arguments:
- `argv`: arguments passed to the main routine

Definition at line 28 of file mps_setup_new_align.py.

References add_campaign(), helper.checked_out_MPS(), copy_default_templates(), get_first_match(), and join().

28 
29 def main(argv = None):
30  """Main routine of the script.
31 
32  Arguments:
33  - `argv`: arguments passed to the main routine
34  """
35 
36  if argv == None:
37  argv = sys.argv[1:]
38 
39  parser = argparse.ArgumentParser(
40  description="Setup a new alignment campaign in the MPproduction area.")
41  parser.add_argument("-d", "--description", dest="description", required=True,
42  help="comment to describe the purpose of the campaign")
43  parser.add_argument("-t", "--data-type", dest="type", required=True,
44  metavar="TYPE", choices=["MC", "data"],
45  help="type of the input data (choices: %(choices)s)")
46  parser.add_argument("-c", "--copy", dest="copy", metavar="CAMPAIGN",
47  help="input campaign (optional)")
48  args = parser.parse_args(argv)
49 
50 
51  if os.path.basename(os.path.normpath(os.getcwd())) != "MPproduction":
52  print ">>> Cannot create a campaign outside of the 'MPproduction' area."
53  print ">>> Please change to the 'MPproduction' directory first."
54  sys.exit(1)
55 
56  if len(args.description.strip()) == 0:
57  print ">>> Please provide a non-empty description of the campaign"
58  sys.exit(1)
59 
60  MPS_dir = os.path.join("src", "Alignment", "MillePedeAlignmentAlgorithm")
61  args.checked_out = checked_out_MPS()
62  if args.checked_out[0]:
63  MPS_dir = os.path.join(os.environ["CMSSW_BASE"], MPS_dir)
64  else:
65  MPS_dir = os.path.join(os.environ["CMSSW_RELEASE_BASE"], MPS_dir)
66  args.MPS_dir = MPS_dir
67 
68  mp_regex = re.compile(r"mp([0-9]+).*")
69  all_campaign_numbers = sorted(map(lambda x: get_first_match(mp_regex, x),
70  os.listdir(".")))
71  next_number = (0
72  if len(all_campaign_numbers) == 0
73  else sorted(all_campaign_numbers)[-1] + 1)
74 
75  while True:
76  try:
77  number_of_digits = len(str(next_number))
78  number_of_digits = 4 if number_of_digits <= 4 else number_of_digits
79  next_campaign = "mp{{0:0{0}d}}".format(number_of_digits)
80  next_campaign = next_campaign.format(next_number)
81  os.makedirs(next_campaign)
82  print ">>> Created new campaign:", next_campaign
83 
84  campaign_list = "MP_ali_list.txt"
85  with open(campaign_list, "a") as f:
86  add_campaign(f, next_campaign, args)
87  backup_dir = ".MP_ali_list"
88  try:
89  os.makedirs(backup_dir)
90  except OSError as e:
91  if e.args == (17, 'File exists'):
92  pass
93  else:
94  raise
95  shutil.copy(campaign_list, backup_dir)
96  print " - updated campaign list '"+campaign_list+"'"
97 
98  if args.copy is None:
99  copy_default_templates(MPS_dir, next_campaign)
100  else:
101  copied_files = []
102  for ext in ("py", "ini", "txt"):
103  for config_file in glob.glob(args.copy+"/*."+ext):
104  copied_files.append(os.path.basename(config_file))
105  shutil.copy(config_file, next_campaign)
106  if len(copied_files) == 0:
107  print " - no configuration files for '"+args.copy+"'"
108  copy_default_templates(MPS_dir, next_campaign)
109  else:
110  print " - copied configuration files from",
111  print "'"+args.copy+"':", ", ".join(copied_files)
112 
113  except OSError as e:
114  if e.args == (17, 'File exists'):
115  next_number += 1 # someone created a campaign ~at the same time
116  continue
117  else:
118  raise
119  break
120 
static std::string join(char **cmd)
Definition: RemoteFile.cc:18
def checked_out_MPS
Definition: helper.py:3

Variable Documentation

tuple mps_setup_new_align.required_version = (2,7)

Definition at line 19 of file mps_setup_new_align.py.