1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 /* $Id: AliTriggerScalersRecord.cxx 22322 2007-11-22 11:43:14Z cvetan $ */
18 ///////////////////////////////////////////////////////////////////////////////
20 // Class to define the ALICE Trigger Scalers Record
22 // Each record consists of 1 time stamp (4 words) (AliTimeStamp)
23 // and an array with the scalers (AliTriggerScalers) for each trigger class
26 //////////////////////////////////////////////////////////////////////////////
28 #include <Riostream.h>
29 #include <TObjArray.h>
31 #include "AliTimeStamp.h"
32 #include "AliTriggerScalers.h"
33 #include "AliTriggerScalersRecord.h"
35 ClassImp( AliTriggerScalersRecord )
36 //_____________________________________________________________________________
37 AliTriggerScalersRecord::AliTriggerScalersRecord():
44 //_____________________________________________________________________________
45 void AliTriggerScalersRecord::SetTimeStamp( UInt_t orbit, UInt_t period,
46 UInt_t seconds, UInt_t microsecs )
48 fTimestamp.SetTimeStamp( orbit, period, seconds, microsecs );
51 //_____________________________________________________________________________
52 void AliTriggerScalersRecord::AddTriggerScalers( AliTriggerScalers* scaler )
54 fScalers.AddLast( scaler );
58 //_____________________________________________________________________________
59 void AliTriggerScalersRecord::AddTriggerScalers( UChar_t classIndex, UInt_t LOCB, UInt_t LOCA,
60 UInt_t L1CB, UInt_t L1CA, UInt_t L2CB, UInt_t L2CA )
62 AddTriggerScalers( new AliTriggerScalers( classIndex, LOCB, LOCA, L1CB, L1CA, L2CB, L2CA ) );
66 //_____________________________________________________________________________
67 Int_t AliTriggerScalersRecord::Compare( const TObject* obj ) const
71 return fTimestamp.Compare( &(((AliTriggerScalersRecord*)obj)->fTimestamp) );
73 //_____________________________________________________________________________
74 const AliTriggerScalers* AliTriggerScalersRecord::GetTriggerScalersForClass( const Int_t classindex ) const
76 // Find Trigger scaler with class ID = classindex using a brutal force
79 AliTriggerScalers *op2 = 0;
81 last = fScalers.GetEntriesFast();
82 while (position < last) {
83 op2 = (AliTriggerScalers *)fScalers.At(position);
84 if( op2 && (op2->GetClassIndex() == classindex )) break;
91 //_____________________________________________________________________________
92 AliTriggerScalers* AliTriggerScalersRecord::GetTriggerScalersForClassBinary( const Int_t classindex )
94 // Find Trigger scaler with class ID = classindex using a binary search.
96 Int_t base, position, last, result = 0;
97 AliTriggerScalers *op2 = NULL;
102 last = fScalers.GetEntriesFast();
104 while (last >= base) {
106 position = (base+last) / 2;
107 op2 = (AliTriggerScalers *)fScalers.At(position);
108 if( op2 && op2->GetClassIndex() > classindex ) result = -1;
109 if( op2 && op2->GetClassIndex() < classindex ) result = 1;
111 if (op2 && result == 0)
113 if (!op2 || result < 0)
122 //_____________________________________________________________________________
123 void AliTriggerScalersRecord::Print( const Option_t* ) const
126 cout << "Trigger Scalers Record: " << endl;
128 for( Int_t i=0; i<fScalers.GetEntriesFast(); ++i )
129 ((AliTriggerScalers*)fScalers.At(i))->Print();