00001
00002
00003
00004
00005
00007
00008 #include "digiRootData/DigiEvent.h"
00009
00010 ClassImp(DigiEvent)
00011
00012
00013 TClonesArray *DigiEvent::m_staticAcdDigiVec = 0;
00014 TClonesArray *DigiEvent::m_staticXgtDigiVec = 0;
00015 TClonesArray *DigiEvent::m_staticCalDigiVec = 0;
00016 TObjArray *DigiEvent::m_staticTkrDigiVec = 0;
00017
00018
00019 DigiEvent::DigiEvent() {
00020
00021
00022 if (!m_staticAcdDigiVec) m_staticAcdDigiVec = new TClonesArray("AcdTile", 24);
00023 m_AcdDigiVec = m_staticAcdDigiVec;
00024 m_numTiles = -1;
00025
00026 if (!m_staticXgtDigiVec) m_staticXgtDigiVec = new TClonesArray("AcdTile", 4);
00027 m_XgtDigiVec = m_staticXgtDigiVec;
00028 m_numXgts = -1;
00029
00030 if (!m_staticCalDigiVec) m_staticCalDigiVec = new TClonesArray("CalLog", 80);
00031 m_CalDigiVec = m_staticCalDigiVec;
00032 m_numLogs = -1;
00033
00034 if (!m_staticTkrDigiVec) m_staticTkrDigiVec = new TObjArray();
00035 m_TkrDigiVec = m_staticTkrDigiVec;
00036 m_numLayers = -1;
00037
00038
00039
00040 m_eventId = 0;
00041 m_run = 0;
00042 }
00043
00044 DigiEvent::~DigiEvent() {
00045
00046 if(m_AcdDigiVec == m_staticAcdDigiVec) m_staticAcdDigiVec = 0;
00047 m_AcdDigiVec->Delete();
00048 delete m_AcdDigiVec;
00049 m_AcdDigiVec = 0;
00050
00051 if(m_XgtDigiVec == m_staticXgtDigiVec) m_staticXgtDigiVec = 0;
00052 m_XgtDigiVec->Delete();
00053 delete m_XgtDigiVec;
00054 m_XgtDigiVec = 0;
00055
00056 if(m_CalDigiVec == m_staticCalDigiVec) m_staticCalDigiVec = 0;
00057 m_CalDigiVec->Delete();
00058 delete m_CalDigiVec;
00059 m_CalDigiVec = 0;
00060
00061 if(m_TkrDigiVec == m_staticTkrDigiVec) m_staticTkrDigiVec = 0;
00062 m_TkrDigiVec->Delete();
00063 delete m_TkrDigiVec;
00064 m_TkrDigiVec = 0;
00065
00066 }
00067
00068 void DigiEvent::Clean(Option_t *option) {
00069 m_AcdHeader.Clean();
00070 m_AcdDigiVec->Clear();
00071 m_numTiles = -1;
00072
00073 m_XgtDigiVec->Clear();
00074 m_numXgts = -1;
00075
00076 m_CalHeader.Clean();
00077 m_CalDigiVec->Clear();
00078 m_numLogs = -1;
00079
00080 m_TkrHeader.Clean();
00081 m_TkrDigiVec->Delete();
00082 m_numLayers = -1;
00083
00084 m_L1T.Clean();
00085
00086 m_liveTime.Clean();
00087 }
00088
00089
00090 AcdTile* DigiEvent::addAcdTile(UInt_t id, short base, short used) {
00091
00092
00093
00094 ++m_numTiles;
00095 TClonesArray &tiles = *m_AcdDigiVec;
00096 new(tiles[m_numTiles]) AcdTile(id, base, used);
00097 return ((AcdTile*)(tiles[m_numTiles]));
00098 }
00099
00100 const AcdTile* DigiEvent::getAcdTile(UInt_t id) {
00101
00102
00103
00104 AcdTile tempTile = AcdTile(id);
00105 int index = m_AcdDigiVec->BinarySearch(&tempTile);
00106 if (index >= 0) return ((AcdTile*)m_AcdDigiVec->At(index));
00107 return 0;
00108 }
00109
00110 const AcdTile* DigiEvent::getAcdTile(short l, short f, short r, short c) {
00111
00112
00113 AcdId tempId(l, f, r, c);
00114 AcdTile tempTile = AcdTile(tempId.getId());
00115 int index = m_AcdDigiVec->BinarySearch(&tempTile);
00116 if (index >= 0) return ((AcdTile*)m_AcdDigiVec->At(index));
00117 return 0;
00118 }
00119
00120 const AcdTile* DigiEvent::getAcdTile(AcdId &id) {
00121
00122
00123 AcdTile tempTile = AcdTile(id.getId());
00124 int index = m_AcdDigiVec->BinarySearch(&tempTile);
00125 if (index >= 0) return ((AcdTile*)m_AcdDigiVec->At(index));
00126 return 0;
00127 }
00128
00129 AcdTile* DigiEvent::addXgt(UInt_t id, short base) {
00130
00131
00132
00133 ++m_numXgts;
00134 TClonesArray &xgts = *m_XgtDigiVec;
00135 new(xgts[m_numXgts]) AcdTile(id, base);
00136 return ((AcdTile*)(xgts[m_numXgts]));
00137 }
00138
00139 const AcdTile* DigiEvent::getXgt(UInt_t id) {
00140
00141
00142 AcdTile tempTile = AcdTile(id);
00143 int index = m_XgtDigiVec->BinarySearch(&tempTile);
00144 if (index >= 0) return ((AcdTile*)m_XgtDigiVec->At(index));
00145 return 0;
00146 }
00147
00148
00149 CalLog* DigiEvent::addCalLog() {
00150
00151
00152
00153 ++m_numLogs;
00154 TClonesArray &logs = *m_CalDigiVec;
00155 new(logs[m_numLogs]) CalLog();
00156 return ((CalLog*)(logs[m_numLogs]));
00157 }
00158
00159 const CalLog* DigiEvent::getCalLog(LogId &id) {
00160
00161
00162 CalLog tempLog = CalLog(id);
00163 int index = m_CalDigiVec->BinarySearch(&tempLog);
00164 if (index >= 0) return ((CalLog*)m_CalDigiVec->At(index));
00165 return 0;
00166
00167 }
00168
00169 const CalLog* DigiEvent::getCalLog(UShort_t tower, UShort_t layer, UShort_t column) {
00170
00171
00172 CalLog tempLog = CalLog();
00173 tempLog.getLogId()->setId(tower, layer, column);
00174 int index = m_CalDigiVec->BinarySearch(&tempLog);
00175 if (index >= 0) return ((CalLog*)m_CalDigiVec->At(index));
00176 return 0;
00177 }
00178
00179
00180 void DigiEvent::addTkrLayer(TkrLayer *layer) {
00181 m_TkrDigiVec->Add(layer);
00182 ++m_numLayers;
00183 }
00184
00185 const TkrLayer* DigiEvent::getTkrLayer(unsigned int layerNum) {
00186 TkrLayer tempLayer = TkrLayer();
00187 unsigned int planeNum = layerNum >> 1;
00188 tempLayer.setPlaneNum(planeNum);
00189 if ( (planeNum % 2) == 0 ) {
00190 tempLayer.setXY((layerNum&1) ? TkrLayer::X : TkrLayer::Y);
00191 } else {
00192 tempLayer.setXY((layerNum&1) ? TkrLayer::Y : TkrLayer::X);
00193 }
00194 int index = m_TkrDigiVec->BinarySearch(&tempLayer);
00195 if (index >= 0) return ((TkrLayer*)m_TkrDigiVec->At(index));
00196 return 0;
00197 }