]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TPC/AliTPCSensorTempArray.cxx
First version of the TPC pedestal online detector algorithm (Sylvain)
[u/mrichter/AliRoot.git] / TPC / AliTPCSensorTempArray.cxx
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
16
17 ///////////////////////////////////////////////////////////////////////////////
18 //                                                                           //
19 //  TPC calibration class for parameters which saved per pad                 //
20 //  Authors: Marian Ivanov and Haavard Helstrup                              //
21 //                                                                           //
22 ///////////////////////////////////////////////////////////////////////////////
23
24 #include "AliTPCSensorTempArray.h"
25 #include "TLinearFitter.h"
26 #include "TVectorD.h"
27
28 ClassImp(AliTPCSensorTempArray)
29
30
31 //_____________________________________________________________________________
32 AliTPCSensorTempArray::AliTPCSensorTempArray():AliDCSSensorArray()
33 {
34   //
35   // AliTPCSensorTempArray default constructor
36   //
37  
38 }
39 //_____________________________________________________________________________
40 AliTPCSensorTempArray::AliTPCSensorTempArray(Int_t run) : AliDCSSensorArray() 
41 {
42   //
43   // Read configuration from OCDB
44   //
45
46      
47   AliCDBEntry *entry =
48             AliCDBManager::Instance()->Get("TPC/Config/Temperature",run); 
49   TTree *tree = (TTree*) entry->GetObject();
50   fSensors = AliTPCSensorTemp::ReadTree(tree);
51   fSensors->BypassStreamer(kFALSE);
52   
53 }
54 //_____________________________________________________________________________
55 AliTPCSensorTempArray::AliTPCSensorTempArray(UInt_t startTime, UInt_t endTime,
56                        TTree* confTree)
57              :AliDCSSensorArray()
58 {
59   //
60   // AliTPCSensorTempArray constructor for Shuttle preprocessor 
61   //  (confTree read from OCDB)
62   //
63   fSensors = AliTPCSensorTemp::ReadTree(confTree);
64   fSensors->BypassStreamer(kFALSE);
65   fStartTime = TTimeStamp(startTime);
66   fEndTime   = TTimeStamp(endTime);
67 }
68
69 //_____________________________________________________________________________
70 AliTPCSensorTempArray::AliTPCSensorTempArray(const char *fname) : 
71                                                   AliDCSSensorArray()
72 {
73   //
74   // AliTPCSensorTempArray constructor
75   //
76   fSensors = AliTPCSensorTemp::ReadList(fname);
77   fSensors->BypassStreamer(kFALSE);
78 }
79
80
81 //_____________________________________________________________________________
82 AliTPCSensorTempArray::AliTPCSensorTempArray(const AliTPCSensorTempArray &c):
83   AliDCSSensorArray(c)
84 {
85   //
86   // AliTPCSensorTempArray copy constructor
87   //
88
89 }
90
91 ///_____________________________________________________________________________
92 AliTPCSensorTempArray::~AliTPCSensorTempArray()
93 {
94   //
95   // AliTPCSensorTempArray destructor
96   //
97 }
98
99 //_____________________________________________________________________________
100 AliTPCSensorTempArray &AliTPCSensorTempArray::operator=(const AliTPCSensorTempArray &c)
101 {
102   //
103   // Assignment operator
104   //
105
106   if (this != &c) ((AliTPCSensorTempArray &) c).Copy(*this);
107   return *this;
108
109 }
110
111 //_____________________________________________________________________________
112 void AliTPCSensorTempArray::Copy(TObject &c) const
113 {
114   //
115   // Copy function
116   //
117
118   TObject::Copy(c);
119 }
120 //_____________________________________________________________________________
121 void AliTPCSensorTempArray::ReadSensors(const char *dbEntry) 
122 {
123   //
124   // Read list of temperature sensors from text file
125   //
126   AliCDBEntry *entry = AliCDBManager::Instance()->Get(dbEntry); 
127   TTree *tree = (TTree*) entry->GetObject();
128   fSensors = AliTPCSensorTemp::ReadTree(tree);
129
130 }  
131
132 //_____________________________________________________________________________
133 AliTPCSensorTemp* AliTPCSensorTempArray::GetSensor(Int_t type, Int_t side, Int_t sector, Int_t num) 
134 {
135  //
136  //  Return sensor information for sensor specified by type, side, sector and num
137  //
138  Int_t nsensors = fSensors->GetEntries();
139  for (Int_t isensor=0; isensor<nsensors; isensor++) {
140    AliTPCSensorTemp *entry = (AliTPCSensorTemp*)fSensors->At(isensor);
141    if (entry->GetSide() == side &&
142        entry->GetType() == type &&
143        entry->GetSector() == sector &&
144        entry->GetNum() == num ) return entry;
145  }
146  return 0;
147 }
148 //_____________________________________________________________________________
149
150 AliTPCSensorTemp* AliTPCSensorTempArray::GetSensor(Int_t IdDCS){
151   return dynamic_cast<AliTPCSensorTemp*>(AliDCSSensorArray::GetSensor(IdDCS));
152 }
153 //_____________________________________________________________________________
154
155 AliTPCSensorTemp* AliTPCSensorTempArray::GetSensor(Double_t x, Double_t y, Double_t z){
156   return dynamic_cast<AliTPCSensorTemp*>(AliDCSSensorArray::GetSensor(x,y,z));
157 }
158 //_____________________________________________________________________________
159
160 Double_t AliTPCSensorTempArray::GetTempGradientY(UInt_t timeSec, Int_t side){
161  //
162  // Extract Linear Vertical Temperature Gradient [K/cm] within the TPC on
163  // Shaft Side(A): 0
164  // Muon  Side(C): 1
165  // Values based on TemperatureSensors within the TPC (type: 3(TPC))
166  //
167  // FIXME: Also return residual-distribution, covariance Matrix
168  //        or simply chi2 for validity check?
169  //
170
171  TLinearFitter fitter(3,"x0++x1++x2");
172  TVectorD param(3);
173  Int_t i = 0;
174
175  Int_t nsensors = fSensors->GetEntries();
176  for (Int_t isensor=0; isensor<nsensors; isensor++) { // loop over all sensors
177    AliTPCSensorTemp *entry = (AliTPCSensorTemp*)fSensors->At(isensor);
178
179    if (entry->GetType()==3 && entry->GetSide()==side) { // take SensorType:TPC
180      Double_t x[3];
181      x[0]=1;
182      x[1]=entry->GetX();
183      x[2]=entry->GetY();
184      Double_t y = entry->GetValue(timeSec); // get temperature value
185      fitter.AddPoint(x,y,1); // add values to LinearFitter
186      i++;
187    }
188
189  }
190  fitter.Eval();
191  fitter.GetParameters(param);
192
193  return param[2]; // return vertical (Y) tempGradient
194
195  }