Line data Source code
1 : #ifndef CRPROPA_TEXTOUTPUT_H 2 : #define CRPROPA_TEXTOUTPUT_H 3 : 4 : #include "crpropa/module/Output.h" 5 : #include "crpropa/module/ParticleCollector.h" 6 : 7 : #include <fstream> 8 : 9 : namespace crpropa { 10 : /** 11 : * \addtogroup Output 12 : * @{ 13 : */ 14 : 15 : /** 16 : @class TextOutput 17 : @brief Configurable plain text output for particle information. 18 : This type of output can also be used to generate a .tar.gz file if 19 : the library zlib is available. For details see: 20 : http://zlib.net/ 21 : */ 22 : class TextOutput: public Output { 23 : protected: 24 : std::ostream *out; 25 : std::ofstream outfile; 26 : std::string filename; 27 : bool storeRandomSeeds; 28 : 29 : void printHeader() const; 30 : 31 : public: 32 : /** Default constructor 33 : */ 34 : TextOutput(); 35 : /** Constructor 36 : @param outputType type of output: Trajectory1D, Trajectory3D, Event1D, Event3D, Everything 37 : */ 38 : TextOutput(OutputType outputType); 39 : /** Constructor 40 : @param out output stream 41 : */ 42 : TextOutput(std::ostream &out); 43 : /** Constructor 44 : @param out output stream 45 : @param outputType type of output: Trajectory1D, Trajectory3D, Event1D, Event3D, Everything 46 : */ 47 : TextOutput(std::ostream &out, OutputType outputType); 48 : /** Constructor with the default OutputType (everything). 49 : @param filename string containing name of output text file 50 : */ 51 : TextOutput(const std::string &filename); 52 : /** Constructor 53 : @param filename string containing name of output text file 54 : @param outputType type of output: Trajectory1D, Trajectory3D, Event1D, Event3D, Everything 55 : */ 56 : TextOutput(const std::string &filename, OutputType outputType); 57 : /** Destructor 58 : */ 59 : ~TextOutput(); 60 : /** Whether to store the random seeds used in the simulation. 61 : This enables reproducibility of each realisation of the simulation. 62 : */ 63 0 : void enableRandomSeeds() {storeRandomSeeds = true;}; 64 : void close(); 65 : void gzip(); 66 : void process(Candidate *candidate) const; 67 : /** Loads a file to a particle collector. 68 : This is useful for analysis involving, e.g., magnetic lenses. 69 : @param filename string containing the name of the file to be loaded 70 : @param collector object of type ParticleCollector that will store the information 71 : */ 72 : static void load(const std::string &filename, ParticleCollector *collector); 73 : std::string getDescription() const; 74 : }; 75 : /** @}*/ 76 : 77 : } // namespace crpropa 78 : 79 : #endif // CRPROPA_TEXTOUTPUT_H