IMP  2.0.1
The Integrative Modeling Platform
filenames_manipulation.h
Go to the documentation of this file.
1 /**
2  * \file filenames_manipulation.h
3  * \brief Generation of projections using the central section theorem
4  * Copyright 2007-2013 IMP Inventors. All rights reserved.
5  */
6 
7 #ifndef IMPEM2D_FILENAMES_MANIPULATION_H
8 #define IMPEM2D_FILENAMES_MANIPULATION_H
9 
10 #include "IMP/exception.h"
11 #include "IMP/base_types.h"
12 #include <iostream>
13 #include <fstream>
14 
15 #include <boost/filesystem/path.hpp>
16 #include <boost/filesystem/exception.hpp>
17 #include <boost/version.hpp>
18 
19 IMPEM2D_BEGIN_NAMESPACE
20 
21 //! Reads a selection file
22 /*!
23  \param[in] fn Name of the selection file. First column is are file names
24  and second are 1 (file is selected) or 0 (file ignored)
25  \param[out] List of the selected names.
26 */
28  String name;
29  Strings names;
30  std::ifstream in;
31  int not_ignored;
32  in.open(fn.c_str(), std::ios::in);
33  if (!in) {
34  IMP_THROW("Unable to read file " << fn,
35  IOException);
36  }
37 
38  while(in >> name >> not_ignored) {
39  if (not_ignored) {
40  names.push_back(name);
41  }
42  }
43  in.close();
44  return names;
45 }
46 
47 //! generates consecutive filenames: basic_name-i.extension
48 //! Adds zeros at the front of the number when neccessary
49 inline Strings create_filenames(unsigned long number,
50  String basic_name, String extension) {
51  // Number of digits to use
52  int digits=0;
53  unsigned long count=1;
54  while(count <= number) {
55  digits+=1;
56  count*=10;
57  }
58  Strings proj_names(number);
59 
60  for (unsigned int i=0;i<number;++i) {
61  std::ostringstream strm;
62  strm << basic_name << "-";
63  strm.fill('0');
64  strm.width(digits);
65  strm << i;
66  strm << "." << extension;
67  proj_names[i]=strm.str();
68  }
69  return proj_names;
70 }
71 
72 
73 IMPEM2D_END_NAMESPACE
74 
75 #endif /* IMPEM2D_FILENAMES_MANIPULATION_H */