ROOT logo
 /**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id: AliTriggerScalersRecord.cxx 22322 2007-11-22 11:43:14Z cvetan $ */

///////////////////////////////////////////////////////////////////////////////
//
// Class to define the ALICE Trigger Scalers Record 
//
// Each record consists of 1 time stamp (4 words)  (AliTimeStamp)
// and an array with the scalers (AliTriggerScalers) for each trigger class 
// in partition  
//
//////////////////////////////////////////////////////////////////////////////

#include <Riostream.h>
#include <TObjArray.h>
#include "AliLog.h"  
#include "AliTimeStamp.h"
#include "AliTriggerScalers.h"
#include "AliTriggerScalersRecord.h"

using std::endl;
using std::cout;
ClassImp( AliTriggerScalersRecord )
//_____________________________________________________________________________
AliTriggerScalersRecord::AliTriggerScalersRecord():
  fTimestamp(),
  fScalers(),
  fTimeGroup(0)
{
 //Default constructor
}

//_____________________________________________________________________________
void AliTriggerScalersRecord::SetTimeStamp( UInt_t orbit, UInt_t period, 
                                            UInt_t seconds, UInt_t microsecs )
{
   fTimestamp.SetTimeStamp( orbit, period, seconds, microsecs );
}

//_____________________________________________________________________________
void AliTriggerScalersRecord::AddTriggerScalers( AliTriggerScalers* scaler ) 
{ 
  fScalers.AddLast( scaler ); 
  fScalers.Sort(); 
}

//_____________________________________________________________________________
void AliTriggerScalersRecord::AddTriggerScalers( UChar_t classIndex, UInt_t LOCB, UInt_t LOCA,        
                                         UInt_t L1CB, UInt_t L1CA, UInt_t L2CB, UInt_t L2CA )
{
    AddTriggerScalers( new AliTriggerScalers( classIndex, LOCB, LOCA, L1CB, L1CA, L2CB, L2CA ) );
    fScalers.Sort();
} 

//_____________________________________________________________________________
Int_t AliTriggerScalersRecord::Compare( const TObject* obj ) const
{
  // Compare  timestamps
  
  return fTimestamp.Compare( &(((AliTriggerScalersRecord*)obj)->fTimestamp) );
}
//_____________________________________________________________________________
const AliTriggerScalers* AliTriggerScalersRecord::GetTriggerScalersForClass( const Int_t classindex ) const
{
   // Find Trigger scaler with class ID = classindex using a brutal force 

   Int_t   position, last;
   AliTriggerScalers *op2 = 0;
   position = 0;
   last = fScalers.GetEntriesFast();
   while (position < last) {
      op2 = (AliTriggerScalers *)fScalers.At(position);
      if( op2 && (op2->GetClassIndex() == classindex )) break;
      op2=0;
      position++;
   }
   return op2;   
}

//_____________________________________________________________________________
AliTriggerScalers* AliTriggerScalersRecord::GetTriggerScalersForClassBinary( const Int_t classindex )
{
   // Find Trigger scaler with class ID = classindex using a binary search. 

   Int_t   base, position, last, result = 0;
   AliTriggerScalers *op2 = NULL;
   
   fScalers.Sort(); 
   
   base = 0;
   last = fScalers.GetEntriesFast();

   while (last >= base) {
      result = 0;
      position = (base+last) / 2;
      op2 = (AliTriggerScalers *)fScalers.At(position);
      if( op2 && op2->GetClassIndex() > classindex ) result = -1;
      if( op2 && op2->GetClassIndex() < classindex ) result = 1;
  
      if (op2 && result == 0)
         return op2;
      if (!op2 || result < 0)
         last = position-1;
      else
         base = position+1;
      op2 = NULL;   
   }
   return op2;   
}
                                      
