Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

DigiEvent.cxx

Go to the documentation of this file.
00001 
00002 //
00003 // The Event class is the top level class for the ASCII to ROOT
00004 // conversion. It contains all the information about a single event.
00005 //
00007 
00008 #include "digiRootData/DigiEvent.h"
00009 
00010 ClassImp(DigiEvent)
00011 
00012 // Allocate the TClonesArrays and TObjArray just once
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     // Default constructor.
00021     // Assign default values to members
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   //  m_Tagger = 0;  
00040     m_eventId = 0;
00041     m_run = 0;
00042 }
00043 //_________________________________________________________________________
00044 DigiEvent::~DigiEvent() {
00045   // Destructor    
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     // Add a new AcdTile entry, note that
00092     // TClonesArrays can only be filled via
00093     // a new with placement call
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     // Find a specific AcdTile in the TClonesArray
00102     // User supplies a valid AcdTile id, in base 10 or base 2
00103     // default is base 10
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     // Find a specific AcdTile in the TClonesArray
00112     // User supplies a valid AcdTile identified by layer, face, row, column
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     // Find a specific AcdTile in the TClonesArray
00122     // User supplies a valid AcdId
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     // Add a new XGT(AcdTile) entry, note that
00131     // TClonesArrays can only be filled via
00132     // a new with placement call
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     // Find a specific XGT(AcdTile) in the TClonesArray
00141     // User supplies a valid AcdTile id
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     // Add a new CalLog entry, note that
00151     // TClonesArrays can only be filled via
00152     // a new with placement call
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     // Find a specific CalLog in the TClonesArray
00161     // User supplies a valid CalLog
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     // Find a specific CalLog in the TClonesArray
00171     // User supplies a valid CalLog
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 ) {    // even plane
00190         tempLayer.setXY((layerNum&1) ? TkrLayer::X : TkrLayer::Y);
00191     } else {                        // odd plane
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 }

Generated at Wed Nov 21 12:22:44 2001 by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000