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.                  *
 **************************************************************************/

#include <Riostream.h>

#include "AliLHCClockPhase.h"
#include "AliDCSValue.h"
#include "AliLog.h"

using std::endl;
using std::cout;
ClassImp(AliLHCClockPhase)

//______________________________________________________________________________
AliLHCClockPhase::AliLHCClockPhase():
  TObject(),
  fPhaseB1(),
  fPhaseB2()
{
  // default constructor
  // ...
  fPhaseB1.SetOwner();
  fPhaseB2.SetOwner();
}

//______________________________________________________________________________
void AliLHCClockPhase::AddPhaseB1DP(UInt_t timestamp, Float_t phase)
{
  // Add a phase beam1 measurement
  // to the array of data-points

  fPhaseB1.AddLast(new AliDCSValue(phase,timestamp));
}

//______________________________________________________________________________
void AliLHCClockPhase::AddPhaseB2DP(UInt_t timestamp, Float_t phase)
{
  // Add a phase beam2 measurement
  // to the array of data-points

  fPhaseB2.AddLast(new AliDCSValue(phase,timestamp));
}

//______________________________________________________________________________
const AliDCSValue* AliLHCClockPhase::GetPhaseB1DP(Int_t index) const
{
  // Get the value of the phase
  // The argument is the DP index
  AliDCSValue *value = (AliDCSValue*)fPhaseB1.At(index);
  if (!value) {
    AliFatal(Form("Invalid index of the beam1 data point: %d (0 -> %d)",
		  index,fPhaseB1.GetEntries()));
    return NULL;
  }
  return value;
}

//______________________________________________________________________________
const AliDCSValue* AliLHCClockPhase::GetPhaseB2DP(Int_t index) const
{
  // Get the value of the phase
  // The argument is the DP index
  AliDCSValue *value = (AliDCSValue*)fPhaseB2.At(index);
  if (!value) {
    AliFatal(Form("Invalid index of the beam2 data point: %d (0 -> %d)",
		  index,fPhaseB2.GetEntries()));
    return NULL;
  }
  return value;
}

//______________________________________________________________________________
Float_t AliLHCClockPhase::GetMeanPhaseB1() const
{
  // Get mean beam1 phase shift.
  // The mean is calculated using all the data-points.
  Int_t n = 0;
  Float_t phase = 0;
  for(Int_t i = 0; i < fPhaseB1.GetEntries(); ++i) {
    AliDCSValue *value = (AliDCSValue*)fPhaseB1.At(i);
    if (value) {
      phase += value->GetFloat();
      ++n;
    }
  }
  if (n == 0) {
    AliError("No beam1 measurements found! Assuming 0 phase shift!");
    return 0;
  }
  phase /= n;
  return phase;
}

//______________________________________________________________________________
Float_t AliLHCClockPhase::GetMeanPhaseB2() const
{
  // Get mean beam2 phase shift.
  // The mean is calculated using all the data-points.
  Int_t n = 0;
  Float_t phase = 0;
  for(Int_t i = 0; i < fPhaseB2.GetEntries(); ++i) {
    AliDCSValue *value = (AliDCSValue*)fPhaseB2.At(i);
    if (value) {
      phase += value->GetFloat();
      ++n;
    }
  }
  if (n == 0) {
    AliError("No beam2 measurements found! Assuming 0 phase shift!");
    return 0;
  }
  phase /= n;
  return phase;
}

//______________________________________________________________________________
Float_t AliLHCClockPhase::GetMeanPhase() const
{
  // Get mean phase shift.
  // Beam1 and beam2 phases are calculated using
  // all beam1 and beam2 data-points. The two phases are
  // then averaged in order to get the mean value.
  return (GetMeanPhaseB1() + GetMeanPhaseB2())/2;
}

//______________________________________________________________________________
Float_t AliLHCClockPhase::GetPhaseB1(UInt_t timestamp) const
{
  // Get beam1 phase shift using the
  // event time-stamp as an argument.
  // This methods loops over data-points and
  // returns the value of the closest (in time)
  // measurement found.
  Long64_t deltat = 0xffffffff;
  Float_t phase = 0;
  for(Int_t i = 0; i < fPhaseB1.GetEntries(); ++i) {
    AliDCSValue *value = (AliDCSValue*)fPhaseB1.At(i);
    if (value) {
      if (TMath::Abs((Long64_t)timestamp-(Long64_t)value->GetTimeStamp()) <= deltat) {
	phase = value->GetFloat();
	deltat = TMath::Abs((Long64_t)timestamp-(Long64_t)value->GetTimeStamp());
      }
    }
  }
  if (deltat == 0xffffffff) {
    AliError(Form("Can't get the beam1 phase shift at time-stamp = %u",timestamp));
    return 0;
  }
  return phase;
}

