Fork me on GitHub

source: svn/trunk/Utilities/HepMC/src/HeavyIon.cc@ 708

Last change on this file since 708 was 571, checked in by cp3-support, 13 years ago

upgrade HepMC to version 2.06.05

File size: 4.7 KB
Line 
1//--------------------------------------------------------------------------
2//
3// HeavyIon.cc
4// Author: Lynn Garren
5//
6// Implement operator >> and operator <<
7//
8// ----------------------------------------------------------------------
9
10#include <iostream>
11#include <ostream>
12#include <istream>
13#include <sstream>
14
15#include "HeavyIon.h"
16#include "StreamHelpers.h"
17#include "IO_Exception.h"
18
19namespace HepMC {
20
21/// Write the contents of HeavyIon to an output stream.
22/// GenEvent stores a pointer to a HeavyIon.
23std::ostream & operator << (std::ostream & os, HeavyIon const * ion)
24{
25 if ( !os ) {
26 std::cerr << "HeavyIon output stream !os, "
27 << " setting badbit" << std::endl;
28 os.clear(std::ios::badbit);
29 return os;
30 }
31 os << 'H';
32 // HeavyIon* is set to 0 by default
33 if ( !ion ) {
34 detail::output( os, 0 );
35 detail::output( os, 0 );
36 detail::output( os, 0 );
37 detail::output( os, 0 );
38 detail::output( os, 0 );
39 detail::output( os, 0 );
40 detail::output( os, 0 );
41 detail::output( os, 0 );
42 detail::output( os, 0 );
43 detail::output( os, 0. );
44 detail::output( os, 0. );
45 detail::output( os, 0. );
46 detail::output( os, 0. );
47 detail::output( os,'\n');
48 return os;
49 }
50 //
51 detail::output( os, ion->Ncoll_hard() );
52 detail::output( os, ion->Npart_proj() );
53 detail::output( os, ion->Npart_targ() );
54 detail::output( os, ion->Ncoll() );
55 detail::output( os, ion->spectator_neutrons() );
56 detail::output( os, ion->spectator_protons() );
57 detail::output( os, ion->N_Nwounded_collisions() );
58 detail::output( os, ion->Nwounded_N_collisions() );
59 detail::output( os, ion->Nwounded_Nwounded_collisions() );
60 detail::output( os, ion->impact_parameter() );
61 detail::output( os, ion->event_plane_angle() );
62 detail::output( os, ion->eccentricity() );
63 detail::output( os, ion->sigma_inel_NN() );
64 detail::output( os,'\n');
65
66 return os;
67}
68
69/// Read the contents of HeavyIon from an input stream.
70/// GenEvent stores a pointer to a HeavyIon.
71std::istream & operator >> (std::istream & is, HeavyIon * ion)
72{
73 // make sure the stream is valid
74 if ( !is ) {
75 std::cerr << "HeavyIon input stream setting badbit." << std::endl;
76 is.clear(std::ios::badbit);
77 return is;
78 }
79 // get the HeavyIon line
80 std::string line;
81 std::getline(is,line);
82 std::istringstream iline(line);
83 std::string firstc;
84 iline >> firstc;
85 // test to be sure the next entry is of type "H"
86 if( firstc != "H" ) {
87 std::cerr << "HeavyIon input stream invalid line type: "
88 << firstc << std::endl;
89 // The most likely problem is that we have found a HepMC block line
90 throw IO_Exception("HeavyIon input stream encounterd invalid data");
91 }
92 // read values into temp variables, then create a new HeavyIon object
93 int nh =0, np =0, nt =0, nc =0,
94 neut = 0, prot = 0, nw =0, nwn =0, nwnw =0;
95 float impact = 0., plane = 0., xcen = 0., inel = 0.;
96 iline >> nh ;
97 if(!iline) throw IO_Exception("HeavyIon input stream encounterd invalid data");
98 iline >> np ;
99 if(!iline) throw IO_Exception("HeavyIon input stream encounterd invalid data");
100 iline >> nt ;
101 if(!iline) throw IO_Exception("HeavyIon input stream encounterd invalid data");
102 iline >> nc ;
103 if(!iline) throw IO_Exception("HeavyIon input stream encounterd invalid data");
104 iline >> neut ;
105 if(!iline) throw IO_Exception("HeavyIon input stream encounterd invalid data");
106 iline >> prot;
107 if(!iline) throw IO_Exception("HeavyIon input stream encounterd invalid data");
108 iline >> nw ;
109 if(!iline) throw IO_Exception("HeavyIon input stream encounterd invalid data");
110 iline >> nwn ;
111 if(!iline) throw IO_Exception("HeavyIon input stream encounterd invalid data");
112 iline >> nwnw ;
113 if(!iline) throw IO_Exception("HeavyIon input stream encounterd invalid data");
114 iline >> impact ;
115 if(!iline) throw IO_Exception("HeavyIon input stream encounterd invalid data");
116 iline >> plane ;
117 if(!iline) throw IO_Exception("HeavyIon input stream encounterd invalid data");
118 iline >> xcen ;
119 if(!iline) throw IO_Exception("HeavyIon input stream encounterd invalid data");
120 iline >> inel;
121 if(!iline) throw IO_Exception("HeavyIon input stream encounterd invalid data");
122 if( nh == 0 ) {
123 return is;
124 }
125
126 ion->set_Ncoll_hard(nh);
127 ion->set_Npart_proj(np);
128 ion->set_Npart_targ(nt);
129 ion->set_Ncoll(nc);
130 ion->set_spectator_neutrons(neut);
131 ion->set_spectator_protons(prot);
132 ion->set_N_Nwounded_collisions(nw);
133 ion->set_Nwounded_N_collisions(nwn);
134 ion->set_Nwounded_Nwounded_collisions(nwnw);
135 ion->set_impact_parameter(impact);
136 ion->set_event_plane_angle(plane);
137 ion->set_eccentricity(xcen);
138 ion->set_sigma_inel_NN(inel);
139
140 return is;
141}
142
143
144} // HepMC
Note: See TracBrowser for help on using the repository browser.