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$ */
/** @file    AliFMDCalibSampleRate.cxx
    @author  Christian Holm Christensen <cholm@nbi.dk>
    @date    Sun Mar 26 18:31:09 2006
    @brief   Per digitizer card pulser calibration 
*/
//____________________________________________________________________
//                                                                          
// This class stores the sample rate (that is, how many times the
// ATLRO's sample each VA1 channel).  In principle these can be
// controlled per half ring, but in real life it's most likely that
// this value will be the same for all detectors.  This value must be
// retrived from DCS or the like. 
//
// IMPORTANT:  The member function WriteToFile writes out the entries
// in the format 
//
//     det,ring,id,rate
//
// Here, id is a number from 0 to 1, which represents the division in
// half-rings.  The mapping is as follows: 
//
//  Inner rings:              Outer Rings
//    id   Sectors   Board     id   Sectors   Board 
//   ----+---------+-------   ----+---------+-------
//     0 |  0 -  9 |  0x10     0  |  0 - 19 |  0x11
//     1 | 10 - 19 |  0x0      1  | 20 - 39 |  0x1
//
// The same mapping is used in the ReadFromFile member function
//
#include "AliFMDCalibSampleRate.h"	// ALIFMDCALIBGAIN_H
// #include "AliFMDParameters.h"           // ALIFMDPARAMETERS_H
// #include <AliLog.h>
#include "TString.h"
#include "AliFMDDebug.h" // Better debug macros
#include <iostream>

//____________________________________________________________________
ClassImp(AliFMDCalibSampleRate)
#if 0
  ; // This is here to keep Emacs for indenting the next line
#endif

//____________________________________________________________________
AliFMDCalibSampleRate::AliFMDCalibSampleRate()
  : fRates(AliFMDMap::kMaxDetectors, AliFMDMap::kMaxRings, 2, 1)
  // fRates(3)
{
  // CTOR 
  fRates.Reset(1);
}

//____________________________________________________________________
AliFMDCalibSampleRate::AliFMDCalibSampleRate(const AliFMDCalibSampleRate& o)
  : TObject(o), fRates(o.fRates)
{
  // Copy ctor 
}

//____________________________________________________________________
AliFMDCalibSampleRate&
AliFMDCalibSampleRate::operator=(const AliFMDCalibSampleRate& o)
{
  // Assignment operator 
  fRates     = o.fRates;
  return (*this);
}

//____________________________________________________________________
void
AliFMDCalibSampleRate::Set(UShort_t det, Char_t ring, 
			   UShort_t sector, UShort_t, UShort_t rate)
{
  // Set values.  Strip argument is ignored 
  UInt_t nSec  = (ring == 'I' ? 10 : 20);
  UInt_t board = sector / nSec;
  fRates(det, ring, board, 0) = rate;
  AliFMDDebug(15, ("Setting sample rate for FMD%d%c[%2d,0] (board %d): %d", 
		   det, ring, sector, board, rate));
  
}

