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