00001 #include "RootEventData/TDigiEvent.h" 00002 #include <iostream> 00003 #include "TCollection.h" // Declares TIter 00004 00005 ClassImp(TDigiEvent) 00006 00007 // Allocate the TObjArray just once 00008 TObjArray *TDigiEvent::s_staticMdcDigiCol = 0; 00009 TObjArray *TDigiEvent::s_staticEmcDigiCol = 0; 00010 TObjArray *TDigiEvent::s_staticTofDigiCol = 0; 00011 TObjArray *TDigiEvent::s_staticMucDigiCol = 0; 00012 TObjArray *TDigiEvent::s_staticLumiDigiCol = 0; 00013 00014 00015 //*************************************************************** 00016 TDigiEvent::TDigiEvent() 00017 { 00018 if (!s_staticMdcDigiCol) { 00019 s_staticMdcDigiCol = new TObjArray(); 00020 } 00021 m_mdcDigiCol = s_staticMdcDigiCol; 00022 00023 if (!s_staticEmcDigiCol ){ 00024 s_staticEmcDigiCol = new TObjArray(); 00025 } 00026 m_emcDigiCol = s_staticEmcDigiCol; 00027 00028 if (! s_staticTofDigiCol ){ 00029 s_staticTofDigiCol = new TObjArray(); 00030 } 00031 m_tofDigiCol = s_staticTofDigiCol; 00032 00033 if (! s_staticMucDigiCol ){ 00034 s_staticMucDigiCol = new TObjArray(); 00035 } 00036 m_mucDigiCol = s_staticMucDigiCol; 00037 00038 if (! s_staticLumiDigiCol ) { 00039 s_staticLumiDigiCol = new TObjArray(); 00040 } 00041 m_lumiDigiCol = s_staticLumiDigiCol; 00042 00043 Clear(); 00044 00045 } 00046 00047 //***************************************************************** 00048 TDigiEvent::~TDigiEvent() { 00049 00050 if(m_mdcDigiCol == s_staticMdcDigiCol) s_staticMdcDigiCol = 0; 00051 m_mdcDigiCol->Delete(); 00052 delete m_mdcDigiCol; 00053 m_mdcDigiCol = 0; 00054 00055 if(m_emcDigiCol == s_staticEmcDigiCol) s_staticEmcDigiCol = 0; 00056 m_emcDigiCol->Delete(); 00057 delete m_emcDigiCol; 00058 m_emcDigiCol = 0; 00059 00060 if(m_tofDigiCol == s_staticTofDigiCol ) s_staticTofDigiCol = 0; 00061 m_tofDigiCol->Delete(); 00062 delete m_tofDigiCol; 00063 m_tofDigiCol = 0; 00064 00065 if(m_mucDigiCol == s_staticMucDigiCol ) s_staticMucDigiCol = 0; 00066 m_mucDigiCol->Delete(); 00067 delete m_mucDigiCol; 00068 m_mucDigiCol = 0; 00069 00070 if ( m_lumiDigiCol == s_staticLumiDigiCol ) s_staticLumiDigiCol = 0; 00071 m_lumiDigiCol->Delete(); 00072 delete m_lumiDigiCol; 00073 m_lumiDigiCol = 0; 00074 00075 } 00076 00077 //***************************************************************** 00078 void TDigiEvent::initialize(Bool_t fromMc){ 00079 m_fromMc = fromMc; 00080 } 00081 00082 //***************************************************************** 00083 void TDigiEvent::Clear(Option_t *option) { 00084 /* 00085 const Int_t nd = 20000; 00086 static Int_t limit = 100; 00087 static Int_t ind=0; 00088 static TMdcDigi* keep[nd]; 00089 00090 00091 Int_t n = m_mdcDigiCol->GetEntries(); 00092 if (n>limit) { 00093 limit=n+10; 00094 if (limit > nd) 00095 std::cout << "!!!Warning: limit for TMdcDigi is greater than " << nd << std::endl; 00096 for (Int_t j=0;j<ind;j++) delete keep[j]; 00097 ind = 0; 00098 } 00099 for (Int_t i=0;i<n;i++) keep[ind+i] = (TMdcDigi*)m_mdcDigiCol->At(i); 00100 ind += n; 00101 if (ind > nd-limit) { 00102 for (Int_t j=0;j<ind;j++) delete keep[j]; 00103 ind = 0; 00104 } 00105 m_mdcDigiCol->Clear(); 00106 */ 00107 } 00108 00109 //***************************************************************************** 00110 void TDigiEvent::Print(Option_t *option) const { 00111 TObject::Print(option); 00112 std::cout.precision(2); 00113 if (m_mdcDigiCol) 00114 std::cout << "Number of TMdcDigis " << m_mdcDigiCol->GetEntries() << std::endl; 00115 else 00116 std::cout << "Number of TMdcDigis 0" << std::endl; 00117 } 00118 00120 void TDigiEvent::addMdcDigi(TMdcDigi *digi) { 00121 m_mdcDigiCol->Add(digi); 00122 } 00123 00124 const TMdcDigi* TDigiEvent::getMdcDigi(Int_t i) const { 00125 if (Int_t(i) >= m_mdcDigiCol->GetEntries()) 00126 return 0; 00127 return (TMdcDigi*)m_mdcDigiCol->At(i); 00128 } 00130 void TDigiEvent::addEmcDigi(TEmcDigi * digi) { 00131 m_emcDigiCol->Add(digi); 00132 } 00133 00134 const TEmcDigi* TDigiEvent::getEmcDigi( Int_t i) const { 00135 if(Int_t(i) >= m_emcDigiCol->GetEntries()) 00136 return 0; 00137 return (TEmcDigi*)m_emcDigiCol->At(i); 00138 } 00139 00141 void TDigiEvent::addTofDigi(TTofDigi * digi){ 00142 m_tofDigiCol->Add(digi); 00143 } 00144 00145 00146 const TTofDigi* TDigiEvent::getTofDigi(Int_t i) const { 00147 if(Int_t(i) >=m_tofDigiCol->GetEntries()) 00148 return 0; 00149 return (TTofDigi*) m_tofDigiCol->At(i); 00150 } 00151 00153 void TDigiEvent::addMucDigi(TMucDigi * digi){ 00154 m_mucDigiCol->Add(digi); 00155 } 00156 00157 00158 const TMucDigi* TDigiEvent::getMucDigi(Int_t i) const { 00159 if(Int_t(i) >=m_mucDigiCol->GetEntries()) 00160 return 0; 00161 return (TMucDigi*) m_mucDigiCol->At(i); 00162 } 00163 00165 void TDigiEvent::addLumiDigi(TLumiDigi * digi) { 00166 m_lumiDigiCol->Add(digi); 00167 } 00168 00169 const TLumiDigi* TDigiEvent::getLumiDigi(Int_t i) const { 00170 if ( i >= m_lumiDigiCol->GetEntries() ) 00171 return 0; 00172 return (TLumiDigi*) m_lumiDigiCol->At(i); 00173 }