00001
00002
00003
00004
00005
00006
00007
00008
00009
00011
00012 #include "Plex/PlexSEIdAltL.h"
00013 #include "Plex/PlexCalib.h"
00014
00015 #include "MessageService/MsgService.h"
00016 #include "MessageService/MsgStream.h"
00017 #include "MessageService/MsgFormat.h"
00018 CVSID("$Id: PlexSEIdAltL.cxx,v 1.36 2008/11/09 04:11:34 rhatcher Exp $");
00019
00020 #include "TMath.h"
00021
00022 #include <string>
00023 #include <algorithm>
00024 #include <cassert>
00025
00026
00027
00028 static PlexSEIdAltLItem dummyPlexSEIdAltLItem;
00029
00030 ClassImp(PlexSEIdAltL)
00031
00032
00033
00034 UInt_t PlexSEIdAltL::fgFmtFlag = 0;
00035 const UInt_t defaultFmtFlag = 0xFFFFFFFF & ~PlexSEIdAltL::fmt_PixelSpot;
00036
00037 UInt_t lastFmtFlag = 0;
00038 string fmtHeaderTitle = "";
00039 string fmtHeaderULine = "";
00040
00041
00042 ostream& operator<<(ostream& os, const PlexSEIdAltL& alt)
00043 {
00044
00045 if (alt.size() <= 0) {
00046 os << "Empty-PlexSEIdAltL " << endl;
00047 return os;
00048 }
00049
00050 UInt_t fmt = PlexSEIdAltL::GetFmtFlag();
00051
00052 if (!fmt) fmt = defaultFmtFlag;
00053 bool doFmtIndex = fmt & PlexSEIdAltL::fmt_Index;
00054 bool doFmtCursor = fmt & PlexSEIdAltL::fmt_Cursor;
00055 bool doFmtBest = fmt & PlexSEIdAltL::fmt_Best;
00056 bool doFmtStripEnd = fmt & PlexSEIdAltL::fmt_StripEnd;
00057 bool doFmtPixelSpot = fmt & PlexSEIdAltL::fmt_PixelSpot;
00058 bool doFmtWeight = fmt & PlexSEIdAltL::fmt_Weight;
00059 bool doFmtPE = fmt & PlexSEIdAltL::fmt_PE;
00060 bool doFmtSigLin = fmt & PlexSEIdAltL::fmt_SigLin;
00061 bool doFmtSigCorr = fmt & PlexSEIdAltL::fmt_SigCorr;
00062 bool doFmtTime = fmt & PlexSEIdAltL::fmt_Time;
00063
00064 static const MsgFormat i1("%1d");
00065 static const MsgFormat f3p1("%3.1f");
00066 static const MsgFormat f5p1("%5.1f");
00067 static const MsgFormat f7p2("%7.2f");
00068
00069 if (lastFmtFlag != fmt) {
00070
00071 lastFmtFlag = fmt;
00072 fmtHeaderTitle = "";
00073 fmtHeaderULine = "";
00074 if (doFmtBest) {
00075 fmtHeaderTitle += " ";
00076 fmtHeaderULine += "-";
00077 }
00078 if (doFmtCursor) {
00079 fmtHeaderTitle += " ";
00080 fmtHeaderULine += "-";
00081 }
00082 if (doFmtIndex) {
00083 fmtHeaderTitle += " i |";
00084 fmtHeaderULine += "---+";
00085 }
00086 if (doFmtStripEnd) {
00087
00088 fmtHeaderTitle += " StripEndId |";
00089 fmtHeaderULine += "-------------+";
00090 }
00091 if (doFmtPixelSpot) {
00092
00093 fmtHeaderTitle += " PixelSpot |";
00094 fmtHeaderULine += "------------------------------+";
00095 }
00096 if (doFmtWeight) {
00097 fmtHeaderTitle += " wgt |";
00098 fmtHeaderULine += "-----+";
00099 }
00100 if (doFmtPE) {
00101 fmtHeaderTitle += " PE |";
00102 fmtHeaderULine += "-------+";
00103 }
00104 if (doFmtSigLin) {
00105 fmtHeaderTitle += " Linear |";
00106 fmtHeaderULine += "---------+";
00107 }
00108 if (doFmtSigCorr) {
00109 fmtHeaderTitle += " S2SCorr |";
00110 fmtHeaderULine += "---------+";
00111 }
00112 if (doFmtTime) {
00113 fmtHeaderTitle += " Time |";
00114 fmtHeaderULine += "---------+";
00115 }
00116 }
00117
00118 os << fmtHeaderTitle << endl;
00119 os << fmtHeaderULine << endl;
00120
00121 PlexSEIdAltLItem& best = dummyPlexSEIdAltLItem;
00122
00123 for (unsigned int i=0; i<alt.size(); ++i) {
00124 const PlexSEIdAltLItem& item = alt[i];
00125 if (doFmtBest) { best = alt.GetBestItem();
00126 os << ((item == best) ? '!' : ' ');
00127 }
00128 if (doFmtCursor) {
00129 os << ((i == alt.fCurrent) ? '@' : ' ');
00130 }
00131 if (doFmtIndex) os << " " << i1(i) << " |";
00132 if (doFmtStripEnd) os << " " << item.GetSEId().AsString("C") << " |";
00133 if (doFmtPixelSpot) os << " " << item.GetPixelSpotId().AsString("c") << " |";
00134 if (doFmtWeight) os << " " << f3p1(item.GetWeight()) << " |";
00135 if (doFmtPE) os << " " << f5p1(item.GetPE()) << " |";
00136 if (doFmtSigLin) os << " " << f7p2(item.GetSigLin()) << " |";
00137 if (doFmtSigCorr) os << " " << f7p2(item.GetSigCorr()) << " |";
00138 if (doFmtTime) os << " " << f7p2(item.GetTime()) << " |";
00139 os << endl;
00140 }
00141
00142 #ifdef OLDFORMATTING
00143 char marker;
00144 PlexStripEndId seid;
00145 MsgFormat i2("%2d");
00146 MsgFormat i3("%3d");
00147
00148
00149
00150 os << " i | StripEndId (size=" << i2(alt.size())
00151 << ",cur=" << i2(alt.fCurrent) << ") "
00152 << "| weight "
00153 << "| muon unit "
00154 << "| t offset "
00155 << endl;
00156 os << "-------+-----------------------------"
00157 << "+-----------"
00158 << "+-----------"
00159 << "+-----------"
00160 << endl;
00161
00162 for (unsigned int i=0; i<alt.size(); ++i) {
00163 (i==alt.fCurrent) ? marker = '*' : marker = ' ';
00164 PlexSEIdAltLItem item = alt[i];
00165 seid = item.GetSEId();
00166 os << " " << marker << " " << i3(i)
00167 << " " << item
00168 << endl;
00169 }
00170 #endif
00171
00172 return os;
00173 }
00174
00175
00176 PlexSEIdAltL::PlexSEIdAltL()
00177 : fCurrent(0), fDemuxVetoFlag(0), fError(kUnchecked)
00178 {
00179
00180 }
00181
00182
00183 PlexSEIdAltL::PlexSEIdAltL(const PlexSEIdAltL &rhs)
00184 : std::vector<PlexSEIdAltLItem>(),
00185 fCurrent(rhs.fCurrent),
00186 fDemuxVetoFlag(rhs.fDemuxVetoFlag),
00187 fError(kUnchecked)
00188 {
00189
00190
00191 for (unsigned int i=0; i<rhs.size(); ++i) {
00192 this->push_back(rhs[i]);
00193 }
00194
00195 }
00196
00197
00198 PlexSEIdAltL::~PlexSEIdAltL()
00199 {
00200
00201 }
00202
00203 #ifdef ALTL_EXPLICIT_ASSIGNMENT
00204
00205 PlexSEIdAltL& PlexSEIdAltL::operator=(const PlexSEIdAltL& rhs)
00206 {
00207
00208 clear();
00209 for (unsigned int i=0; i<rhs.size(); ++i) {
00210 this->push_back(rhs[i]);
00211 }
00212 fCurrent = rhs.fCurrent;
00213 fDemuxVetoFlag = rhs.fDemuxVetoFlag;
00214 fError = rhs.fError;
00215 }
00216 #endif
00217
00218
00219 void PlexSEIdAltL::AddStripEndId(const PlexStripEndId& seid,
00220 const PlexPixelSpotId& spot,
00221 Float_t weight, const PlexCalib* calib,
00222 Int_t adc, Double_t time)
00223 {
00224
00225
00226 fError = kUnchecked;
00227
00228 if (calib) {
00229 PlexSEIdAltLItem item = calib->CalibStripEnd(seid,spot,adc,time);
00230 item.SetWeight(weight);
00231 this->push_back(item);
00232 }
00233 else {
00234 PlexSEIdAltLItem item(seid,spot,weight);
00235 this->push_back(item);
00236 }
00237 }
00238
00239
00240 void PlexSEIdAltL::DropCurrent()
00241 {
00242
00243
00244
00245
00246 UShort_t n = size();
00247
00248 if (n <= 0) return;
00249 if (fCurrent>=n) {
00250 MSG("Plex",Msg::kWarning)
00251 << "can not DropCurrent (fCurrent=" << fCurrent
00252 << ") on a list of " << n << " items " << endl;
00253 return;
00254 }
00255
00256 PlexSEIdAltLIter cursor = this->begin() + fCurrent;
00257
00258 this->erase(cursor);
00259
00260 }
00261
00262
00263 void PlexSEIdAltL::DropZeroWeights()
00264 {
00265
00266
00267 if (size() <= 0) return;
00268
00269
00270 PlexSEIdAltLIter new_end =
00271 remove_if(this->begin(), this->end(),
00272 mem_fun_ref(&PlexSEIdAltLItem::IsZeroWeight));
00273
00274
00275 this->erase(new_end,this->end());
00276
00277 }
00278
00279
00280 void PlexSEIdAltL::KeepTopWeights(UInt_t n, Bool_t keeporder)
00281 {
00282
00283
00284
00285
00286
00287
00288 unsigned int i, cnt = size();
00289
00290 if (cnt <= 0) return;
00291
00292 if (n >= cnt) {
00293 if (keeporder) return;
00294 else n = cnt;
00295 }
00296
00297 PlexSEIdAltL& self = *this;
00298
00299 if (n <= 0) {
00300 this->clear();
00301 return;
00302 }
00303
00304
00305
00306
00307 Float_t *sortedwgt = new Float_t[cnt];
00308 #if ROOT_VERSION_CODE < ROOT_VERSION(5,21,5)
00309 Int_t *sortedindx = new Int_t[cnt];
00310 #else
00311 UInt_t *sortedindx = new UInt_t[cnt];
00312 #endif
00313 for (i=0; i<cnt; i++) sortedwgt[i] = self[i].GetWeight();
00314 Bool_t down=kTRUE;
00315 TMath::Sort(cnt,sortedwgt,sortedindx,down);
00316
00317 Int_t icut = sortedindx[n-1];
00318 Float_t cut = sortedwgt[icut];
00319
00320
00321
00322 vector<PlexSEIdAltLItem> tempVector;
00323 for (i=0; i<cnt; i++) {
00324 unsigned int indxold = i;
00325 if (!keeporder) indxold = sortedindx[i];
00326 if (self[indxold].GetWeight() >= cut) {
00327 tempVector.push_back(self[indxold]);
00328 }
00329 }
00330
00331
00332 this->swap(tempVector);
00333
00334 delete [] sortedwgt;
00335 delete [] sortedindx;
00336
00337 }
00338
00339
00340 void PlexSEIdAltL::ClearWeights()
00341 {
00342
00343
00344 PlexSEIdAltL& self = *this;
00345 for (unsigned int i=0; i<size(); i++) (self[i]).SetWeight(0.0);
00346 }
00347
00348
00349 const PlexSEIdAltLItem& PlexSEIdAltL::GetBestItem() const
00350 {
00351
00352
00353 unsigned int thesize = size();
00354 if (thesize == 0) {
00355 static int msglimit = 25;
00356 if (msglimit) {
00357
00358
00359
00360
00361 MSG("Plex",Msg::kWarning)
00362 << "can not GetBestItem() from an empty list" << endl;
00363 if (--msglimit == 0)
00364 MSG("Plex",Msg::kWarning)
00365 << " ... last warning of this type" << endl;
00366 }
00367 return dummyPlexSEIdAltLItem;;
00368 }
00369 else if (thesize == 1) {
00370
00371 return (*this)[0];
00372 }
00373
00374 PlexSEIdAltLConstIter cursor = this->begin();
00375 PlexSEIdAltLConstIter best = this->begin();
00376 Float_t wgt, maxwgt = -1.0e-37;
00377 while (cursor != this->end()) {
00378 const PlexSEIdAltLItem& item = *cursor;
00379 if ( (wgt = item.GetWeight()) > maxwgt ) {
00380 maxwgt = wgt; best = cursor;
00381 }
00382 cursor++;
00383 }
00384 return *best;
00385
00386 }
00387
00388
00389 PlexSEIdAltLItem& PlexSEIdAltL::GetBestItem()
00390 {
00391
00392
00393 unsigned int thesize = size();
00394 if (thesize == 0) {
00395 static int msglimit = 25;
00396 if (msglimit) {
00397
00398
00399
00400
00401 MSG("Plex",Msg::kWarning)
00402 << "can not GetBestItem() from an empty list" << endl;
00403 if (--msglimit == 0)
00404 MSG("Plex",Msg::kWarning)
00405 << " ... last warning of this type" << endl;
00406 }
00407 return dummyPlexSEIdAltLItem;;
00408 }
00409 else if (thesize == 1) {
00410
00411 return (*this)[0];
00412 }
00413
00414 PlexSEIdAltLIter cursor = this->begin();
00415 PlexSEIdAltLIter best = this->begin();
00416 Float_t wgt, maxwgt = -1.0e-37;
00417 while (cursor != this->end()) {
00418 PlexSEIdAltLItem& item = *cursor;
00419 if ( (wgt = item.GetWeight()) > maxwgt ) {
00420 maxwgt = wgt; best = cursor;
00421 }
00422 cursor++;
00423 }
00424 return *best;
00425
00426 }
00427
00428
00429 PlexStripEndId PlexSEIdAltL::GetBestSEId() const
00430 {
00431
00432
00433 return GetBestItem().GetSEId();
00434
00435 }
00436
00437
00438 Float_t PlexSEIdAltL::GetBestWeight() const
00439 {
00440
00441
00442 return GetBestItem().GetWeight();
00443
00444 }
00445
00446
00447 const PlexSEIdAltLItem& PlexSEIdAltL::GetCurrentItem() const
00448 {
00449
00450
00451 if (!IsValid()) {
00452 if (size() <= 0)
00453 MSG("Plex",Msg::kWarning)
00454 << "can not GetCurrentItem() from an empty list" << endl;
00455 else
00456 MSG("Plex",Msg::kWarning)
00457 << "can not GetCurrentItem() when !IsValid()" << endl;
00458 return dummyPlexSEIdAltLItem;;
00459 }
00460
00461 PlexSEIdAltLConstIter cursor = this->begin() + fCurrent;
00462 return *cursor;
00463
00464 }
00465
00466
00467 PlexSEIdAltLItem& PlexSEIdAltL::GetCurrentItem()
00468 {
00469
00470
00471 if (!IsValid()) {
00472 if (size() <= 0)
00473 MSG("Plex",Msg::kWarning)
00474 << "can not GetCurrentItem() from an empty list" << endl;
00475 else
00476 MSG("Plex",Msg::kWarning)
00477 << "can not GetCurrentItem() when !IsValid()" << endl;
00478 return dummyPlexSEIdAltLItem;;
00479 }
00480
00481 PlexSEIdAltLIter cursor = this->begin() + fCurrent;
00482 return *cursor;
00483
00484 }
00485
00486
00487 PlexStripEndId PlexSEIdAltL::GetCurrentSEId() const
00488 {
00489
00490
00491 return GetCurrentItem().GetSEId();
00492
00493 }
00494
00495
00496 Float_t PlexSEIdAltL::GetCurrentWeight() const
00497 {
00498
00499
00500 return GetCurrentItem().GetWeight();
00501
00502 }
00503
00504
00505 Detector::Detector_t PlexSEIdAltL::GetDetector(Bool_t reportError) const
00506 {
00507
00508
00509
00510 TestConsistency(reportError);
00511
00512 if ( fError & kBadDetector || size() < 1 )
00513 return (Detector::Detector_t)0;
00514
00515 PlexSEIdAltLConstIter cursor = this->begin();
00516 return (*cursor).GetSEId().GetDetector();
00517
00518 }
00519
00520
00521 Bool_t PlexSEIdAltL::IsVetoShield(Bool_t reportError) const
00522 {
00523
00524
00525
00526 TestConsistency(reportError);
00527
00528
00529
00530 if ( fError & kBadIsVeto || size() < 1 ) return false;
00531
00532 PlexSEIdAltLConstIter cursor = this->begin();
00533 return (*cursor).GetSEId().IsVetoShield();
00534
00535 }
00536
00537
00538 StripEnd::StripEnd_t PlexSEIdAltL::GetEnd(Bool_t reportError) const
00539 {
00540
00541
00542
00543
00544 TestConsistency(reportError);
00545
00546 if ( fError & kBadEnd || size() < 1 )
00547 return StripEnd::kUnknown;
00548
00549 PlexSEIdAltLConstIter cursor = this->begin();
00550 return (*cursor).GetSEId().GetEnd();
00551
00552 }
00553
00554
00555 Int_t PlexSEIdAltL::GetPlane(Bool_t reportError) const
00556 {
00557
00558
00559
00560
00561 TestConsistency(reportError);
00562
00563 if ( fError & kBadPlane || size() < 1 )
00564 return -1;
00565
00566 PlexSEIdAltLConstIter cursor = this->begin();
00567 return (*cursor).GetSEId().GetPlane();
00568
00569 }
00570
00571
00572
00573 PlaneView::PlaneView_t PlexSEIdAltL::GetPlaneView(Bool_t reportError) const
00574 {
00575
00576
00577
00578
00579 TestConsistency(reportError);
00580
00581 if ( fError & kBadPlaneView || size() < 1 )
00582 return PlaneView::kUnknown;
00583
00584 PlexSEIdAltLConstIter cursor = this->begin();
00585 return (*cursor).GetSEId().GetPlaneView();
00586
00587 }
00588
00589
00590 Bool_t PlexSEIdAltL::SetToOppositeEnds(PlexSEIdAltL& that)
00591 {
00592
00593
00594
00595
00596
00597 UInt_t where_this = fCurrent;
00598 UInt_t where_that = that.fCurrent;
00599
00600 this->SetFirst();
00601 while (this->IsValid()) {
00602 PlexStripEndId seid_this = this->GetCurrentSEId();
00603 that.SetFirst();
00604 while (that.IsValid()) {
00605 PlexStripEndId seid_that = that.GetCurrentSEId();
00606 if (seid_this.IsOppositeStripEnd(seid_that)) return true;
00607 that.Next();
00608 }
00609 this->Next();
00610 }
00611
00612 fCurrent = where_this;
00613 that.fCurrent = where_that;
00614 return false;
00615
00616 }
00617
00618 Bool_t PlexSEIdAltL::IsValid() const
00619 {
00620
00621
00622 return size()>0 && fCurrent<size();
00623
00624 }
00625
00626
00627 void PlexSEIdAltL::Print(Option_t *option) const
00628 {
00629
00630
00631 unsigned int n = size();
00632
00633 if (n <= 0) {
00634 printf("Empty PlexSEIdAltL\n");
00635 return;
00636 }
00637
00638 const PlexSEIdAltLItem& best = GetBestItem();
00639
00640 const PlexSEIdAltL& self = *this;
00641 unsigned int i;
00642 char cursormarker, bestmarker;
00643 PlexStripEndId seid;
00644
00645
00646 switch (option[0]) {
00647 case 'c':
00648 case 'C':
00649
00650
00651 seid = GetCurrentSEId();
00652 printf("[%1.1s|%4d %1.1s%1.1s|%1.1s%1.1s]",
00653 Detector::AsString(seid.GetDetector()),
00654 seid.GetPlane(),
00655 PlaneView::AsString(seid.GetPlaneView()),
00656 PlaneCoverage::AsString(seid.GetPlaneCoverage()),
00657 StripEnd::AsString(seid.GetSubPart()),
00658 StripEnd::AsString(seid.GetEnd()));
00659 for (i=0; i<n; i++) {
00660 const PlexSEIdAltLItem& item = self[i];
00661 bestmarker = (item == best) ? '!' : ' ';
00662 cursormarker = (i == fCurrent) ? '@' : ' ';
00663 seid = item.GetSEId();
00664 printf(" %c%c%3d",bestmarker,cursormarker,seid.GetStrip());
00665
00666 }
00667 if (option[0] == 'C') {
00668 printf("\n wgt ");
00669 for (i=0; i<n; i++) {
00670 const PlexSEIdAltLItem& item = self[i];
00671 printf(" %5.3f",item.GetWeight());
00672 }
00673 }
00674 printf("\n");
00675
00676 break;
00677 default:
00678
00679 cout << *this;
00680
00681 }
00682 }
00683
00684
00685 void PlexSEIdAltL::SetCurrentWeight(Float_t weight)
00686 {
00687
00688
00689 if (!IsValid()) return;
00690 PlexSEIdAltLIter cursor = this->begin() + fCurrent;
00691 (*cursor).SetWeight(weight);
00692
00693 }
00694
00695
00696 void PlexSEIdAltL::AddToCurrentWeight(Float_t wgtadd)
00697 {
00698
00699
00700 if (!IsValid()) return;
00701 PlexSEIdAltLIter cursor = this->begin() + fCurrent;
00702 (*cursor).AddToWeight(wgtadd);
00703
00704 }
00705
00706
00707 void PlexSEIdAltL::NormalizeWeights(Float_t wgtsum)
00708 {
00709
00710
00711
00712
00713 unsigned int n=size();
00714
00715 if (n < 1) return;
00716
00717 Float_t sum = 0.0;
00718
00719 PlexSEIdAltLIter iter, the_end=this->end();
00720
00721 iter = this->begin();
00722 while (iter != the_end) { sum += (*iter).GetWeight(); iter++; }
00723
00724 iter = this->begin();
00725 if ( sum != 0.0 ) {
00726 Float_t scale = wgtsum/sum;
00727 while (iter != the_end) {
00728 Float_t wgt = (*iter).GetWeight() * scale;
00729 (*iter).SetWeight(wgt);
00730 iter++;
00731 }
00732 } else {
00733
00734 Float_t equalwgt = wgtsum/(float)n;
00735 while (iter != the_end) { (*iter).SetWeight(equalwgt); iter++; }
00736 }
00737
00738 }
00739
00740
00741
00742 void PlexSEIdAltL::TestConsistency(Bool_t reportError) const
00743 {
00744
00745
00746
00747
00748 if ( kUnchecked != fError ) return;
00749
00750
00751 fError = 0;
00752
00753 unsigned int n = size();
00754
00755
00756 if ( 1 == n ) return;
00757
00758
00759
00760 if ( 0 == n ) {
00761 fError = kBadDetector | kBadEnd | kBadPlane | kBadPlaneView;
00762 return;
00763 }
00764
00765 PlexSEIdAltLConstIter iter = this->begin();
00766 PlexSEIdAltLConstIter the_end = this->end();
00767
00768 PlexStripEndId first_seid = (*iter).GetSEId();
00769 Detector::Detector_t firstdet = first_seid.GetDetector();
00770 StripEnd::StripEnd_t firstend = first_seid.GetEnd();
00771 Int_t firstpln = first_seid.GetPlane();
00772 PlaneView::PlaneView_t firstpvw = first_seid.GetPlaneView();
00773 Bool_t firstisv = first_seid.IsVetoShield();
00774
00775 iter++;
00776 while (iter != the_end) {
00777 PlexStripEndId alt_seid = (*iter).GetSEId();
00778 Detector::Detector_t altdet = alt_seid.GetDetector();
00779 StripEnd::StripEnd_t altend = alt_seid.GetEnd();
00780 Int_t altpln = alt_seid.GetPlane();
00781 PlaneView::PlaneView_t altpvw = alt_seid.GetPlaneView();
00782 Bool_t altisv = alt_seid.IsVetoShield();
00783 if ( altdet != firstdet ) fError |= kBadDetector;
00784 if ( altend != firstend ) fError |= kBadEnd;
00785
00786
00787 if ( ! altisv ) {
00788 if ( altpln != firstpln ) fError |= kBadPlane;
00789 if ( altpvw != firstpvw ) fError |= kBadPlaneView;
00790 }
00791 if ( altisv != firstisv ) fError |= kBadIsVeto;
00792 iter++;
00793 }
00794
00795 if ( fError != kOkay && reportError ) {
00796 MSG("Plex",Msg::kWarning)
00797 << "PlexSEIdAltL::TestConsistency - list is inconsistent "
00798 << "(0x" << hex << setfill('0') << setw(2) << fError
00799 << setfill(' ') << dec << ")" << endl;
00800
00801 UInt_t old_fmt = GetFmtFlag();
00802 SetFmtFlag(fmt_Index|fmt_StripEnd|fmt_PixelSpot);
00803 this->Print();
00804 SetFmtFlag(old_fmt);
00805 }
00806
00807 }
00808
00809