LCOV - code coverage report
Current view: top level - TEvtGen/HepMC - CompareGenEvent.cc (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 123 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 7 0.0 %

          Line data    Source code
       1             : /////////////////////////////////////////////////////////////////////////
       2             : // CompareGenEvent.cc
       3             : //
       4             : // garren@fnal.gov, January 2008
       5             : // Free functions used to compare two copies of GenEvent
       6             : //////////////////////////////////////////////////////////////////////////
       7             : //
       8             : 
       9             : #include <iostream>
      10             : 
      11             : #include "HepMC/CompareGenEvent.h"
      12             : #include "HepMC/GenEvent.h"
      13             : 
      14             : namespace HepMC {
      15             : 
      16             : bool compareGenEvent( GenEvent* e1, GenEvent* e2)
      17             : {
      18             :    //std::cout << "compareGenEvent: comparing event " << e1->event_number() << " to event " 
      19             :    //          << e2->event_number() << std::endl;
      20           0 :    if( e1->event_number() != e2->event_number() ) { 
      21           0 :        std::cerr << "compareGenEvent: event numbers differ " << std::endl;
      22           0 :        return false; 
      23             :    }
      24           0 :    if( e1->signal_process_id() != e2->signal_process_id() ) { 
      25           0 :        std::cerr << "compareGenEvent: signal process ids differ " << std::endl;
      26           0 :        return false; 
      27             :    }
      28           0 :    if( e1->event_scale() != e2->event_scale() ) { 
      29           0 :        std::cerr << "compareGenEvent: event scales differ " << std::endl;
      30           0 :        return false; 
      31             :    }
      32           0 :    if( e1->alphaQCD() != e2->alphaQCD() ) { 
      33           0 :        std::cerr << "compareGenEvent: alphaQCD differs " << std::endl;
      34           0 :        return false; 
      35             :    }
      36           0 :    if( e1->alphaQED() != e2->alphaQED() ) { 
      37           0 :        std::cerr << "alphaQED differs " << std::endl;
      38           0 :        return false; 
      39             :    }
      40           0 :    if( e1->mpi() != e2->mpi() ) { 
      41           0 :        std::cerr << "compareGenEvent: mpi differs " << std::endl;
      42           0 :        return false; 
      43             :    }
      44           0 :    if ( !compareSignalProcessVertex( e1, e2 ) ) { return false; }
      45           0 :    if ( !compareBeamParticles( e1, e2 ) ) { return false; }
      46           0 :    if ( !compareWeights( e1, e2 ) ) { return false; }
      47           0 :    if( e1->random_states() != e2->random_states() ) { 
      48           0 :        std::cerr << "compareGenEvent: random states differ " << std::endl;
      49           0 :        return false; 
      50             :    }
      51           0 :    if( e1->heavy_ion() != e2->heavy_ion() ) { 
      52           0 :        std::cerr << "compareGenEvent: heavy ions differ " << std::endl;
      53           0 :        return false; 
      54             :    }
      55           0 :    if( e1->pdf_info() != e2->pdf_info() ) { 
      56           0 :        std::cerr << "compareGenEvent: pdf info differs " << std::endl;
      57           0 :        return false; 
      58             :    }
      59           0 :    if ( !compareParticles( e1, e2 ) ) { return false; }
      60           0 :    if ( !compareVertices( e1, e2 ) ) { return false; }
      61           0 :    return true;
      62           0 : }
      63             : 
      64             : bool compareSignalProcessVertex( GenEvent* e1, GenEvent* e2 ) {
      65             :    // compare signal process vertex
      66           0 :    GenVertex* s1 = e1->signal_process_vertex();
      67           0 :    GenVertex* s2 = e2->signal_process_vertex();
      68           0 :    if( s1 && s2 ) {
      69           0 :        if( (*s1) != (*s2) ) { 
      70           0 :            std::cerr << "compareSignalProcessVertex: signal process vertices differ " << std::endl;
      71           0 :            return false; 
      72             :        }
      73             :    }
      74           0 :    return true;
      75           0 : }
      76             : 
      77             : bool compareBeamParticles( GenEvent* e1, GenEvent* e2 ) {
      78           0 :    GenParticle* e1b1 = e1->beam_particles().first;
      79           0 :    GenParticle* e1b2 = e1->beam_particles().second;
      80           0 :    GenParticle* e2b1 = e2->beam_particles().first;
      81           0 :    GenParticle* e2b2 = e2->beam_particles().second;
      82           0 :    if( e1b1 && e1b2 && e2b1 && e2b2 ) {
      83           0 :        if( (*e1b1) == (*e2b1)  && (*e1b2) == (*e2b2) ) {
      84             :        } else { 
      85           0 :            std::cerr << "compareBeamParticles: beam particles differ " << std::endl;
      86           0 :            return false; 
      87             :        }
      88             :    }
      89           0 :    return true;
      90           0 : }
      91             : 
      92             : bool compareWeights( GenEvent* e1, GenEvent* e2 ) {
      93           0 :    if( e1->weights() == e2->weights() ) return true;
      94           0 :    std::cerr << "compareWeights: weight containers differ " << std::endl;
      95           0 :    return false;
      96           0 : }
      97             : 
      98             : bool compareParticles( GenEvent* e1, GenEvent* e2 ) {
      99           0 :    if( e1->particles_size() != e2->particles_size() ) { 
     100           0 :        std::cerr << "compareParticles: number of particles differs " << std::endl;
     101           0 :        return false; 
     102             :    }
     103           0 :    if( e1->particles_size() == 0 ) { return true; }
     104           0 :    for ( GenEvent::particle_const_iterator p1 =  e1->particles_begin(),
     105           0 :          p2 = e2->particles_begin();
     106           0 :          p1 !=  e1->particles_end(); ++p1, ++p2 ) {
     107             :        /* std::cout << "compareParticles: particle " 
     108             :                  << (*p1)->barcode() << " " << (*p2)->barcode()
     109             :                  << std::endl; */
     110           0 :        if ( **p1 != **p2 ) {
     111           0 :            std::cerr << "compareParticles: particle " 
     112           0 :                      << (*p1)->barcode() << " differs from " 
     113           0 :                      << (*p2)->barcode() << std::endl;
     114           0 :            return false; 
     115             :        }
     116             :    }
     117           0 :    return true;
     118           0 : }
     119             : 
     120             : bool compareVertices( GenEvent* e1, GenEvent* e2 ) {
     121           0 :    if( e1->vertices_size() != e2->vertices_size() ) { 
     122           0 :        std::cerr << "compareVertices: number of vertices differs " << std::endl;
     123           0 :        return false; 
     124             :    }
     125           0 :    for ( GenEvent::vertex_const_iterator v =  e1->vertices_begin();
     126           0 :          v !=  e1->vertices_end(); ++v ) {
     127             :        //std::cout << "compareVertices:  comparing vertex " 
     128             :         //         << (*v)->barcode() << std::endl;
     129           0 :        GenVertex* v1 = (*v);
     130           0 :        GenVertex* v2 = e2->barcode_to_vertex((*v)->barcode());
     131           0 :        compareVertex( (*v), e2->barcode_to_vertex((*v)->barcode()));
     132           0 :        if ( (*v1) != (*v2) ) {
     133           0 :            std::cerr << "compareVertices: vertex " 
     134           0 :                      << (*v)->barcode() << " differs" << std::endl;
     135           0 :            return false; 
     136             :        }
     137           0 :    }
     138           0 :    return true;
     139           0 : }
     140             : 
     141             : bool compareVertex( GenVertex* v1, GenVertex* v2 ) {
     142           0 :        if ( v1->position() !=  v2->position() ) {
     143           0 :           std::cerr << "compareVertex: position " 
     144           0 :                     << v1->barcode() << " differs" << std::endl;
     145           0 :           return false; 
     146             :        }
     147             :        // if the size of the inlist differs, return false.
     148           0 :        if ( v1->particles_in_size() !=  v2->particles_in_size() ) {
     149           0 :           std::cerr << "compareVertex: particles_in_size " 
     150           0 :                     << v1->barcode() << " differs" << std::endl;
     151           0 :           return false; 
     152             :        }
     153             :        // loop over the inlist and ensure particles are identical
     154           0 :        if ( v1->particles_in_const_begin() != v1->particles_in_const_end() ) {
     155           0 :            for ( GenVertex::particles_in_const_iterator 
     156           0 :                     ia = v1->particles_in_const_begin(),
     157           0 :                     ib = v2->particles_in_const_begin();
     158           0 :                 ia != v1->particles_in_const_end(); ia++, ib++ ){
     159           0 :               if ( **ia != **ib ) {
     160           0 :                  std::cerr << "compareVertex: incoming particle " 
     161           0 :                            << v1->barcode() << " differs: " 
     162           0 :                            << (*ia)->barcode() << " " << (*ib)->barcode()
     163           0 :                            << std::endl;
     164             :                   //return false; 
     165           0 :               }
     166             :            }
     167           0 :        }
     168             :        // if the size of the outlist differs, return false.
     169           0 :        if ( v1->particles_out_size() !=  v2->particles_out_size() ) {
     170           0 :           std::cerr << "compareVertex: particles_out_size " 
     171           0 :                     << v1->barcode() << " differs" << std::endl;
     172           0 :           return false; 
     173             :        }
     174             :        // loop over the outlist and ensure particles are identical
     175           0 :        if ( v1->particles_out_const_begin() != v1->particles_out_const_end() ) {
     176           0 :            for ( GenVertex::particles_out_const_iterator 
     177           0 :                      ia = v1->particles_out_const_begin(),
     178           0 :                      ib = v2->particles_out_const_begin();
     179           0 :                  ia != v1->particles_out_const_end(); ia++, ib++ ){
     180           0 :                if ( **ia != **ib ) {
     181           0 :                    std::cerr << "compareVertex: outgoing particle " 
     182           0 :                              << v1->barcode() << " differs: " 
     183           0 :                              << (*ia)->barcode() << " " << (*ib)->barcode()
     184           0 :                              << std::endl;
     185             :                    //return false; 
     186           0 :                }
     187             :            }
     188           0 :        }
     189           0 :    return true;
     190           0 : }
     191             : 
     192             : } // HepMC

Generated by: LCOV version 1.11