//____________________________________________________________________
UShort_t
AliFMDCalibSampleRate::Rate(UShort_t det, Char_t ring, 
			    UShort_t sec, UShort_t) const
{
  // Get the sample rate 
  UInt_t   nSec  = (ring == 'I' ? 10 : 20);
  UInt_t   board = sec / nSec;
  UShort_t ret   = fRates(det, ring, board, 0);
  AliFMDDebug(15, ("Getting sample rate for FMD%d%c[%2d,0] (board %d): %d", 
		   det, ring, sec, board, ret));
  return ret;
}
//____________________________________________________________________
void 
AliFMDCalibSampleRate::WriteToFile(std::ostream &outFile, Bool_t* detectors)
{
  outFile.write("# SampleRate \n",14);
  for(Int_t det=1;det<=3;det++) {
    if (detectors && !detectors[det-1]) { 
      continue;
    }
    UShort_t FirstRing = (det == 1 ? 1 : 0);
    for (UShort_t ir = FirstRing; ir < 2; ir++) {
      Char_t   ring = (ir == 0 ? 'O' : 'I');
      UShort_t nsec = (ir == 0 ? 40  : 20) / 2;
      
      for(UShort_t board = 0; board < 2;  board++)  {
	UShort_t sector = board*nsec;
	outFile << det                       << ','
		<< ring                      << ','
		<< board                     << ','
		<< Rate(det,ring,sector)     << "\n";
	  

      }
    }
  }
 
      
}
//____________________________________________________________________
void 
AliFMDCalibSampleRate::ReadFromFile(std::istream &inFile)
{
  TString line;
  Bool_t readData=kFALSE;

  while(line.ReadLine(inFile)) {
    if(line.Contains("samplerate",TString::kIgnoreCase)) {
      readData = kTRUE;
      break;
    }
    
  }
  
  UShort_t det, board;
  Char_t ring;
  UShort_t sampleRate;
  Int_t thisline = inFile.tellg();
  Char_t c[3];
  
  while( readData ) {
    thisline = inFile.tellg();
    line.ReadLine(inFile);
    if(line.Contains("# ",TString::kIgnoreCase)) {
      readData = kFALSE;
      continue;
    }
    
    inFile.seekg(thisline);
    inFile     >> det          >> c[0]
	       >> ring         >> c[1]
	       >> board        >> c[2]
	       >> sampleRate;
    
    UInt_t nSec  = (ring == 'I' ? 20 : 40)/2;
    UShort_t sector = board*nSec;
    Set(det,ring,sector,0,sampleRate);
    
    
  }
  
  inFile.seekg(0);
 
  
}

