LCOV - code coverage report
Current view: top level - src/module - ParticleCollector.cpp (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 54 72 75.0 %
Date: 2024-04-29 14:43:01 Functions: 17 24 70.8 %

          Line data    Source code
       1             : #include "crpropa/module/ParticleCollector.h"
       2             : #include "crpropa/module/TextOutput.h"
       3             : #include "crpropa/Units.h"
       4             : 
       5             : namespace crpropa {
       6             : 
       7          14 : ParticleCollector::ParticleCollector() : nBuffer(10e6), clone(false), recursive(false)  {
       8          14 :         container.reserve(nBuffer); // for 1e6 candidates ~ 500MB of RAM
       9          14 : }
      10             : 
      11           0 : ParticleCollector::ParticleCollector(const std::size_t nBuffer) : clone(false), recursive(false)  {
      12           0 :         container.reserve(nBuffer);
      13           0 : }
      14             : 
      15           0 : ParticleCollector::ParticleCollector(const std::size_t nBuffer, const bool clone) : recursive(false) {
      16           0 :         container.reserve(nBuffer);
      17           0 : }
      18             : 
      19           0 : ParticleCollector::ParticleCollector(const std::size_t nBuffer, const bool clone, const bool recursive) {
      20           0 :         container.reserve(nBuffer);
      21           0 : }
      22             : 
      23        3206 : void ParticleCollector::process(Candidate *c) const {
      24        6412 : #pragma omp critical
      25             :         {
      26        3206 :                 if(clone)
      27          50 :                         container.push_back(c->clone(recursive));
      28             :                 else
      29        6362 :                         container.push_back(c);
      30             :         }
      31        3206 : }
      32             : 
      33          30 : void ParticleCollector::process(ref_ptr<Candidate> c) const {
      34          30 :         ParticleCollector::process((Candidate*) c);
      35          30 : }
      36             : 
      37           2 : void ParticleCollector::reprocess(Module *action) const {
      38          14 :         for (ParticleCollector::iterator itr = container.begin(); itr != container.end(); ++itr){
      39          12 :                 if (clone)
      40           0 :                         action->process((*(itr->get())).clone(false));
      41             :                 else
      42          12 :                         action->process(itr->get());
      43             :         }
      44           2 : }
      45             : 
      46           1 : void ParticleCollector::dump(const std::string &filename) const {
      47           1 :         TextOutput output(filename.c_str(), Output::Everything);
      48           1 :         reprocess(&output);
      49           1 :         output.close();
      50           1 : }
      51             : 
      52           1 : void ParticleCollector::load(const std::string &filename){
      53           1 :         TextOutput::load(filename.c_str(), this);
      54           1 : }
      55             : 
      56          22 : ParticleCollector::~ParticleCollector() {
      57          14 :         clearContainer();
      58          22 : }
      59             : 
      60           6 : std::size_t ParticleCollector::size() const {
      61           6 :         return container.size();
      62             : }
      63             : 
      64           8 : ref_ptr<Candidate> ParticleCollector::operator[](const std::size_t i) const {
      65           8 :         return container[i];
      66             : }
      67             : 
      68          14 : void ParticleCollector::clearContainer() {
      69          14 :         container.clear();
      70          14 : }
      71             : 
      72           2 : std::vector<ref_ptr<Candidate> >& ParticleCollector::getContainer() const {
      73           2 :         return container;
      74             : }
      75             : 
      76           2 : void ParticleCollector::setClone(bool b) {
      77           2 :         clone = b;
      78           2 : }
      79             : 
      80           0 : bool ParticleCollector::getClone() const {
      81           0 :         return clone;
      82             : }
      83             : 
      84           0 : std::string ParticleCollector::getDescription() const {
      85           0 :         return "ParticleCollector";
      86             : }
      87             : 
      88           5 : ParticleCollector::iterator ParticleCollector::begin() {
      89           5 :         return container.begin();
      90             : }
      91             : 
      92           0 : ParticleCollector::const_iterator ParticleCollector::begin() const {
      93           0 :         return container.begin();
      94             : }
      95             : 
      96          30 : ParticleCollector::iterator ParticleCollector::end() {
      97          30 :         return container.end();
      98             : }
      99             : 
     100           0 : ParticleCollector::const_iterator ParticleCollector::end() const {
     101           0 :         return container.end();
     102             : }
     103             : 
     104           1 : void ParticleCollector::getTrajectory(ModuleList* mlist, std::size_t i, Module *output) const {
     105           1 :         ref_ptr<Candidate> c_tmp = container[i]->clone();
     106             : 
     107           1 :         c_tmp->restart();
     108             : 
     109           1 :         mlist->add(output);
     110           1 :         mlist->run(c_tmp);
     111           1 :         mlist->remove(mlist->size()-1);
     112           1 : }
     113             : 
     114           1 : void ParticleCollector::getTrajectory(ref_ptr<ModuleList> mlist, std::size_t i, ref_ptr<Module> output) const {
     115           1 :         ParticleCollector::getTrajectory((ModuleList*) mlist, i, (Module*) output);
     116           1 : }
     117             : 
     118             : } // namespace crpropa

Generated by: LCOV version 1.14