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    AliFMDCalibStripRange.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 which strips are read-out.  
// In principle this can be set for each half-ring.   
// However, in real life, all the detectors will probably read out all
// strips, and dead areas can be handled off-line. 
// This information comes from DCS or the like.
//
// IMPORTANT:  The member function WriteToFile writes out the entries
// in the format 
//
//     det,ring,id,min,max
//
// 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 <iostream>
#include "AliFMDCalibStripRange.h"	// ALIFMDCALIBGAIN_H
#include "TString.h"
// #include "AliFMDParameters.h"           // ALIFMDPARAMETERS_H

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

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

//____________________________________________________________________
AliFMDCalibStripRange::AliFMDCalibStripRange(const AliFMDCalibStripRange& o)
  : TObject(o), fRanges(o.fRanges)
{
  // Copy CTOR 
}

//____________________________________________________________________
AliFMDCalibStripRange&
AliFMDCalibStripRange::operator=(const AliFMDCalibStripRange& o)
{
  // Assignement operator
  fRanges     = o.fRanges;
  return (*this);
}

//____________________________________________________________________
void
AliFMDCalibStripRange::Set(UShort_t det, Char_t ring, 
			   UShort_t sector, UShort_t, UShort_t min, 
			   UShort_t max)
{
  // Set the min and max for a half-ring 
  UInt_t nSec  = (ring == 'I' ? 10 : 20);
  UInt_t board = sector / nSec;
  fRanges(det, ring, board, 0) = ((max & 0x7f) << 8) + (min & 0x7f);
}

//____________________________________________________________________
UShort_t
AliFMDCalibStripRange::Min(UShort_t det, Char_t ring, 
			   UShort_t sec, UShort_t) const
{
  // Get the min for a half-ring 
  UInt_t nSec  = (ring == 'I' ? 10 : 20);
  UInt_t board = sec / nSec;
 
  return (fRanges(det, ring, board, 0) & 0x7f);
}

//____________________________________________________________________
UShort_t
AliFMDCalibStripRange::Max(UShort_t det, Char_t ring, 
			   UShort_t sec, UShort_t) const
{
  // Get the max for a half-ring 
  UInt_t nSec  = (ring == 'I' ? 10 : 20);
  UInt_t board = sec / nSec;
  return ((fRanges(det, ring, board, 0) >> 8) & 0x7f);
}
//____________________________________________________________________
void 
AliFMDCalibStripRange::WriteToFile(std::ostream &outFile, Bool_t* detectors)
{
  outFile.write("# StripRange \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');
      UInt_t   nSec = (ring == 'I' ? 10 : 20);
      for(UShort_t board =0; board < 2;  board++)  {
	UShort_t sector = board*nSec;
	outFile << det                     << ','
		<< ring                    << ','
		<< board                   << ','
		<< Min(det,ring,sector)    << ','
		<< Max(det,ring,sector)    << "\n";
	  

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

  while(line.ReadLine(inFile)) {
    if(line.Contains("striprange",TString::kIgnoreCase)) {
      readData = kTRUE;
      break;
    }
    
  }
  
  UShort_t det, board;
  Char_t ring;
  UShort_t min, max;
  
  Int_t thisline = inFile.tellg();
  Char_t c[4];
  
  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]
	       >> min          >> c[3]
	       >> max;
    
    UInt_t nSec  = (ring == 'I' ? 10 : 20);
    UShort_t sector = board*nSec;
    Set(det,ring,sector,0,min,max);
   
  }
  
  inFile.seekg(0);
 
  
}

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