CMS 3D CMS Logo

NavigateEventsLooper.cc
Go to the documentation of this file.
1 
24 
25 #include <iostream>
26 
27 namespace edm {
28 
30  public:
32  ~NavigateEventsLooper() override;
33 
34  void startingNewLoop(unsigned int iIteration) override;
35  Status duringLoop(Event const& ev, EventSetup const& es, ProcessingController& pc) override;
36  Status endOfLoop(EventSetup const& es, unsigned int iCounter) override;
37 
38  private:
39  NavigateEventsLooper(NavigateEventsLooper const&) = delete; // stop default
40  NavigateEventsLooper const& operator=(NavigateEventsLooper const&) = delete; // stop default
41 
42  int maxLoops_;
46  };
47 
49  : maxLoops_(pset.getUntrackedParameter<int>("maxLoops", -1)),
50  countLoops_(0),
53 
55 
56  void NavigateEventsLooper::startingNewLoop(unsigned int /*iIteration*/) {}
57 
59  if (!pc.lastOperationSucceeded()) {
60  std::cout << "Event could not be found. Nothing done. Try again.\n";
61  }
62 
63  std::cout << "\nWhat should we do next?\n";
64 
66  std::cout << "(0) process the next event\n";
68  std::cout << "(0) process the next event if it exists (at last event in the open file. there are more files)\n";
70  std::cout << "(0) will stop the loop because this is the last event\n";
72  std::cout << "(0) process the next event (if it exists)\n";
73  }
74 
75  if (pc.canRandomAccess()) {
77  std::cout << "(1) process the previous event\n";
79  std::cout << "(1) process the previous event if there are any (at first event in the open file. there are "
80  "previous files)\n";
82  std::cout << "(1) will stop the loop because this is the first event\n";
83  }
84 
85  std::cout << "(2) process a specific event\n";
86  }
87 
88  std::cout << "(3) stop loop\n";
89  std::cout << "(4) stop process" << std::endl;
90  long long int x;
91 
92  bool inputFailed = false;
93  do {
94  inputFailed = false;
95  if (!(std::cin >> x) || x < 0 || x > 4) {
96  inputFailed = true;
97  std::cin.clear();
98  std::cin.ignore(10000, '\n');
99  std::cout << "Please enter numeric characters only. The value must be in the range 0 to 4 (inclusive). Please "
100  "try again."
101  << std::endl;
102  }
103  if (!pc.canRandomAccess() && (x == 1 || x == 2)) {
104  inputFailed = true;
105  std::cout << "The source cannot do random access. 1 and 2 are illegal values. Please try again." << std::endl;
106  }
107  } while (inputFailed);
108 
109  shouldStopLoop_ = false;
110  shouldStopProcess_ = false;
111  if (x == 0) {
113  } else if (x == 1) {
115  } else if (x == 2) {
116  std::cout << "Which run?" << std::endl;
117  do {
118  inputFailed = false;
119  if (!(std::cin >> x)) {
120  inputFailed = true;
121  std::cin.clear();
122  std::cin.ignore(10000, '\n');
123  std::cout << "Please enter numeric characters only. Please try again." << std::endl;
124  }
125  } while (inputFailed);
126  RunNumber_t run = x;
127  std::cout << "Which luminosity block?" << std::endl;
128  do {
129  inputFailed = false;
130  if (!(std::cin >> x)) {
131  inputFailed = true;
132  std::cin.clear();
133  std::cin.ignore(10000, '\n');
134  std::cout << "Please enter numeric characters only. Please try again." << std::endl;
135  }
136  } while (inputFailed);
138  std::cout << "Which event?" << std::endl;
139  do {
140  inputFailed = false;
141  if (!(std::cin >> x)) {
142  inputFailed = true;
143  std::cin.clear();
144  std::cin.ignore(10000, '\n');
145  std::cout << "Please enter numeric characters only. Please try again." << std::endl;
146  }
147  } while (inputFailed);
148  EventNumber_t ev = x;
149  pc.setTransitionToEvent(EventID(run, lumi, ev));
150  } else if (x == 3) {
152  shouldStopLoop_ = true;
153  } else if (x == 4) {
155  shouldStopLoop_ = true;
156  shouldStopProcess_ = true;
157  }
158  return shouldStopLoop_ ? kStop : kContinue;
159  }
160 
162  std::cout << "Ending loop" << std::endl;
163  if (shouldStopProcess_)
164  return kStop;
165  ++countLoops_;
166  return (maxLoops_ < 0 || countLoops_ < maxLoops_) ? kContinue : kStop;
167  }
168 } // namespace edm
169 
bool canRandomAccess() const
Returns &#39;true&#39; if the job&#39;s source can randomly access.
NavigateEventsLooper const & operator=(NavigateEventsLooper const &)=delete
unsigned long long EventNumber_t
#define DEFINE_FWK_LOOPER(type)
bool ev
void startingNewLoop(unsigned int iIteration) override
unsigned int LuminosityBlockNumber_t
void setTransitionToEvent(edm::EventID const &iID)
ForwardState forwardState() const
Returns the present state of processing.
Status endOfLoop(EventSetup const &es, unsigned int iCounter) override
HLT enums.
unsigned int RunNumber_t
NavigateEventsLooper(ParameterSet const &pset)
ReverseState reverseState() const
Status duringLoop(Event const &ev, EventSetup const &es, ProcessingController &pc) override