00001 #ifndef COSMICGENERATOR_COSMICEVENTPARSER_H 00002 #define COSMICGENERATOR_COSMICEVENTPARSER_H 00003 00004 #include <iostream> 00005 #include "CLHEP/Vector/ThreeVector.h" 00006 using namespace CLHEP; 00007 00008 class CosmicEventParser { 00009 public: 00010 CosmicEventParser() {}; 00011 const HepLorentzVector& Vertex(void){return m_vertex;} 00012 const HepLorentzVector& Momentum(void){return m_momentum;} 00013 int pdgID(void){return m_pdgId;} 00014 private: 00015 HepLorentzVector m_vertex; 00016 HepLorentzVector m_momentum; 00017 int m_eventNumber; 00018 int m_pdgId; 00019 std::istream& read(std::istream& is); 00020 std::ostream& write(std::ostream& os) const; 00021 00022 friend std::istream& operator >> (std::istream& is,CosmicEventParser& ev); 00023 friend std::ostream& operator << (std::ostream& os,const CosmicEventParser& ev); 00024 }; 00025 00026 std::istream& operator >> (std::istream& is,CosmicEventParser& ev) { 00027 return ev.read(is); 00028 } 00029 00030 std::ostream& operator << (std::ostream& os,const CosmicEventParser& ev) { 00031 return ev.write(os); 00032 } 00033 00034 inline 00035 std::istream& CosmicEventParser::read(std::istream& is) 00036 { 00037 int dummy; 00038 int id; 00039 Hep3Vector vert,mom; 00040 double v_x,v_y,v_z; 00041 is >> m_eventNumber >> dummy >> id >> v_x >> v_y >> v_z >> mom; 00042 00043 // 00044 // rotate over pi in x-z plane 00045 // 00046 vert.setX(-v_x); 00047 vert.setY( v_y); 00048 vert.setZ(-v_z); 00049 00050 // 00051 // convert to MeV's and mm units 00052 // 00053 mom = 1000*mom; 00054 vert = 10*vert; 00055 00056 00057 m_vertex.setVect(vert); 00058 m_vertex.setE(0.); 00059 00060 00061 m_momentum.setVect(mom); 00062 double energy = sqrt(pow(105.66,2)+mom.mag2()); 00063 m_momentum.setE(energy); 00064 00065 if(id == 5) m_pdgId = 13; 00066 else m_pdgId = -13; 00067 00068 return is; 00069 } 00070 00071 inline 00072 std::ostream& CosmicEventParser::write(std::ostream& os) const 00073 { 00074 int dummy(1); 00075 int id(5); 00076 if(m_pdgId == -13) id = 6; 00077 os << m_eventNumber << " " << dummy << " " << id << " " 00078 << m_vertex.x() << " " << m_vertex.y() << " " << m_vertex.z() << " " 00079 << m_momentum.x() << " " << m_momentum.y() << " " << m_momentum.z(); 00080 00081 return os; 00082 } 00083 00084 00085 #endif