Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

LCDG4LumHit.cc

Go to the documentation of this file.
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 }

Generated on Thu Oct 7 18:44:46 2004 for LCDG4 by doxygen 1.3.4