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