AliRoot Core  edcc906 (edcc906)
AliFMDCalibSampleRate.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  * *
4  * Author: The ALICE Off-line Project. *
5  * Contributors are mentioned in the code where appropriate. *
6  * *
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  **************************************************************************/
15 /* $Id$ */
21 //____________________________________________________________________
22 //
23 // This class stores the sample rate (that is, how many times the
24 // ATLRO's sample each VA1 channel). In principle these can be
25 // controlled per half ring, but in real life it's most likely that
26 // this value will be the same for all detectors. This value must be
27 // retrived from DCS or the like.
28 //
29 // IMPORTANT: The member function WriteToFile writes out the entries
30 // in the format
31 //
32 // det,ring,id,rate
33 //
34 // Here, id is a number from 0 to 1, which represents the division in
35 // half-rings. The mapping is as follows:
36 //
37 // Inner rings: Outer Rings
38 // id Sectors Board id Sectors Board
39 // ----+---------+------- ----+---------+-------
40 // 0 | 0 - 9 | 0x10 0 | 0 - 19 | 0x11
41 // 1 | 10 - 19 | 0x0 1 | 20 - 39 | 0x1
42 //
43 // The same mapping is used in the ReadFromFile member function
44 //
45 #include "AliFMDCalibSampleRate.h" // ALIFMDCALIBGAIN_H
46 // #include "AliFMDParameters.h" // ALIFMDPARAMETERS_H
47 // #include <AliLog.h>
48 #include "TString.h"
49 #include "AliFMDDebug.h" // Better debug macros
50 #include <iostream>
51 
52 //____________________________________________________________________
53 ClassImp(AliFMDCalibSampleRate)
54 #if 0
55  ; // This is here to keep Emacs for indenting the next line
56 #endif
57 
58 //____________________________________________________________________
60  : fRates(AliFMDMap::kMaxDetectors, AliFMDMap::kMaxRings, 2, 1)
61  // fRates(3)
62 {
63  // CTOR
64  fRates.Reset(1);
65 }
66 
67 //____________________________________________________________________
69  : TObject(o), fRates(o.fRates)
70 {
71  // Copy ctor
72 }
73 
74 //____________________________________________________________________
77 {
78  // Assignment operator
79  fRates = o.fRates;
80  return (*this);
81 }
82 
83 //____________________________________________________________________
84 void
85 AliFMDCalibSampleRate::Set(UShort_t det, Char_t ring,
86  UShort_t sector, UShort_t, UShort_t rate)
87 {
88  // Set values. Strip argument is ignored
89  UInt_t nSec = (ring == 'I' ? 10 : 20);
90  UInt_t board = sector / nSec;
91  fRates(det, ring, board, 0) = rate;
92  AliFMDDebug(15, ("Setting sample rate for FMD%d%c[%2d,0] (board %d): %d",
93  det, ring, sector, board, rate));
94 
95 }
96 
97 //____________________________________________________________________
98 UShort_t
99 AliFMDCalibSampleRate::Rate(UShort_t det, Char_t ring,
100  UShort_t sec, UShort_t) const
101 {
102  // Get the sample rate
103  UInt_t nSec = (ring == 'I' ? 10 : 20);
104  UInt_t board = sec / nSec;
105  UShort_t ret = fRates(det, ring, board, 0);
106  AliFMDDebug(15, ("Getting sample rate for FMD%d%c[%2d,0] (board %d): %d",
107  det, ring, sec, board, ret));
108  return ret;
109 }
110 //____________________________________________________________________
111 void
112 AliFMDCalibSampleRate::WriteToFile(std::ostream &outFile, Bool_t* detectors)
113 {
114  outFile.write("# SampleRate \n",14);
115  for(Int_t det=1;det<=3;det++) {
116  if (detectors && !detectors[det-1]) {
117  continue;
118  }
119  UShort_t FirstRing = (det == 1 ? 1 : 0);
120  for (UShort_t ir = FirstRing; ir < 2; ir++) {
121  Char_t ring = (ir == 0 ? 'O' : 'I');
122  UShort_t nsec = (ir == 0 ? 40 : 20) / 2;
123 
124  for(UShort_t board = 0; board < 2; board++) {
125  UShort_t sector = board*nsec;
126  outFile << det << ','
127  << ring << ','
128  << board << ','
129  << Rate(det,ring,sector) << "\n";
130 
131 
132  }
133  }
134  }
135 
136 
137 }
138 //____________________________________________________________________
139 void
141 {
142  TString line;
143  Bool_t readData=kFALSE;
144 
145  while(line.ReadLine(inFile)) {
146  if(line.Contains("samplerate",TString::kIgnoreCase)) {
147  readData = kTRUE;
148  break;
149  }
150 
151  }
152 
153  UShort_t det, board;
154  Char_t ring;
155  UShort_t sampleRate;
156  Int_t thisline = inFile.tellg();
157  Char_t c[3];
158 
159  while( readData ) {
160  thisline = inFile.tellg();
161  line.ReadLine(inFile);
162  if(line.Contains("# ",TString::kIgnoreCase)) {
163  readData = kFALSE;
164  continue;
165  }
166 
167  inFile.seekg(thisline);
168  inFile >> det >> c[0]
169  >> ring >> c[1]
170  >> board >> c[2]
171  >> sampleRate;
172 
173  UInt_t nSec = (ring == 'I' ? 20 : 40)/2;
174  UShort_t sector = board*nSec;
175  Set(det,ring,sector,0,sampleRate);
176 
177 
178  }
179 
180  inFile.seekg(0);
181 
182 
183 }
184 
185 //____________________________________________________________________
186 //
187 // EOF
188 //
void WriteToFile(std::ostream &outFile, Bool_t *detectors=0)
UShort_t Rate(UShort_t det, Char_t ring, UShort_t sec, UShort_t str=0) const
void Set(UShort_t det, Char_t ring, UShort_t sec, UShort_t str, UShort_t rate)
void ReadFromFile(std::istream &inFile)
virtual void Reset(const UShort_t &val=UShort_t())
Base class for caches of per-strip information.This is used to index a strip. Data stored depends on ...
Definition: AliFMDMap.h:19
Per digitizer card pulser calibration.
#define AliFMDDebug(N, A)
Definition: AliFMDDebug.h:39
AliFMDCalibSampleRate & operator=(const AliFMDCalibSampleRate &o)
Per digitizer card pulser calibration.