00001 // $Id: LCDG4LumHit.cc,v 1.9 2004/02/02 22:12:48 uid561 Exp $ 00002 00003 #include "LCDG4LumHit.hh" 00004 #include "G4VVisManager.hh" 00005 #include "G4Circle.hh" 00006 #include "G4Colour.hh" 00007 #include "G4VisAttributes.hh" 00008 00009 00010 G4Allocator<LCDG4LumHit> LCDG4LumHitAllocator; 00011 00012 /* 00013 * Default constructor 00014 */ 00015 LCDG4LumHit::LCDG4LumHit() : G4VHit() { 00016 m_nmc=0; 00017 m_edep=0; 00018 m_edepabs=0; 00019 m_trkid=new std::vector<G4int>; 00020 m_trkid->clear(); 00021 m_emc =new std::vector<G4double>; 00022 m_emc->clear(); 00023 } 00024 00025 /* 00026 * Destructor 00027 */ 00028 LCDG4LumHit::~LCDG4LumHit(){ 00029 if (m_trkid) { 00030 m_trkid->clear(); 00031 delete m_trkid; 00032 m_trkid=0; 00033 } 00034 00035 if (m_emc) { 00036 m_emc->clear(); 00037 delete m_emc; 00038 m_emc=0; 00039 } 00040 } 00041 00042 /* 00043 * Copy constructor 00044 */ 00045 LCDG4LumHit::LCDG4LumHit(const LCDG4LumHit &right) : G4VHit() { 00046 m_layer = right.m_layer; 00047 m_sysNo = right.m_sysNo; 00048 m_barend = right.m_barend; 00049 m_edep = right.m_edep; 00050 m_edepabs= right.m_edepabs; 00051 m_theta = right.m_theta; 00052 m_phi = right.m_phi; 00053 m_pos = right.m_pos; 00054 00055 m_trkid=new std::vector<G4int>; 00056 m_emc =new std::vector<G4double>; 00057 m_trkid->clear(); 00058 m_emc->clear(); 00059 int imc=0; 00060 m_nmc=right.m_nmc; 00061 for(imc=0 ; imc < right.m_nmc ; imc++) { 00062 m_trkid->push_back((*right.m_trkid)[imc]); 00063 m_emc->push_back((*right.m_emc)[imc]); 00064 } 00065 } 00066 00067 /* 00068 * Assignment operator 00069 */ 00070 const LCDG4LumHit& LCDG4LumHit::operator=(const LCDG4LumHit &right) { 00071 m_layer = right.m_layer; 00072 m_sysNo = right.m_sysNo; 00073 m_barend = right.m_barend; 00074 m_edep = right.m_edep; 00075 m_edepabs= right.m_edepabs; 00076 m_theta = right.m_theta; 00077 m_phi = right.m_phi; 00078 m_pos = right.m_pos; 00079 00080 int imc=0; 00081 m_trkid->clear(); 00082 m_emc->clear(); 00083 m_nmc=right.m_nmc; 00084 for(imc=0 ; imc < right.m_nmc ; imc++) { 00085 m_trkid->push_back((*right.m_trkid)[imc]); 00086 m_emc->push_back((*right.m_emc)[imc]); 00087 } 00088 return *this; 00089 } 00090 00091 /* 00092 * Add a contributing MC particle to the raw G4 hit 00093 * takes trkID and energy as arguments 00094 */ 00095 G4int LCDG4LumHit::AddMcPart(G4int mcidx, G4double emc) { 00096 int flg_same=0; 00097 int imc=0; 00098 for (imc=0 ; imc < m_nmc ; imc++) { 00099 if ((*m_trkid)[imc] == mcidx) { 00100 flg_same=imc+1; 00101 break; 00102 } 00103 } 00104 00105 m_edep+=emc; 00106 if (flg_same) { 00107 (*m_emc)[flg_same-1] += emc; 00108 } else { 00109 m_nmc++; 00110 m_trkid->push_back(mcidx); 00111 m_emc ->push_back(emc); 00112 } 00113 00114 return m_nmc; 00115 } 00116 00117 /* 00118 * Equality operator 00119 */ 00120 bool LCDG4LumHit::operator==(const LCDG4LumHit &right) const { 00121 if(m_layer!=right.m_layer) return false; 00122 if(m_sysNo!=right.m_sysNo) return false; 00123 if(m_barend!=m_barend) return false; 00124 if(m_phi!=m_phi) return false; 00125 if(m_theta!=m_theta) return false; 00126 // if(m_edep!=m_edep) return false; 00127 // if(m_edepabs!=m_edepabs) return false; 00128 00129 // G4int m_nmc; 00130 // std::vector<G4int> *m_trkid; 00131 // std::vector<G4double> *m_emc; 00132 return true; 00133 } 00134 00135 00136 /* 00137 * Draw method 00138 */ 00139 void LCDG4LumHit::Draw() { 00140 G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); 00141 if(pVVisManager) { 00142 G4Circle circle(m_pos); 00143 circle.SetScreenSize(1.0); 00144 //circle.SetScreenSize(0.04); 00145 circle.SetFillStyle(G4Circle::filled); 00146 G4Colour colour(1.0,0.0,1.0); // Magenta 00147 G4VisAttributes attribs(colour); 00148 circle.SetVisAttributes(attribs); 00149 pVVisManager->Draw(circle); 00150 } 00151 } 00152 00153 /* 00154 * Print method 00155 */ 00156 void LCDG4LumHit::Print() { 00157 G4cout << "Layer:" << m_layer << G4endl; 00158 G4cout << "Sysno:" << m_sysNo << G4endl; 00159 G4cout << "Bar/End:" << m_barend << G4endl; 00160 G4cout << "Phi:" << m_phi << G4endl; 00161 G4cout << "Theta:" << m_theta << G4endl; 00162 G4cout << "Edep:" << m_edep << G4endl; 00163 }
1.3.4