Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Data Structures | Typedefs | Functions
CexmcAngularRange.hh File Reference
#include <vector>
#include <iosfwd>
#include <G4Types.hh>

Go to the source code of this file.

Data Structures

struct  CexmcAngularRange
 

Typedefs

typedef std::vector
< CexmcAngularRange
CexmcAngularRangeList
 

Functions

bool operator< (const CexmcAngularRange &left, const CexmcAngularRange &right)
 
void GetNormalizedAngularRange (const CexmcAngularRangeList &src, CexmcAngularRangeList &dst)
 
void GetAngularGaps (const CexmcAngularRangeList &src, CexmcAngularRangeList &dst)
 
std::ostream & operator<< (std::ostream &out, const CexmcAngularRange &angularRange)
 
std::ostream & operator<< (std::ostream &out, const CexmcAngularRangeList &angularRanges)
 

Typedef Documentation

typedef std::vector< CexmcAngularRange > CexmcAngularRangeList

Definition at line 72 of file CexmcAngularRange.hh.

Function Documentation

void GetAngularGaps ( const CexmcAngularRangeList src,
CexmcAngularRangeList dst 
)

Definition at line 82 of file CexmcAngularRange.cc.

References GetNormalizedAngularRange().

Referenced by CexmcEventAction::EndOfEventAction(), and CexmcRunAction::PrintResults().

84 {
85  if ( src.empty() )
86  {
87  dst.push_back( CexmcAngularRange( 1.0, -1.0 , 0 ) );
88  return;
89  }
90 
91  CexmcAngularRangeList normalizedAngularRanges;
92  GetNormalizedAngularRange( src, normalizedAngularRanges );
93 
94  G4int index( 0 );
95  if ( normalizedAngularRanges[ 0 ].top < 1.0 )
96  dst.push_back( CexmcAngularRange(
97  1.0, normalizedAngularRanges[ 0 ].top, index++ ) );
98 
99  for ( CexmcAngularRangeList::iterator
100  k( normalizedAngularRanges.begin() );
101  k != normalizedAngularRanges.end(); ++k )
102  {
103  if ( k + 1 == normalizedAngularRanges.end() )
104  break;
105  dst.push_back( CexmcAngularRange(
106  k->bottom, ( k + 1 )->top, index++ ) );
107  }
108 
109  if ( normalizedAngularRanges.back().bottom > -1.0 )
110  dst.push_back( CexmcAngularRange(
111  normalizedAngularRanges.back().bottom, -1.0, index ) );
112 }
int G4int
Definition: G4Types.hh:78
void GetNormalizedAngularRange(const CexmcAngularRangeList &src, CexmcAngularRangeList &dst)
std::vector< CexmcAngularRange > CexmcAngularRangeList
void GetNormalizedAngularRange ( const CexmcAngularRangeList src,
CexmcAngularRangeList dst 
)

Definition at line 51 of file CexmcAngularRange.cc.

References sort().

Referenced by GetAngularGaps().

53 {
54  dst = src;
55  if ( dst.size() < 2 )
56  return;
57 
58  std::sort( dst.begin(), dst.end() );
59 
60  const G4double epsilon( 1E-7 );
61 
62  for ( CexmcAngularRangeList::iterator k( dst.begin() + 1 );
63  k != dst.end(); )
64  {
65  if ( std::fabs( k->top - ( k - 1 )->top ) < epsilon ||
66  k->bottom + epsilon >= ( k - 1 )->bottom )
67  {
68  k = dst.erase( k );
69  continue;
70  }
71  if ( k->top + epsilon >= ( k - 1 )->bottom )
72  {
73  ( k - 1 )->bottom = k->bottom;
74  k = dst.erase( k );
75  continue;
76  }
77  ++k;
78  }
79 }
subroutine sort(A, N)
Definition: dpm25nuc7.f:4670
double G4double
Definition: G4Types.hh:76
bool operator< ( const CexmcAngularRange left,
const CexmcAngularRange right 
)
inline

Definition at line 85 of file CexmcAngularRange.hh.

References CexmcAngularRange::bottom, and CexmcAngularRange::top.

87 {
88  if ( left.top != right.top )
89  return left.top > right.top;
90  if ( left.bottom != right.bottom )
91  return left.bottom < right.bottom;
92 
93  return false;
94 }
std::ostream& operator<< ( std::ostream &  out,
const CexmcAngularRange angularRange 
)

Definition at line 115 of file CexmcAngularRange.cc.

References CexmcAngularRange::bottom, CexmcAngularRange::index, and CexmcAngularRange::top.

117 {
118  std::ostream::fmtflags savedFlags( out.flags() );
119  std::streamsize prec( out.precision() );
120 
121  out.precision( 4 );
122  out.flags( std::ios::fixed );
123 
124  out << std::setw( 2 ) << angularRange.index + 1 << " [" << std::setw( 7 ) <<
125  angularRange.top << ", " << std::setw( 7 ) << angularRange.bottom <<
126  ")";
127 
128  out.precision( prec );
129  out.flags( savedFlags );
130 
131  return out;
132 }
std::ostream& operator<< ( std::ostream &  out,
const CexmcAngularRangeList angularRanges 
)

Definition at line 135 of file CexmcAngularRange.cc.

137 {
138  out << std::endl;
139  for ( CexmcAngularRangeList::const_iterator k( angularRanges.begin() );
140  k != angularRanges.end(); ++k )
141  {
142  out << " " << *k << std::endl;
143  }
144 
145  return out;
146 }