00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
00013 #include "RawData/RawLITimingSummaryBlock.h"
00014
00015 enum EDebugLITimingSummaryBlock {
00016 dbg_DumpHeaderOnUnpack = 0x0001,
00017 dbg_DumpCrateOnUnpack = 0x0002,
00018 dbg_DumpTimingSumOnUnpack = 0x0004
00019 };
00020
00021 UInt_t RawLITimingSummaryBlock::fgDebugFlags = 0;
00022
00023
00024 #include "RawData/RawLIHeader.h"
00025 #include "RawData/RawLITimingSummary.h"
00026
00027 #include "MessageService/MsgStream.h"
00028 #include "MessageService/MsgService.h"
00029 CVSID("$Id: RawLITimingSummaryBlock.cxx,v 1.14 2004/09/02 21:21:23 rhatcher Exp $");
00030
00031 #include "RawData/RawBlockRegistry.h"
00032 REGISTERRAWBLOCK(RawLITimingSummaryBlock,kMdBlockLiSummaryTiming,0);
00033
00034 ClassImp(RawLITimingSummaryBlock)
00035
00036
00037 RawLITimingSummaryBlock::RawLITimingSummaryBlock() :
00038 RawDataBlock(), fRawLIHeader(0), fRawCrateStatuses(0), fRawTimingSums(0)
00039 {
00040
00041 }
00042
00043
00044 RawLITimingSummaryBlock::RawLITimingSummaryBlock(const Int_t *block)
00045 : RawDataBlock(block),
00046 fRawLIHeader(0), fRawCrateStatuses(0), fRawTimingSums(0)
00047 {
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 }
00091
00092
00093 RawLITimingSummaryBlock::~RawLITimingSummaryBlock()
00094 {
00095
00096 if (fRawLIHeader) {
00097 delete fRawLIHeader;
00098 fRawLIHeader = 0;
00099 }
00100
00101 if (fRawTimingSums) {
00102 fRawTimingSums->Delete();
00103 delete fRawTimingSums;
00104 fRawTimingSums = 0;
00105 }
00106 if (fRawCrateStatuses) {
00107 fRawCrateStatuses->Delete();
00108 delete fRawCrateStatuses;
00109 fRawCrateStatuses = 0;
00110 }
00111 return;
00112 }
00113
00114
00115 RawLITimingSummaryBlock& RawLITimingSummaryBlock::operator=(const RawLITimingSummaryBlock& rhs)
00116 {
00117
00118
00119 if (this != &rhs) {
00120 RawDataBlock::operator=(rhs);
00121
00122 if (fRawLIHeader) {
00123 delete fRawLIHeader;
00124 fRawLIHeader = 0;
00125 }
00126
00127 if (fRawTimingSums) {
00128 fRawTimingSums->Delete();
00129 delete fRawTimingSums;
00130 fRawTimingSums = 0;
00131 }
00132 if (fRawCrateStatuses) {
00133 fRawCrateStatuses->Delete();
00134 delete fRawCrateStatuses;
00135 fRawCrateStatuses = 0;
00136 }
00137 }
00138 return *this;
00139 }
00140
00141
00142 Int_t RawLITimingSummaryBlock::GetNumberOfSummaries(void) const
00143 {
00144
00145
00146
00147 if ( ! fRawTimingSums ) FillRawTimingSums();
00148 return fRawTimingSums->GetEntriesFast();
00149 }
00150
00151
00152 const RawLITimingSummary* RawLITimingSummaryBlock::At(Int_t idx) const
00153 {
00154
00155
00156
00157 if ( ! fRawTimingSums ) FillRawTimingSums();
00158 return (RawLITimingSummary*) fRawTimingSums->At(idx);
00159 }
00160
00161
00162 TIter RawLITimingSummaryBlock::GetDatumIter(Bool_t dir) const
00163 {
00164
00165
00166
00167 if ( ! fRawTimingSums ) FillRawTimingSums();
00168 return TIter(fRawTimingSums,dir);
00169 }
00170
00171
00172 Int_t RawLITimingSummaryBlock::IndexOf(RawLITimingSummary *rawTimingSum) const
00173 {
00174
00175
00176
00177 if ( ! fRawTimingSums ) FillRawTimingSums();
00178 return fRawTimingSums->IndexOf(rawTimingSum);
00179 }
00180
00181
00182 void RawLITimingSummaryBlock::FillRawTimingSums() const
00183 {
00184
00185
00186 if ( fRawTimingSums ) return;
00187 if ( fSize <= 0 || fRawBlock == 0) {
00188 MSG("RawData",Msg::kWarning)
00189 << "RawLITimingSummaryBlock::FillRawTimingSums empty block? "
00190 << fSize << " " << fRawBlock << endl;
00191
00192 fRawLIHeader = new RawLIHeader;
00193 return;
00194 }
00195
00196 fRawCrateStatuses = new TObjArray();
00197 fRawTimingSums = new TObjArray();
00198 RawCrateStatus *cratestatus = 0;
00199 RawLITimingSummary *rawTimingSum = 0;
00200 const Int_t *p = fRawBlock;
00201 const Int_t *end = fRawBlock + fSize;
00202
00203 RawBlockId rbid = GetBlockId();
00204 Int_t minor = rbid.GetMinor();
00205
00206 p += 3;
00207
00208
00209 fRawLIHeader = new RawLIHeader(rbid,p);
00210
00211 if (fgDebugFlags&dbg_DumpHeaderOnUnpack) fRawLIHeader->Print();
00212
00213 while (p<end) {
00214
00215 cratestatus = new RawCrateStatus(rbid,p);
00216 fRawCrateStatuses->Add(cratestatus);
00217 Int_t npairs = cratestatus->GetEntries();
00218
00219 if (fgDebugFlags&dbg_DumpCrateOnUnpack) cratestatus->Print();
00220
00221 for (Int_t ipair = 0; ipair < npairs; ipair++) {
00222 rawTimingSum = new RawLITimingSummary(p,cratestatus,minor);
00223 fRawTimingSums->Add(rawTimingSum);
00224
00225 if (fgDebugFlags&dbg_DumpTimingSumOnUnpack) rawTimingSum->Print();
00226 if (p>end) {
00227 MSG("RawData",Msg::kWarning)
00228 << "RawLITimingSummaryBlock::FillRawTimingSums crate info seems trashed"
00229 << endl << " SimFlag " << SimFlag::AsString(rbid.GetSimFlag())
00230 << endl;
00231 break;
00232 }
00233 }
00234 }
00235
00236 }
00237
00238
00239 std::ostream& RawLITimingSummaryBlock::FormatToOStream(std::ostream& os,
00240 Option_t *option) const
00241 {
00242 RawDataBlock::FormatToOStream(os,option);
00243 if (option[0] == 'X') return os;
00244
00245 TIter iter = GetDatumIter();
00246
00247 const RawLIHeader* header = GetHeader();
00248 os << (*header);
00249
00250 os << " " << "Channel "
00251 << "entries"
00252 << " " << " Mean" << " "
00253 << " " << " RMS" << " "
00254 << endl;
00255
00256 TObject *tobj;
00257 RawLITimingSummary *usum;
00258 while ( ( tobj = iter.Next() ) ) {
00259 usum = dynamic_cast<RawLITimingSummary *>(tobj);
00260 if (usum) os << (*usum);
00261 }
00262 os << endl;
00263
00264 return os;
00265 }
00266
00267
00268
00269
00270