00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifdef __CLDAQ_ROOT_USE
00020 #ifndef CLDAQ__TRECORDASSOCIATIONTABLE_HH
00021 #define CLDAQ__TRECORDASSOCIATIONTABLE_HH
00022
00023 #include <TH1.h>
00024 #include "Tglobals.h"
00025 #include "TRecordDisplayCanvas.hh"
00026 #include "TRecordAssociationList.hh"
00027 #include "TRecordAssociation.hh"
00028
00029 class TRecordDisplayCanvas;
00030 class TH1D;
00031
00032 class TRecordAssociationTable
00033 {
00034
00035 private:
00036 TRecordAssociationList theAssociationList;
00037
00038 public:
00039 TRecordAssociationTable();
00040 TRecordAssociationTable( const TRecordAssociationList& list );
00041 TRecordAssociationTable( const TRecordAssociationTable& right );
00042 ~TRecordAssociationTable();
00043
00044 public:
00045 const TRecordAssociationTable& operator=( const TRecordAssociationTable& right );
00046 Tbool operator==( const TRecordAssociationTable& right ) const;
00047 Tbool operator!=( const TRecordAssociationTable& right ) const;
00048
00049 public:
00050 friend Tostream& operator<<( Tostream& tos, const TRecordAssociationTable& right );
00051
00052 public:
00053 const TRecordAssociationList& GetAssociationList() const;
00054 TRecordAssociationList& GetAssociationList();
00055 Tvoid SetAssociationList( const TRecordAssociationList& list );
00056
00057 public:
00058 Tint FindAssociation( const TRecordAssociation& asso ) const;
00059 Tint FindAssociation( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag ) const;
00060 Tint FindAssociation( Tstring* tags ) const;
00061
00062 Tbool HasAssociation( const TRecordAssociation& asso ) const;
00063 Tbool HasAssociation( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag ) const;
00064 Tbool HasAssociation( Tstring* tags ) const;
00065
00066 Tvoid AddAssociation( const TRecordAssociation& asso );
00067 Tvoid AddAssociation( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag );
00068 Tvoid AddAssociation( Tstring* tags );
00069
00070 Tvoid SetNumberOfBins( Tint index, Tint nbin );
00071 Tvoid SetNumberOfBins( const TRecordAssociation& asso, Tint nbin );
00072 Tvoid SetNumberOfBins( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag, Tint nbin );
00073 Tvoid SetNumberOfBins( Tstring* tags, Tint nbin );
00074
00075 Tvoid SetMinimumX( Tint index, Tdouble xmin );
00076 Tvoid SetMinimumX( const TRecordAssociation& asso, Tdouble xmin );
00077 Tvoid SetMinimumX( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag, Tdouble xmin );
00078 Tvoid SetMinimumX( Tstring* tags, Tdouble xmin );
00079
00080 Tvoid SetMaximumX( Tint index, Tdouble xmax );
00081 Tvoid SetMaximumX( const TRecordAssociation& asso, Tdouble xmax );
00082 Tvoid SetMaximumX( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag, Tdouble xmax );
00083 Tvoid SetMaximumX( Tstring* tags, Tdouble xmax );
00084
00085 Tvoid SetCanvas( Tint index, TRecordDisplayCanvas* cv );
00086 Tvoid SetCanvas( const TRecordAssociation& asso, TRecordDisplayCanvas* cv );
00087 Tvoid SetCanvas( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag, TRecordDisplayCanvas* cv );
00088 Tvoid SetCanvas( Tstring* tags, TRecordDisplayCanvas* cv );
00089
00090 Tvoid SetHistogram( Tint index, TH1D* h );
00091 Tvoid SetHistogram( const TRecordAssociation& asso, TH1D* h );
00092 Tvoid SetHistogram( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag, TH1D* h );
00093 Tvoid SetHistogram( Tstring* tags, TH1D* h );
00094
00095 Tint GetNumberOfBins( Tint index ) const;
00096 Tint GetNumberOfBins( const TRecordAssociation& asso ) const;
00097 Tint GetNumberOfBins( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag ) const;
00098 Tint GetNumberOfBins( Tstring* tags ) const;
00099
00100 Tdouble GetMinimumX( Tint index ) const;
00101 Tdouble GetMinimumX( const TRecordAssociation& asso ) const;
00102 Tdouble GetMinimumX( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag ) const;
00103 Tdouble GetMinimumX( Tstring* tags ) const;
00104
00105 Tdouble GetMaximumX( Tint index ) const;
00106 Tdouble GetMaximumX( const TRecordAssociation& asso ) const;
00107 Tdouble GetMaximumX( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag ) const;
00108 Tdouble GetMaximumX( Tstring* tags ) const;
00109
00110 TRecordDisplayCanvas* GetCanvas( Tint index ) const;
00111 TRecordDisplayCanvas* GetCanvas( const TRecordAssociation& asso ) const;
00112 TRecordDisplayCanvas* GetCanvas( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag ) const;
00113 TRecordDisplayCanvas* GetCanvas( Tstring* tags ) const;
00114
00115 TH1D* GetHistogram( Tint index ) const;
00116 TH1D* GetHistogram( const TRecordAssociation& asso ) const;
00117 TH1D* GetHistogram( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag ) const;
00118 TH1D* GetHistogram( Tstring* tags ) const;
00119
00120 Tbool IsValid( Tint index ) const;
00121 Tbool IsValid( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag ) const;
00122 Tbool IsValid( Tstring* tags ) const;
00123 Tbool IsValid( const TRecordAssociation& asso ) const;
00124
00125 Tint Size() const;
00126 Tbool Empty() const;
00127
00128 #ifdef __CLDAQ_ROOT_DLL
00129 ClassDef(TRecordAssociationTable,0)
00130 #endif
00131
00132 };
00133
00134 inline const TRecordAssociationList& TRecordAssociationTable::GetAssociationList() const
00135 {
00136 return theAssociationList;
00137 }
00138
00139 inline TRecordAssociationList& TRecordAssociationTable::GetAssociationList()
00140 {
00141 return theAssociationList;
00142 }
00143
00144 inline Tvoid TRecordAssociationTable::SetAssociationList( const TRecordAssociationList& list )
00145 {
00146 theAssociationList = list;
00147 return;
00148 }
00149
00150 inline Tint TRecordAssociationTable::FindAssociation( const TRecordAssociation& asso ) const
00151 {
00152 for ( Tsize_t i = 0; i < theAssociationList.size(); i ++ ) {
00153 if ( theAssociationList[ i ] == asso ) {
00154 return i;
00155 }
00156 }
00157 return -1;
00158 }
00159
00160 inline Tint TRecordAssociationTable::FindAssociation( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag ) const
00161 {
00162 return FindAssociation( TRecordAssociation( recordtag, sectiontag, segmenttag, elementtag ) );
00163 }
00164
00165 inline Tint TRecordAssociationTable::FindAssociation( Tstring* tags ) const
00166 {
00167 return FindAssociation( tags[0], tags[1], tags[2], tags[3] );
00168 }
00169
00170 inline Tbool TRecordAssociationTable::HasAssociation( const TRecordAssociation& asso ) const
00171 {
00172 if ( FindAssociation( asso ) < 0 ) {
00173 return Tfalse;
00174 } else {
00175 return Ttrue;
00176 }
00177 }
00178
00179 inline Tbool TRecordAssociationTable::HasAssociation( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag ) const
00180 {
00181 return HasAssociation( TRecordAssociation( recordtag, sectiontag, segmenttag, elementtag ) );
00182 }
00183
00184 inline Tbool TRecordAssociationTable::HasAssociation( Tstring* tags ) const
00185 {
00186 return HasAssociation( tags[0], tags[1], tags[2], tags[3] );
00187 }
00188
00189 inline Tvoid TRecordAssociationTable::AddAssociation( const TRecordAssociation& asso )
00190 {
00191 if ( !HasAssociation( asso ) ) {
00192 theAssociationList.push_back( asso );
00193 }
00194 return;
00195 }
00196
00197 inline Tvoid TRecordAssociationTable::AddAssociation( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag )
00198 {
00199 AddAssociation( TRecordAssociation( recordtag, sectiontag, segmenttag, elementtag ) );
00200 return;
00201 }
00202
00203 inline Tvoid TRecordAssociationTable::AddAssociation( Tstring* tags )
00204 {
00205 AddAssociation( tags[0], tags[1], tags[2], tags[3] );
00206 return;
00207 }
00208
00209 inline Tvoid TRecordAssociationTable::SetNumberOfBins( Tint index, Tint nbin )
00210 {
00211 if ( index >= 0 && index < (Tint)theAssociationList.size() ) {
00212 theAssociationList[ index ].SetNumberOfBins( nbin );
00213 }
00214 return;
00215 }
00216
00217 inline Tvoid TRecordAssociationTable::SetNumberOfBins( const TRecordAssociation& asso, Tint nbin )
00218 {
00219 SetNumberOfBins( FindAssociation( asso ), nbin );
00220 return;
00221 }
00222
00223 inline Tvoid TRecordAssociationTable::SetNumberOfBins( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag, Tint nbin )
00224 {
00225 SetNumberOfBins( TRecordAssociation( recordtag, sectiontag, segmenttag, elementtag ), nbin );
00226 return;
00227 }
00228
00229 inline Tvoid TRecordAssociationTable::SetNumberOfBins( Tstring* tags, Tint nbin )
00230 {
00231 SetNumberOfBins( tags[0], tags[1], tags[2], tags[3], nbin );
00232 return;
00233 }
00234
00235 inline Tvoid TRecordAssociationTable::SetMinimumX( Tint index, Tdouble xmin )
00236 {
00237 if ( index >= 0 && index < (Tint)theAssociationList.size() ) {
00238 theAssociationList[ index ].SetMinimumX( xmin );
00239 }
00240 return;
00241 }
00242
00243 inline Tvoid TRecordAssociationTable::SetMinimumX( const TRecordAssociation& asso, Tdouble xmin )
00244 {
00245 SetMinimumX( FindAssociation( asso ), xmin );
00246 return;
00247 }
00248
00249 inline Tvoid TRecordAssociationTable::SetMinimumX( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag, Tdouble xmin )
00250 {
00251 SetMinimumX( TRecordAssociation( recordtag, sectiontag, segmenttag, elementtag ), xmin );
00252 return;
00253 }
00254
00255 inline Tvoid TRecordAssociationTable::SetMinimumX( Tstring* tags, Tdouble xmin )
00256 {
00257 SetMinimumX( tags[0], tags[1], tags[2], tags[3], xmin );
00258 return;
00259 }
00260
00261 inline Tvoid TRecordAssociationTable::SetMaximumX( Tint index, Tdouble xmax )
00262 {
00263 if ( index >= 0 && index < (Tint)theAssociationList.size() ) {
00264 theAssociationList[ index ].SetMaximumX( xmax );
00265 }
00266 return;
00267 }
00268
00269 inline Tvoid TRecordAssociationTable::SetMaximumX( const TRecordAssociation& asso, Tdouble xmax )
00270 {
00271 SetMaximumX( FindAssociation( asso ), xmax );
00272 return;
00273 }
00274
00275 inline Tvoid TRecordAssociationTable::SetMaximumX( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag, Tdouble xmax )
00276 {
00277 SetMaximumX( TRecordAssociation( recordtag, sectiontag, segmenttag, elementtag ), xmax );
00278 return;
00279 }
00280
00281 inline Tvoid TRecordAssociationTable::SetMaximumX( Tstring* tags, Tdouble xmax )
00282 {
00283 SetMaximumX( tags[0], tags[1], tags[2], tags[3], xmax );
00284 return;
00285 }
00286
00287 inline Tvoid TRecordAssociationTable::SetCanvas( Tint index, TRecordDisplayCanvas* cv )
00288 {
00289 if ( index >= 0 && index < (Tint)theAssociationList.size() ) {
00290 theAssociationList[ index ].SetCanvas( cv );
00291 }
00292 return;
00293 }
00294
00295 inline Tvoid TRecordAssociationTable::SetCanvas( const TRecordAssociation& asso, TRecordDisplayCanvas* cv )
00296 {
00297 SetCanvas( FindAssociation( asso ), cv );
00298 return;
00299 }
00300
00301 inline Tvoid TRecordAssociationTable::SetCanvas( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag, TRecordDisplayCanvas* cv )
00302 {
00303 SetCanvas( TRecordAssociation( recordtag, sectiontag, segmenttag, elementtag ), cv );
00304 return;
00305 }
00306
00307 inline Tvoid TRecordAssociationTable::SetCanvas( Tstring* tags, TRecordDisplayCanvas* cv )
00308 {
00309 SetCanvas( tags[0], tags[1], tags[2], tags[3], cv );
00310 return;
00311 }
00312
00313 inline Tvoid TRecordAssociationTable::SetHistogram( Tint index, TH1D* h )
00314 {
00315 if ( index >= 0 && index < (Tint)theAssociationList.size() ) {
00316 theAssociationList[ index ].SetHistogram( h );
00317 }
00318 return;
00319 }
00320
00321 inline Tvoid TRecordAssociationTable::SetHistogram( const TRecordAssociation& asso, TH1D* h )
00322 {
00323 SetHistogram( FindAssociation( asso ), h );
00324 return;
00325 }
00326
00327 inline Tvoid TRecordAssociationTable::SetHistogram( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag, TH1D* h )
00328 {
00329 SetHistogram( TRecordAssociation( recordtag, sectiontag, segmenttag, elementtag ), h );
00330 return;
00331 }
00332
00333 inline Tvoid TRecordAssociationTable::SetHistogram( Tstring* tags, TH1D* h )
00334 {
00335 SetHistogram( tags[0], tags[1], tags[2], tags[3], h );
00336 return;
00337 }
00338
00339 inline Tint TRecordAssociationTable::GetNumberOfBins( Tint index ) const
00340 {
00341 if ( index >= 0 && index < (Tint)theAssociationList.size() ) {
00342 return theAssociationList[ index ].GetNumberOfBins();
00343 } else {
00344 return -1;
00345 }
00346 }
00347
00348 inline Tint TRecordAssociationTable::GetNumberOfBins( const TRecordAssociation& asso ) const
00349 {
00350 return GetNumberOfBins( FindAssociation( asso ) );
00351 }
00352
00353 inline Tint TRecordAssociationTable::GetNumberOfBins( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag ) const
00354 {
00355 return GetNumberOfBins( TRecordAssociation( recordtag, sectiontag, segmenttag, elementtag ) );
00356 }
00357
00358 inline Tint TRecordAssociationTable::GetNumberOfBins( Tstring* tags ) const
00359 {
00360 return GetNumberOfBins( tags[0], tags[1], tags[2], tags[3] );
00361 }
00362
00363 inline Tdouble TRecordAssociationTable::GetMinimumX( Tint index ) const
00364 {
00365 if ( index >= 0 && index < (Tint)theAssociationList.size() ) {
00366 return theAssociationList[ index ].GetMinimumX();
00367 } else {
00368 return DBL_MAX;
00369 }
00370 }
00371
00372 inline Tdouble TRecordAssociationTable::GetMinimumX( const TRecordAssociation& asso ) const
00373 {
00374 return GetMinimumX( FindAssociation( asso ) );
00375 }
00376
00377 inline Tdouble TRecordAssociationTable::GetMinimumX( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag ) const
00378 {
00379 return GetMinimumX( TRecordAssociation( recordtag, sectiontag, segmenttag, elementtag ) );
00380 }
00381
00382 inline Tdouble TRecordAssociationTable::GetMinimumX( Tstring* tags ) const
00383 {
00384 return GetMinimumX( tags[0], tags[1], tags[2], tags[3] );
00385 }
00386
00387 inline Tdouble TRecordAssociationTable::GetMaximumX( Tint index ) const
00388 {
00389 if ( index >= 0 && index < (Tint)theAssociationList.size() ) {
00390 return theAssociationList[ index ].GetMaximumX();
00391 } else {
00392 return DBL_MIN;
00393 }
00394 }
00395
00396 inline Tdouble TRecordAssociationTable::GetMaximumX( const TRecordAssociation& asso ) const
00397 {
00398 return GetMaximumX( FindAssociation( asso ) );
00399 }
00400
00401 inline Tdouble TRecordAssociationTable::GetMaximumX( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag ) const
00402 {
00403 return GetMaximumX( TRecordAssociation( recordtag, sectiontag, segmenttag, elementtag ) );
00404 }
00405
00406 inline Tdouble TRecordAssociationTable::GetMaximumX( Tstring* tags ) const
00407 {
00408 return GetMaximumX( tags[0], tags[1], tags[2], tags[3] );
00409 }
00410
00411 inline TRecordDisplayCanvas* TRecordAssociationTable::GetCanvas( Tint index ) const
00412 {
00413 if ( index >= 0 && index < (Tint)theAssociationList.size() ) {
00414 return theAssociationList[ index ].GetCanvas();
00415 } else {
00416 return 0;
00417 }
00418 }
00419
00420 inline TRecordDisplayCanvas* TRecordAssociationTable::GetCanvas( const TRecordAssociation& asso ) const
00421 {
00422 return GetCanvas( FindAssociation( asso ) );
00423 }
00424
00425 inline TRecordDisplayCanvas* TRecordAssociationTable::GetCanvas( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag ) const
00426 {
00427 return GetCanvas( TRecordAssociation( recordtag, sectiontag, segmenttag, elementtag ) );
00428 }
00429
00430 inline TRecordDisplayCanvas* TRecordAssociationTable::GetCanvas( Tstring* tags ) const
00431 {
00432 return GetCanvas( tags[0], tags[1], tags[2], tags[3] );
00433 }
00434
00435 inline TH1D* TRecordAssociationTable::GetHistogram( Tint index ) const
00436 {
00437 if ( index >= 0 && index < (Tint)theAssociationList.size() ) {
00438 return theAssociationList[ index ].GetHistogram();
00439 } else {
00440 return 0;
00441 }
00442 }
00443
00444 inline TH1D* TRecordAssociationTable::GetHistogram( const TRecordAssociation& asso ) const
00445 {
00446 return GetHistogram( FindAssociation( asso ) );
00447 }
00448
00449 inline TH1D* TRecordAssociationTable::GetHistogram( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag ) const
00450 {
00451 return GetHistogram( TRecordAssociation( recordtag, sectiontag, segmenttag, elementtag ) );
00452 }
00453
00454 inline TH1D* TRecordAssociationTable::GetHistogram( Tstring* tags ) const
00455 {
00456 return GetHistogram( tags[0], tags[1], tags[2], tags[3] );
00457 }
00458
00459 inline Tbool TRecordAssociationTable::IsValid( Tint index ) const
00460 {
00461 if ( index >= 0 && index < (Tint)theAssociationList.size() ) {
00462 return theAssociationList[ index ].IsValid();
00463 } else {
00464 return Tfalse;
00465 }
00466 }
00467
00468 inline Tbool TRecordAssociationTable::IsValid( const TRecordAssociation& asso ) const
00469 {
00470 return IsValid( FindAssociation( asso ) );
00471 }
00472
00473 inline Tbool TRecordAssociationTable::IsValid( const Tstring& recordtag, const Tstring& sectiontag, const Tstring& segmenttag, const Tstring& elementtag ) const
00474 {
00475 return IsValid( TRecordAssociation( recordtag, sectiontag, segmenttag, elementtag ) );
00476 }
00477
00478 inline Tbool TRecordAssociationTable::IsValid( Tstring* tags ) const
00479 {
00480 return IsValid( tags[0], tags[1], tags[2], tags[3] );
00481 }
00482
00483 inline Tint TRecordAssociationTable::Size() const
00484 {
00485 return (Tint)theAssociationList.size();
00486 }
00487
00488 inline Tbool TRecordAssociationTable::Empty() const
00489 {
00490 if ( Size() == 0 ) {
00491 return Ttrue;
00492 } else {
00493 return Tfalse;
00494 }
00495 }
00496
00497 #endif
00498 #endif