This file is indexed.

/usr/include/ThePEG/LesHouches/LesHouchesEventHandler.h is in libthepeg-dev 1.8.0-3build1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
// -*- C++ -*-
//
// LesHouchesEventHandler.h is a part of ThePEG - Toolkit for HEP Event Generation
// Copyright (C) 1999-2011 Leif Lonnblad
//
// ThePEG is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
#ifndef THEPEG_LesHouchesEventHandler_H
#define THEPEG_LesHouchesEventHandler_H
//
// This is the declaration of the LesHouchesEventHandler class.
//

#include "ThePEG/Handlers/EventHandler.h"
#include "LesHouchesEventHandler.fh"
#include "LesHouchesReader.fh"
#include "ThePEG/Utilities/CompSelector.h"
#include "ThePEG/Utilities/XSecStat.h"

namespace ThePEG {

/**
 * The LesHouchesEventHandler inherits from the general EventHandler
 * class and administers the reading of events generated by external
 * matrix element generator programs according to the Les Houches
 * accord.
 *
 * The class has a list of <code>LesHouchesReader</code>s which
 * typically are connected to files with event data produced by
 * external matrix element generator programs. When an event is
 * requested by LesHouchesEventHandler, one of the readers are chosen,
 * an event is read in and then passed to the different
 * <code>StepHandler</code> defined in the underlying
 * EventHandler class.
 *
 * @see \ref LesHouchesEventHandlerInterfaces "The interfaces"
 * defined for LesHouchesEventHandler.
 */
class LesHouchesEventHandler: public EventHandler {

public:

  /**
   * A vector of LesHouchesReader objects.
   */
  typedef vector<LesHouchesReaderPtr> ReaderVector;

  /**
   * A selector of readers.
   */
  typedef CompSelector<int,CrossSection> ReaderSelector;

  /**
   * Enumerate the weighting options.
   */
  enum WeightOpt {
    unitweight = 1,    /**< All events have unit weight. */
    unitnegweight = -1, /**< All events have wight +/- 1. */
    varweight = 2,      /**< Varying positive weights. */
    varnegweight = -2   /**< Varying positive or negative weights. */
  };

public:

  /** @name Standard constructors and destructors. */
  //@{
  /**
   * The default constructor.
   */
  LesHouchesEventHandler()
    : theWeightOption(unitweight), theUnitTolerance(1.0e-6), warnPNum(true) 
  {
    selector().tolerance(unitTolerance());
  }

  /**
   * The destructor.
   */
  virtual ~LesHouchesEventHandler();
  //@}

public:

  /** @name Initialization and finalization functions. */
  //@{
  /**
   * Initialize this event handler and all related objects needed to
   * generate events.
   */
  virtual void initialize();

  /**
   * Write out accumulated statistics about intergrated cross sections
   * and stuff.
   */
  virtual void statistics(ostream &) const;

  /**
   * Histogram scale. A histogram bin which has been filled with the
   * weights associated with the Event objects should be scaled by
   * this factor to give the correct cross section.
   */
  virtual CrossSection histogramScale() const;

  /**
   * The estimated total integrated cross section of the processes
   * generated in this run.
   * @return 0 if no integrated cross section could be estimated.
   */
  virtual CrossSection integratedXSec() const;

  /**
   * The estimated error in the total integrated cross section of the
   * processes generated in this run.
   *  @return 0 if no integrated cross section error could be estimated.
   */
  virtual CrossSection integratedXSecErr() const;
  //@}

  /** @name Functions used for the actual generation */
  //@{
  /**
   * Generate an event.
   */
  virtual EventPtr generateEvent();

  /**
   * Create the Event and Collision objects. Used by the
   * generateEvent() function.
   */
  virtual tCollPtr performCollision();

  /**
   * Continue generating an event if the generation has been stopped
   * before finishing.
   */
  virtual EventPtr continueEvent();
  //@}

  /** @name Functions to manipulate statistics. */
  //@{
  /**
   * An event has been selected. Signal that an event has been
   * selected with the given \a weight. If unit weights are requested,
   * the event will be accepted with that weight. This also takes care
   * of the statistics collection of the selected reader object.
   */
  void select(double weight);

  /**
   * Accept the current event, taking care of the statistics
   * collection of the corresponding reader objects.
   */
  void accept();

  /**
   * Reject the current event, taking care of the statistics
   * collection of the corresponding reader objects.
   */
  void reject(double weight);

  /**
   * Increase the overestimated cross section for the selected reader.
   */
  void increaseMaxXSec(CrossSection maxxsec);

  /**
   * Skip some events. To ensure a reader file is scanned an even
   * number of times, skip a number of events for the selected reader.
   */
  void skipEvents();

  //@}

  /** @name Simple access functions. */
  //@{
  /**
   * The way weights are to be treated.
   */
  WeightOpt weightOption() const { return theWeightOption; }

  /**
   * If the weight option is set to unit weight, do not start
   * compensating unless the weight is this much larger than unity.
   */
  double unitTolerance() const { return theUnitTolerance; }