//____________________________________________________________________
//
// EOF
//
 AliFMDCalibSampleRate.cxx:1
 AliFMDCalibSampleRate.cxx:2
 AliFMDCalibSampleRate.cxx:3
 AliFMDCalibSampleRate.cxx:4
 AliFMDCalibSampleRate.cxx:5
 AliFMDCalibSampleRate.cxx:6
 AliFMDCalibSampleRate.cxx:7
 AliFMDCalibSampleRate.cxx:8
 AliFMDCalibSampleRate.cxx:9
 AliFMDCalibSampleRate.cxx:10
 AliFMDCalibSampleRate.cxx:11
 AliFMDCalibSampleRate.cxx:12
 AliFMDCalibSampleRate.cxx:13
 AliFMDCalibSampleRate.cxx:14
 AliFMDCalibSampleRate.cxx:15
 AliFMDCalibSampleRate.cxx:16
 AliFMDCalibSampleRate.cxx:17
 AliFMDCalibSampleRate.cxx:18
 AliFMDCalibSampleRate.cxx:19
 AliFMDCalibSampleRate.cxx:20
 AliFMDCalibSampleRate.cxx:21
 AliFMDCalibSampleRate.cxx:22
 AliFMDCalibSampleRate.cxx:23
 AliFMDCalibSampleRate.cxx:24
 AliFMDCalibSampleRate.cxx:25
 AliFMDCalibSampleRate.cxx:26
 AliFMDCalibSampleRate.cxx:27
 AliFMDCalibSampleRate.cxx:28
 AliFMDCalibSampleRate.cxx:29
 AliFMDCalibSampleRate.cxx:30
 AliFMDCalibSampleRate.cxx:31
 AliFMDCalibSampleRate.cxx:32
 AliFMDCalibSampleRate.cxx:33
 AliFMDCalibSampleRate.cxx:34
 AliFMDCalibSampleRate.cxx:35
 AliFMDCalibSampleRate.cxx:36
 AliFMDCalibSampleRate.cxx:37
 AliFMDCalibSampleRate.cxx:38
 AliFMDCalibSampleRate.cxx:39
 AliFMDCalibSampleRate.cxx:40
 AliFMDCalibSampleRate.cxx:41
 AliFMDCalibSampleRate.cxx:42
 AliFMDCalibSampleRate.cxx:43
 AliFMDCalibSampleRate.cxx:44
 AliFMDCalibSampleRate.cxx:45
 AliFMDCalibSampleRate.cxx:46
 AliFMDCalibSampleRate.cxx:47
 AliFMDCalibSampleRate.cxx:48
 AliFMDCalibSampleRate.cxx:49
 AliFMDCalibSampleRate.cxx:50
 AliFMDCalibSampleRate.cxx:51
 AliFMDCalibSampleRate.cxx:52
 AliFMDCalibSampleRate.cxx:53
 AliFMDCalibSampleRate.cxx:54
 AliFMDCalibSampleRate.cxx:55
 AliFMDCalibSampleRate.cxx:56
 AliFMDCalibSampleRate.cxx:57
 AliFMDCalibSampleRate.cxx:58
 AliFMDCalibSampleRate.cxx:59
 AliFMDCalibSampleRate.cxx:60
 AliFMDCalibSampleRate.cxx:61
 AliFMDCalibSampleRate.cxx:62
 AliFMDCalibSampleRate.cxx:63
 AliFMDCalibSampleRate.cxx:64
 AliFMDCalibSampleRate.cxx:65
 AliFMDCalibSampleRate.cxx:66
 AliFMDCalibSampleRate.cxx:67
 AliFMDCalibSampleRate.cxx:68
 AliFMDCalibSampleRate.cxx:69
 AliFMDCalibSampleRate.cxx:70
 AliFMDCalibSampleRate.cxx:71
 AliFMDCalibSampleRate.cxx:72
 AliFMDCalibSampleRate.cxx:73
 AliFMDCalibSampleRate.cxx:74
 AliFMDCalibSampleRate.cxx:75
 AliFMDCalibSampleRate.cxx:76
 AliFMDCalibSampleRate.cxx:77
 AliFMDCalibSampleRate.cxx:78
 AliFMDCalibSampleRate.cxx:79
 AliFMDCalibSampleRate.cxx:80
 AliFMDCalibSampleRate.cxx:81
 AliFMDCalibSampleRate.cxx:82
 AliFMDCalibSampleRate.cxx:83
 AliFMDCalibSampleRate.cxx:84
 AliFMDCalibSampleRate.cxx:85
 AliFMDCalibSampleRate.cxx:86
 AliFMDCalibSampleRate.cxx:87
 AliFMDCalibSampleRate.cxx:88
 AliFMDCalibSampleRate.cxx:89
 AliFMDCalibSampleRate.cxx:90
 AliFMDCalibSampleRate.cxx:91
 AliFMDCalibSampleRate.cxx:92
 AliFMDCalibSampleRate.cxx:93
 AliFMDCalibSampleRate.cxx:94
 AliFMDCalibSampleRate.cxx:95
 AliFMDCalibSampleRate.cxx:96
 AliFMDCalibSampleRate.cxx:97
 AliFMDCalibSampleRate.cxx:98
 AliFMDCalibSampleRate.cxx:99
 AliFMDCalibSampleRate.cxx:100
 AliFMDCalibSampleRate.cxx:101
 AliFMDCalibSampleRate.cxx:102
 AliFMDCalibSampleRate.cxx:103
 AliFMDCalibSampleRate.cxx:104
 AliFMDCalibSampleRate.cxx:105
 AliFMDCalibSampleRate.cxx:106
 AliFMDCalibSampleRate.cxx:107
 AliFMDCalibSampleRate.cxx:108
 AliFMDCalibSampleRate.cxx:109
 AliFMDCalibSampleRate.cxx:110
 AliFMDCalibSampleRate.cxx:111
 AliFMDCalibSampleRate.cxx:112
 AliFMDCalibSampleRate.cxx:113
 AliFMDCalibSampleRate.cxx:114
 AliFMDCalibSampleRate.cxx:115
 AliFMDCalibSampleRate.cxx:116
 AliFMDCalibSampleRate.cxx:117
 AliFMDCalibSampleRate.cxx:118
 AliFMDCalibSampleRate.cxx:119
 AliFMDCalibSampleRate.cxx:120
 AliFMDCalibSampleRate.cxx:121
 AliFMDCalibSampleRate.cxx:122
 AliFMDCalibSampleRate.cxx:123
 AliFMDCalibSampleRate.cxx:124
 AliFMDCalibSampleRate.cxx:125
 AliFMDCalibSampleRate.cxx:126
 AliFMDCalibSampleRate.cxx:127
 AliFMDCalibSampleRate.cxx:128
 AliFMDCalibSampleRate.cxx:129
 AliFMDCalibSampleRate.cxx:130
 AliFMDCalibSampleRate.cxx:131
 AliFMDCalibSampleRate.cxx:132
 AliFMDCalibSampleRate.cxx:133
 AliFMDCalibSampleRate.cxx:134
 AliFMDCalibSampleRate.cxx:135
 AliFMDCalibSampleRate.cxx:136
 AliFMDCalibSampleRate.cxx:137
 AliFMDCalibSampleRate.cxx:138
 AliFMDCalibSampleRate.cxx:139
 AliFMDCalibSampleRate.cxx:140
 AliFMDCalibSampleRate.cxx:141
 AliFMDCalibSampleRate.cxx:142
 AliFMDCalibSampleRate.cxx:143
 AliFMDCalibSampleRate.cxx:144
 AliFMDCalibSampleRate.cxx:145
 AliFMDCalibSampleRate.cxx:146
 AliFMDCalibSampleRate.cxx:147
 AliFMDCalibSampleRate.cxx:148
 AliFMDCalibSampleRate.cxx:149
 AliFMDCalibSampleRate.cxx:150
 AliFMDCalibSampleRate.cxx:151
 AliFMDCalibSampleRate.cxx:152
 AliFMDCalibSampleRate.cxx:153
 AliFMDCalibSampleRate.cxx:154
 AliFMDCalibSampleRate.cxx:155
 AliFMDCalibSampleRate.cxx:156
 AliFMDCalibSampleRate.cxx:157
 AliFMDCalibSampleRate.cxx:158
 AliFMDCalibSampleRate.cxx:159
 AliFMDCalibSampleRate.cxx:160
 AliFMDCalibSampleRate.cxx:161
 AliFMDCalibSampleRate.cxx:162
 AliFMDCalibSampleRate.cxx:163
 AliFMDCalibSampleRate.cxx:164
 AliFMDCalibSampleRate.cxx:165
 AliFMDCalibSampleRate.cxx:166
 AliFMDCalibSampleRate.cxx:167
 AliFMDCalibSampleRate.cxx:168
 AliFMDCalibSampleRate.cxx:169
 AliFMDCalibSampleRate.cxx:170
 AliFMDCalibSampleRate.cxx:171
 AliFMDCalibSampleRate.cxx:172
 AliFMDCalibSampleRate.cxx:173
 AliFMDCalibSampleRate.cxx:174
 AliFMDCalibSampleRate.cxx:175
 AliFMDCalibSampleRate.cxx:176
 AliFMDCalibSampleRate.cxx:177
 AliFMDCalibSampleRate.cxx:178
 AliFMDCalibSampleRate.cxx:179
 AliFMDCalibSampleRate.cxx:180
 AliFMDCalibSampleRate.cxx:181
 AliFMDCalibSampleRate.cxx:182
 AliFMDCalibSampleRate.cxx:183
 AliFMDCalibSampleRate.cxx:184
 AliFMDCalibSampleRate.cxx:185
 AliFMDCalibSampleRate.cxx:186
 AliFMDCalibSampleRate.cxx:187
 AliFMDCalibSampleRate.cxx:188