//______________________________________________________________________________
Float_t AliLHCClockPhase::GetPhaseB2(UInt_t timestamp) const
{
  // Get beam2 phase shift using the
  // event time-stamp as an argument.
  // This methods loops over data-points and
  // returns the value of the closest (in time)
  // measurement found.
  Long64_t deltat = 0xffffffff;
  Float_t phase = 0;
  for(Int_t i = 0; i < fPhaseB2.GetEntries(); ++i) {
    AliDCSValue *value = (AliDCSValue*)fPhaseB2.At(i);
    if (value) {
      if (TMath::Abs((Long64_t)timestamp-(Long64_t)value->GetTimeStamp()) <= deltat) {
	phase = value->GetFloat();
	deltat = TMath::Abs((Long64_t)timestamp-(Long64_t)value->GetTimeStamp());
      }
    }
  }
  if (deltat == 0xffffffff) {
    AliError(Form("Can't get the beam2 phase shift at time-stamp = %u",timestamp));
    return 0;
  }
  return phase;
}

//______________________________________________________________________________
Float_t AliLHCClockPhase::GetPhase(UInt_t timestamp) const
{
  // Get mean phase shift using the event time-stamp as
  // an argument.
  // Beam1 and beam2 phases are calculated using
  // the closest beam1 and beam2 data-points. The two phases are
  // then averaged in order to get the mean value.
  return (GetPhaseB1(timestamp) + GetPhaseB2(timestamp))/2;
}