  /**
   * Access the list of readers.
   */
  const ReaderVector & readers() const { return theReaders; }

  /**
   * The selector to choose readers according to their overestimated
   * cross section.
   */
  const ReaderSelector & selector() const { return theSelector; }

  /**
   * The currently selected reader object.
   */
  tLesHouchesReaderPtr currentReader() const { return theCurrentReader; }

  /**
   * Set the currently selected reader object.
   */
  void currentReader(tLesHouchesReaderPtr x) { theCurrentReader = x; }

  //@}

public:

  /** @name Functions used by the persistent I/O system. */
  //@{
  /**
   * Function used to write out object persistently.
   * @param os the persistent output stream written to.
   */
  void persistentOutput(PersistentOStream & os) const;

  /**
   * Function used to read in object persistently.
   * @param is the persistent input stream read from.
   * @param version the version number of the object when written.
   */
  void persistentInput(PersistentIStream & is, int version);
  //@}

  /**
   * The standard Init function used to initialize the interfaces.
   * Called exactly once for each class by the class description system
   * before the main function starts or
   * when this class is dynamically loaded.
   */
  static void Init();

protected:

  /** @name Clone Methods. */
  //@{
  /**
   * Make a simple clone of this object.
   * @return a pointer to the new object.
   */
  virtual IBPtr clone() const;

  /** Make a clone of this object, possibly modifying the cloned object
   * to make it sane.
   * @return a pointer to the new object.
   */
  virtual IBPtr fullclone() const;
  //@}

protected:

  /** @name Standard Interfaced functions. */
  //@{
  /**
   * Initialize this object after the setup phase before saving an
   * EventGenerator to disk.
   * @throws InitException if object could not be initialized properly.
   */
  virtual void doinit();

  /**
   * Initialize this object. Called in the run phase just before
   * a run begins.
   */
  virtual void doinitrun();

  /**
   * Finalize this object. Called in the run phase just after a
   * run has ended. Used eg. to write out statistics.
   */
  virtual void dofinish();
  //@}

protected:

  /**
   * Access the list of readers.
   */
  ReaderVector & readers() { return theReaders; }

  /**
   * The selector to choose readers according to their overestimated
   * cross section.
   */
  ReaderSelector & selector() { return theSelector; }

  /**
   * Helper function for the interface;
   */
  void setUnitTolerance(double);

  /**
   * Collect statistics for this event handler.
   */
  XSecStat stats;

  /**
   * Collect statistics for this event handler. To be used for
   * histogram scaling.
   */
  XSecStat histStats;

private:

  /**
   * The list of readers.
   */
  ReaderVector theReaders;

  /**
   * The selector to choose readers according to their overestimated
   * cross section.
   */
  ReaderSelector theSelector;

  /**
   * The way weights are to be treated.
   */
  WeightOpt theWeightOption;

  /**
   * If the weight option is set to unit weight, do not start
   * compensating unless the weight is this much larger than unity.
   */
  double theUnitTolerance;

  /**
   * The currently selected reader object.
   */
  tLesHouchesReaderPtr theCurrentReader;

  /**
   * Warn if the same process number is used in more than one
   * LesHouchesReader.
   */
  bool warnPNum;

public:

  /** @cond EXCEPTIONCLASSES */
  /**
   * Exception class used if no readers were assigned.
   */
  class LesHouchesInitError: public InitException {};

  /**
   * Exception class used if the same process number is used by more
   * than ne reader.
   */
  class LesHouchesPNumException: public InitException {};
  /** @endcond */

private:

  /**
   * The static object used to initialize the description of this class.
   * Indicates that this is a concrete class with persistent data.
   */
  static ClassDescription<LesHouchesEventHandler> initLesHouchesEventHandler;

  /**
   * The assignment operator is private and must never be called.
   * In fact, it should not even be implemented.
   */
  LesHouchesEventHandler & operator=(const LesHouchesEventHandler &);

};

}

// CLASSDOC OFF

#include "ThePEG/Utilities/ClassTraits.h"

namespace ThePEG {

/** @cond TRAITSPECIALIZATIONS */

/** This template specialization informs ThePEG about the
 *  base classes of LesHouchesEventHandler. */
template <>
struct BaseClassTrait<LesHouchesEventHandler,1> {
  /** Typedef of the first base class of LesHouchesEventHandler. */
  typedef EventHandler NthBase;
};

/** This template specialization informs ThePEG about the name of
 *  the LesHouchesEventHandler class and the shared object where it is defined. */
template <>
struct ClassTraits<LesHouchesEventHandler>
  : public ClassTraitsBase<LesHouchesEventHandler> {
  /** Return a platform-independent class name */
  static string className() { return "ThePEG::LesHouchesEventHandler"; }
  /** Return the name of the shared library be loaded to get access to
   *  the LesHouchesEventHandler class and every other class it uses
   *  (except the base class). */
  static string library() { return "LesHouches.so"; }
};

/** @endcond */

}

#endif /* THEPEG_LesHouchesEventHandler_H */