//_____________________________________________________________________________
void AliTriggerScalersRecord::Print( const Option_t* ) const
{
   // Print
  cout << "Trigger Scalers Record, time group: "<< fTimeGroup << endl;
  fTimestamp.Print();
  for( Int_t i=0; i<fScalers.GetEntriesFast(); ++i ) 
     ((AliTriggerScalers*)fScalers.At(i))->Print();
}
 AliTriggerScalersRecord.cxx:1
 AliTriggerScalersRecord.cxx:2
 AliTriggerScalersRecord.cxx:3
 AliTriggerScalersRecord.cxx:4
 AliTriggerScalersRecord.cxx:5
 AliTriggerScalersRecord.cxx:6
 AliTriggerScalersRecord.cxx:7
 AliTriggerScalersRecord.cxx:8
 AliTriggerScalersRecord.cxx:9
 AliTriggerScalersRecord.cxx:10
 AliTriggerScalersRecord.cxx:11
 AliTriggerScalersRecord.cxx:12
 AliTriggerScalersRecord.cxx:13
 AliTriggerScalersRecord.cxx:14
 AliTriggerScalersRecord.cxx:15
 AliTriggerScalersRecord.cxx:16
 AliTriggerScalersRecord.cxx:17
 AliTriggerScalersRecord.cxx:18
 AliTriggerScalersRecord.cxx:19
 AliTriggerScalersRecord.cxx:20
 AliTriggerScalersRecord.cxx:21
 AliTriggerScalersRecord.cxx:22
 AliTriggerScalersRecord.cxx:23
 AliTriggerScalersRecord.cxx:24
 AliTriggerScalersRecord.cxx:25
 AliTriggerScalersRecord.cxx:26
 AliTriggerScalersRecord.cxx:27
 AliTriggerScalersRecord.cxx:28
 AliTriggerScalersRecord.cxx:29
 AliTriggerScalersRecord.cxx:30
 AliTriggerScalersRecord.cxx:31
 AliTriggerScalersRecord.cxx:32
 AliTriggerScalersRecord.cxx:33
 AliTriggerScalersRecord.cxx:34
 AliTriggerScalersRecord.cxx:35
 AliTriggerScalersRecord.cxx:36
 AliTriggerScalersRecord.cxx:37
 AliTriggerScalersRecord.cxx:38
 AliTriggerScalersRecord.cxx:39
 AliTriggerScalersRecord.cxx:40
 AliTriggerScalersRecord.cxx:41
 AliTriggerScalersRecord.cxx:42
 AliTriggerScalersRecord.cxx:43
 AliTriggerScalersRecord.cxx:44
 AliTriggerScalersRecord.cxx:45
 AliTriggerScalersRecord.cxx:46
 AliTriggerScalersRecord.cxx:47
 AliTriggerScalersRecord.cxx:48
 AliTriggerScalersRecord.cxx:49
 AliTriggerScalersRecord.cxx:50
 AliTriggerScalersRecord.cxx:51
 AliTriggerScalersRecord.cxx:52
 AliTriggerScalersRecord.cxx:53
 AliTriggerScalersRecord.cxx:54
 AliTriggerScalersRecord.cxx:55
 AliTriggerScalersRecord.cxx:56
 AliTriggerScalersRecord.cxx:57
 AliTriggerScalersRecord.cxx:58
 AliTriggerScalersRecord.cxx:59
 AliTriggerScalersRecord.cxx:60
 AliTriggerScalersRecord.cxx:61
 AliTriggerScalersRecord.cxx:62
 AliTriggerScalersRecord.cxx:63
 AliTriggerScalersRecord.cxx:64
 AliTriggerScalersRecord.cxx:65
 AliTriggerScalersRecord.cxx:66
 AliTriggerScalersRecord.cxx:67
 AliTriggerScalersRecord.cxx:68
 AliTriggerScalersRecord.cxx:69
 AliTriggerScalersRecord.cxx:70
 AliTriggerScalersRecord.cxx:71
 AliTriggerScalersRecord.cxx:72
 AliTriggerScalersRecord.cxx:73
 AliTriggerScalersRecord.cxx:74
 AliTriggerScalersRecord.cxx:75
 AliTriggerScalersRecord.cxx:76
 AliTriggerScalersRecord.cxx:77
 AliTriggerScalersRecord.cxx:78
 AliTriggerScalersRecord.cxx:79
 AliTriggerScalersRecord.cxx:80
 AliTriggerScalersRecord.cxx:81
 AliTriggerScalersRecord.cxx:82
 AliTriggerScalersRecord.cxx:83
 AliTriggerScalersRecord.cxx:84
 AliTriggerScalersRecord.cxx:85
 AliTriggerScalersRecord.cxx:86
 AliTriggerScalersRecord.cxx:87
 AliTriggerScalersRecord.cxx:88
 AliTriggerScalersRecord.cxx:89
 AliTriggerScalersRecord.cxx:90
 AliTriggerScalersRecord.cxx:91
 AliTriggerScalersRecord.cxx:92
 AliTriggerScalersRecord.cxx:93
 AliTriggerScalersRecord.cxx:94
 AliTriggerScalersRecord.cxx:95
 AliTriggerScalersRecord.cxx:96
 AliTriggerScalersRecord.cxx:97
 AliTriggerScalersRecord.cxx:98
 AliTriggerScalersRecord.cxx:99
 AliTriggerScalersRecord.cxx:100
 AliTriggerScalersRecord.cxx:101
 AliTriggerScalersRecord.cxx:102
 AliTriggerScalersRecord.cxx:103
 AliTriggerScalersRecord.cxx:104
 AliTriggerScalersRecord.cxx:105
 AliTriggerScalersRecord.cxx:106
 AliTriggerScalersRecord.cxx:107
 AliTriggerScalersRecord.cxx:108
 AliTriggerScalersRecord.cxx:109
 AliTriggerScalersRecord.cxx:110
 AliTriggerScalersRecord.cxx:111
 AliTriggerScalersRecord.cxx:112
 AliTriggerScalersRecord.cxx:113
 AliTriggerScalersRecord.cxx:114
 AliTriggerScalersRecord.cxx:115
 AliTriggerScalersRecord.cxx:116
 AliTriggerScalersRecord.cxx:117
 AliTriggerScalersRecord.cxx:118
 AliTriggerScalersRecord.cxx:119
 AliTriggerScalersRecord.cxx:120
 AliTriggerScalersRecord.cxx:121
 AliTriggerScalersRecord.cxx:122
 AliTriggerScalersRecord.cxx:123
 AliTriggerScalersRecord.cxx:124
 AliTriggerScalersRecord.cxx:125
 AliTriggerScalersRecord.cxx:126
 AliTriggerScalersRecord.cxx:127
 AliTriggerScalersRecord.cxx:128
 AliTriggerScalersRecord.cxx:129
 AliTriggerScalersRecord.cxx:130
 AliTriggerScalersRecord.cxx:131
 AliTriggerScalersRecord.cxx:132
 AliTriggerScalersRecord.cxx:133