//______________________________________________________________________________
void AliLHCClockPhase::Print( const Option_t* ) const
{
  // Print all the data-points for beam1 and beam2
  // as well as the mean phases
  cout << "AliLHCClockPhase object:" << endl;

  cout << "Beam1:" << endl;
  for(Int_t i = 0; i < fPhaseB1.GetEntries(); ++i) {
    AliDCSValue *value = (AliDCSValue*)fPhaseB1.At(i);
    if (value) cout << "TS=" << value->GetTimeStamp() << "  " << value->GetFloat() << endl;
  }
  cout << "Beam1 mean phase=" << GetMeanPhaseB1() << " ns" << endl;

  cout << "Beam2:" << endl;
  for(Int_t i = 0; i < fPhaseB2.GetEntries(); ++i) {
    AliDCSValue *value = (AliDCSValue*)fPhaseB2.At(i);
    if (value) cout << "TS=" << value->GetTimeStamp() << "  " << value->GetFloat() << endl;
  }
  cout << "Beam2 mean phase=" << GetMeanPhaseB2() << " ns" << endl;

  cout << "Mean phase (beam1 & beam2) =" << GetMeanPhase() << " ns" << endl;
}
 AliLHCClockPhase.cxx:1
 AliLHCClockPhase.cxx:2
 AliLHCClockPhase.cxx:3
 AliLHCClockPhase.cxx:4
 AliLHCClockPhase.cxx:5
 AliLHCClockPhase.cxx:6
 AliLHCClockPhase.cxx:7
 AliLHCClockPhase.cxx:8
 AliLHCClockPhase.cxx:9
 AliLHCClockPhase.cxx:10
 AliLHCClockPhase.cxx:11
 AliLHCClockPhase.cxx:12
 AliLHCClockPhase.cxx:13
 AliLHCClockPhase.cxx:14
 AliLHCClockPhase.cxx:15
 AliLHCClockPhase.cxx:16
 AliLHCClockPhase.cxx:17
 AliLHCClockPhase.cxx:18
 AliLHCClockPhase.cxx:19
 AliLHCClockPhase.cxx:20
 AliLHCClockPhase.cxx:21
 AliLHCClockPhase.cxx:22
 AliLHCClockPhase.cxx:23
 AliLHCClockPhase.cxx:24
 AliLHCClockPhase.cxx:25
 AliLHCClockPhase.cxx:26
 AliLHCClockPhase.cxx:27
 AliLHCClockPhase.cxx:28
 AliLHCClockPhase.cxx:29
 AliLHCClockPhase.cxx:30
 AliLHCClockPhase.cxx:31
 AliLHCClockPhase.cxx:32
 AliLHCClockPhase.cxx:33
 AliLHCClockPhase.cxx:34
 AliLHCClockPhase.cxx:35
 AliLHCClockPhase.cxx:36
 AliLHCClockPhase.cxx:37
 AliLHCClockPhase.cxx:38
 AliLHCClockPhase.cxx:39
 AliLHCClockPhase.cxx:40
 AliLHCClockPhase.cxx:41
 AliLHCClockPhase.cxx:42
 AliLHCClockPhase.cxx:43
 AliLHCClockPhase.cxx:44
 AliLHCClockPhase.cxx:45
 AliLHCClockPhase.cxx:46
 AliLHCClockPhase.cxx:47
 AliLHCClockPhase.cxx:48
 AliLHCClockPhase.cxx:49
 AliLHCClockPhase.cxx:50
 AliLHCClockPhase.cxx:51
 AliLHCClockPhase.cxx:52
 AliLHCClockPhase.cxx:53
 AliLHCClockPhase.cxx:54
 AliLHCClockPhase.cxx:55
 AliLHCClockPhase.cxx:56
 AliLHCClockPhase.cxx:57
 AliLHCClockPhase.cxx:58
 AliLHCClockPhase.cxx:59
 AliLHCClockPhase.cxx:60
 AliLHCClockPhase.cxx:61
 AliLHCClockPhase.cxx:62
 AliLHCClockPhase.cxx:63
 AliLHCClockPhase.cxx:64
 AliLHCClockPhase.cxx:65
 AliLHCClockPhase.cxx:66
 AliLHCClockPhase.cxx:67
 AliLHCClockPhase.cxx:68
 AliLHCClockPhase.cxx:69
 AliLHCClockPhase.cxx:70
 AliLHCClockPhase.cxx:71
 AliLHCClockPhase.cxx:72
 AliLHCClockPhase.cxx:73
 AliLHCClockPhase.cxx:74
 AliLHCClockPhase.cxx:75
 AliLHCClockPhase.cxx:76
 AliLHCClockPhase.cxx:77
 AliLHCClockPhase.cxx:78
 AliLHCClockPhase.cxx:79
 AliLHCClockPhase.cxx:80
 AliLHCClockPhase.cxx:81
 AliLHCClockPhase.cxx:82
 AliLHCClockPhase.cxx:83
 AliLHCClockPhase.cxx:84
 AliLHCClockPhase.cxx:85
 AliLHCClockPhase.cxx:86
 AliLHCClockPhase.cxx:87
 AliLHCClockPhase.cxx:88
 AliLHCClockPhase.cxx:89
 AliLHCClockPhase.cxx:90
 AliLHCClockPhase.cxx:91
 AliLHCClockPhase.cxx:92
 AliLHCClockPhase.cxx:93
 AliLHCClockPhase.cxx:94
 AliLHCClockPhase.cxx:95
 AliLHCClockPhase.cxx:96
 AliLHCClockPhase.cxx:97
 AliLHCClockPhase.cxx:98
 AliLHCClockPhase.cxx:99
 AliLHCClockPhase.cxx:100
 AliLHCClockPhase.cxx:101
 AliLHCClockPhase.cxx:102
 AliLHCClockPhase.cxx:103
 AliLHCClockPhase.cxx:104
 AliLHCClockPhase.cxx:105
 AliLHCClockPhase.cxx:106
 AliLHCClockPhase.cxx:107
 AliLHCClockPhase.cxx:108
 AliLHCClockPhase.cxx:109
 AliLHCClockPhase.cxx:110
 AliLHCClockPhase.cxx:111
 AliLHCClockPhase.cxx:112
 AliLHCClockPhase.cxx:113
 AliLHCClockPhase.cxx:114
 AliLHCClockPhase.cxx:115
 AliLHCClockPhase.cxx:116
 AliLHCClockPhase.cxx:117
 AliLHCClockPhase.cxx:118
 AliLHCClockPhase.cxx:119
 AliLHCClockPhase.cxx:120
 AliLHCClockPhase.cxx:121
 AliLHCClockPhase.cxx:122
 AliLHCClockPhase.cxx:123
 AliLHCClockPhase.cxx:124
 AliLHCClockPhase.cxx:125
 AliLHCClockPhase.cxx:126
 AliLHCClockPhase.cxx:127
 AliLHCClockPhase.cxx:128
 AliLHCClockPhase.cxx:129
 AliLHCClockPhase.cxx:130
 AliLHCClockPhase.cxx:131
 AliLHCClockPhase.cxx:132
 AliLHCClockPhase.cxx:133
 AliLHCClockPhase.cxx:134
 AliLHCClockPhase.cxx:135
 AliLHCClockPhase.cxx:136
 AliLHCClockPhase.cxx:137
 AliLHCClockPhase.cxx:138
 AliLHCClockPhase.cxx:139
 AliLHCClockPhase.cxx:140
 AliLHCClockPhase.cxx:141
 AliLHCClockPhase.cxx:142
 AliLHCClockPhase.cxx:143
 AliLHCClockPhase.cxx:144
 AliLHCClockPhase.cxx:145
 AliLHCClockPhase.cxx:146
 AliLHCClockPhase.cxx:147
 AliLHCClockPhase.cxx:148
 AliLHCClockPhase.cxx:149
 AliLHCClockPhase.cxx:150
 AliLHCClockPhase.cxx:151
 AliLHCClockPhase.cxx:152
 AliLHCClockPhase.cxx:153
 AliLHCClockPhase.cxx:154
 AliLHCClockPhase.cxx:155
 AliLHCClockPhase.cxx:156
 AliLHCClockPhase.cxx:157
 AliLHCClockPhase.cxx:158
 AliLHCClockPhase.cxx:159
 AliLHCClockPhase.cxx:160
 AliLHCClockPhase.cxx:161
 AliLHCClockPhase.cxx:162
 AliLHCClockPhase.cxx:163
 AliLHCClockPhase.cxx:164
 AliLHCClockPhase.cxx:165
 AliLHCClockPhase.cxx:166
 AliLHCClockPhase.cxx:167
 AliLHCClockPhase.cxx:168
 AliLHCClockPhase.cxx:169
 AliLHCClockPhase.cxx:170
 AliLHCClockPhase.cxx:171
 AliLHCClockPhase.cxx:172
 AliLHCClockPhase.cxx:173
 AliLHCClockPhase.cxx:174
 AliLHCClockPhase.cxx:175
 AliLHCClockPhase.cxx:176
 AliLHCClockPhase.cxx:177
 AliLHCClockPhase.cxx:178
 AliLHCClockPhase.cxx:179
 AliLHCClockPhase.cxx:180
 AliLHCClockPhase.cxx:181
 AliLHCClockPhase.cxx:182
 AliLHCClockPhase.cxx:183
 AliLHCClockPhase.cxx:184
 AliLHCClockPhase.cxx:185
 AliLHCClockPhase.cxx:186
 AliLHCClockPhase.cxx:187
 AliLHCClockPhase.cxx:188
 AliLHCClockPhase.cxx:189
 AliLHCClockPhase.cxx:190
 AliLHCClockPhase.cxx:191
 AliLHCClockPhase.cxx:192
 AliLHCClockPhase.cxx:193
 AliLHCClockPhase.cxx:194
 AliLHCClockPhase.cxx:195
 AliLHCClockPhase.cxx:196
 AliLHCClockPhase.cxx:197
 AliLHCClockPhase.cxx:198
 AliLHCClockPhase.cxx:199
 AliLHCClockPhase.cxx:200
 AliLHCClockPhase.cxx:201
 AliLHCClockPhase.cxx:202
 AliLHCClockPhase.cxx:203
 AliLHCClockPhase.cxx:204
 AliLHCClockPhase.cxx:205
 AliLHCClockPhase.cxx:206
 AliLHCClockPhase.cxx:207
 AliLHCClockPhase.cxx:208
 AliLHCClockPhase.cxx:209
 AliLHCClockPhase.cxx:210
 AliLHCClockPhase.cxx:211
 AliLHCClockPhase.cxx:212
 AliLHCClockPhase.cxx:213
 AliLHCClockPhase.cxx:214
 AliLHCClockPhase.cxx:215
 AliLHCClockPhase.cxx:216
 AliLHCClockPhase.cxx:217
 AliLHCClockPhase.cxx:218
 AliLHCClockPhase.cxx:219
 AliLHCClockPhase.cxx:220
 AliLHCClockPhase.cxx:221
 AliLHCClockPhase.cxx:222
 AliLHCClockPhase.cxx:223