Line data Source code
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$ */
16 : /** @file AliFMDCalibSampleRate.cxx
17 : @author Christian Holm Christensen <cholm@nbi.dk>
18 : @date Sun Mar 26 18:31:09 2006
19 : @brief Per digitizer card pulser calibration
20 : */
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 12 : ClassImp(AliFMDCalibSampleRate)
54 : #if 0
55 : ; // This is here to keep Emacs for indenting the next line
56 : #endif
57 :
58 : //____________________________________________________________________
59 3 : AliFMDCalibSampleRate::AliFMDCalibSampleRate()
60 3 : : fRates(AliFMDMap::kMaxDetectors, AliFMDMap::kMaxRings, 2, 1)
61 : // fRates(3)
62 15 : {
63 : // CTOR
64 3 : fRates.Reset(1);
65 6 : }
66 :
67 : //____________________________________________________________________
68 : AliFMDCalibSampleRate::AliFMDCalibSampleRate(const AliFMDCalibSampleRate& o)
69 0 : : TObject(o), fRates(o.fRates)
70 0 : {
71 : // Copy ctor
72 0 : }
73 :
74 : //____________________________________________________________________
75 : AliFMDCalibSampleRate&
76 : AliFMDCalibSampleRate::operator=(const AliFMDCalibSampleRate& o)
77 : {
78 : // Assignment operator
79 0 : fRates = o.fRates;
80 0 : 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 0 : UInt_t nSec = (ring == 'I' ? 10 : 20);
90 0 : UInt_t board = sector / nSec;
91 0 : fRates(det, ring, board, 0) = rate;
92 0 : AliFMDDebug(15, ("Setting sample rate for FMD%d%c[%2d,0] (board %d): %d",
93 : det, ring, sector, board, rate));
94 :
95 0 : }
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 2867200 : UInt_t nSec = (ring == 'I' ? 10 : 20);
104 1433600 : UInt_t board = sec / nSec;
105 1433600 : UShort_t ret = fRates(det, ring, board, 0);
106 2867200 : AliFMDDebug(15, ("Getting sample rate for FMD%d%c[%2d,0] (board %d): %d",
107 : det, ring, sec, board, ret));
108 1433600 : return ret;
109 : }
110 : //____________________________________________________________________
111 : void
112 : AliFMDCalibSampleRate::WriteToFile(std::ostream &outFile, Bool_t* detectors)
113 : {
114 0 : outFile.write("# SampleRate \n",14);
115 0 : for(Int_t det=1;det<=3;det++) {
116 0 : if (detectors && !detectors[det-1]) {
117 : continue;
118 : }
119 0 : UShort_t FirstRing = (det == 1 ? 1 : 0);
120 0 : for (UShort_t ir = FirstRing; ir < 2; ir++) {
121 0 : Char_t ring = (ir == 0 ? 'O' : 'I');
122 0 : UShort_t nsec = (ir == 0 ? 40 : 20) / 2;
123 :
124 0 : for(UShort_t board = 0; board < 2; board++) {
125 0 : UShort_t sector = board*nsec;
126 0 : outFile << det << ','
127 0 : << ring << ','
128 0 : << board << ','
129 0 : << Rate(det,ring,sector) << "\n";
130 :
131 :
132 : }
133 : }
134 0 : }
135 :
136 :
137 0 : }
138 : //____________________________________________________________________
139 : void
140 : AliFMDCalibSampleRate::ReadFromFile(std::istream &inFile)
141 : {
142 0 : TString line;
143 : Bool_t readData=kFALSE;
144 :
145 0 : while(line.ReadLine(inFile)) {
146 0 : if(line.Contains("samplerate",TString::kIgnoreCase)) {
147 : readData = kTRUE;
148 0 : break;
149 : }
150 :
151 : }
152 :
153 0 : UShort_t det, board;
154 0 : Char_t ring;
155 0 : UShort_t sampleRate;
156 0 : Int_t thisline = inFile.tellg();
157 0 : Char_t c[3];
158 :
159 0 : while( readData ) {
160 0 : thisline = inFile.tellg();
161 0 : line.ReadLine(inFile);
162 0 : if(line.Contains("# ",TString::kIgnoreCase)) {
163 : readData = kFALSE;
164 0 : continue;
165 : }
166 :
167 0 : inFile.seekg(thisline);
168 0 : inFile >> det >> c[0]
169 0 : >> ring >> c[1]
170 0 : >> board >> c[2]
171 0 : >> sampleRate;
172 :
173 0 : UInt_t nSec = (ring == 'I' ? 20 : 40)/2;
174 0 : UShort_t sector = board*nSec;
175 0 : Set(det,ring,sector,0,sampleRate);
176 :
177 :
178 : }
179 :
180 0 : inFile.seekg(0);
181 :
182 :
183 0 : }
184 :
185 : //____________________________________________________________________
186 : //
187 : // EOF
188 : //
|