///////////////////////////////////////////////////////////////////////////////
#include "AliTPCSensorTempArray.h"
+#include "TLinearFitter.h"
+#include "TVectorD.h"
ClassImp(AliTPCSensorTempArray)
-const char kFname[] = "TempSensor.txt";
-const char kAmandaString[] = "tpc_temp:PT_%d.Temperature";
//_____________________________________________________________________________
-AliTPCSensorTempArray::AliTPCSensorTempArray():AliDCSSensorArray(),
- fAmandaString(kAmandaString)
+AliTPCSensorTempArray::AliTPCSensorTempArray():AliDCSSensorArray()
{
//
// AliTPCSensorTempArray default constructor
}
//_____________________________________________________________________________
-AliTPCSensorTempArray::AliTPCSensorTempArray(Int_t prevRun) :
- AliDCSSensorArray(prevRun,"TPC/Calib/Temperature"),
- fAmandaString(kAmandaString)
+AliTPCSensorTempArray::AliTPCSensorTempArray(Int_t run) : AliDCSSensorArray()
{
+ //
+ // Read configuration from OCDB
+ //
+
+
+ AliCDBEntry *entry =
+ AliCDBManager::Instance()->Get("TPC/Config/Temperature",run);
+ TTree *tree = (TTree*) entry->GetObject();
+ fSensors = AliTPCSensorTemp::ReadTree(tree);
+ fSensors->BypassStreamer(kFALSE);
+
}
//_____________________________________________________________________________
AliTPCSensorTempArray::AliTPCSensorTempArray(UInt_t startTime, UInt_t endTime,
- const char *filepath)
- :AliDCSSensorArray(),
- fAmandaString(kAmandaString)
+ TTree* confTree)
+ :AliDCSSensorArray()
{
//
- // AliTPCSensorTempArray default constructor
+ // AliTPCSensorTempArray constructor for Shuttle preprocessor
+ // (confTree read from OCDB)
//
- char *expPath = gSystem->ExpandPathName(filepath);
- TString filename(expPath);
- filename.Append('/');
- filename.Append(kFname);
- fSensors = AliTPCSensorTemp::ReadList(filename.Data());
+ fSensors = AliTPCSensorTemp::ReadTree(confTree);
+ fSensors->BypassStreamer(kFALSE);
fStartTime = TTimeStamp(startTime);
fEndTime = TTimeStamp(endTime);
- delete expPath;
}
//_____________________________________________________________________________
AliTPCSensorTempArray::AliTPCSensorTempArray(const char *fname) :
- AliDCSSensorArray(),
- fAmandaString(kAmandaString)
+ AliDCSSensorArray()
{
//
// AliTPCSensorTempArray constructor
//_____________________________________________________________________________
AliTPCSensorTempArray::AliTPCSensorTempArray(const AliTPCSensorTempArray &c):
- AliDCSSensorArray(c),
- fAmandaString(c.fAmandaString)
+ AliDCSSensorArray(c)
{
//
// AliTPCSensorTempArray copy constructor
TObject::Copy(c);
}
//_____________________________________________________________________________
-void AliTPCSensorTempArray::ReadSensors(const char *fname)
+void AliTPCSensorTempArray::ReadSensors(const char *dbEntry)
{
//
// Read list of temperature sensors from text file
//
- fSensors = AliTPCSensorTemp::ReadList(fname);
-}
-//_____________________________________________________________________________
-void AliTPCSensorTempArray::SetGraph(TMap *map)
-{
- //
- // Read graphs from DCS maps
- //
- AliDCSSensorArray::SetGraph(map,fAmandaString.Data());
-}
-//_____________________________________________________________________________
-void AliTPCSensorTempArray::MakeSplineFit(TMap *map)
-{
- //
- // Make spline fits from DCS maps
- //
- AliDCSSensorArray::MakeSplineFit(map,fAmandaString.Data());
-}
-
+ AliCDBEntry *entry = AliCDBManager::Instance()->Get(dbEntry);
+ TTree *tree = (TTree*) entry->GetObject();
+ fSensors = AliTPCSensorTemp::ReadTree(tree);
-//_____________________________________________________________________________
-TMap* AliTPCSensorTempArray::ExtractDCS(TMap *dcsMap)
-{
- //
- // Extract temperature graphs from DCS maps
- //
-
- TMap *values = AliDCSSensorArray::ExtractDCS(dcsMap,fAmandaString.Data());
- return values;
-}
+}
//_____________________________________________________________________________
AliTPCSensorTemp* AliTPCSensorTempArray::GetSensor(Int_t type, Int_t side, Int_t sector, Int_t num)
AliTPCSensorTemp* AliTPCSensorTempArray::GetSensor(Double_t x, Double_t y, Double_t z){
return dynamic_cast<AliTPCSensorTemp*>(AliDCSSensorArray::GetSensor(x,y,z));
}
+//_____________________________________________________________________________
+
+Double_t AliTPCSensorTempArray::GetTempGradientY(UInt_t timeSec, Int_t side){
+ //
+ // Extract Linear Vertical Temperature Gradient [K/cm] within the TPC on
+ // Shaft Side(A): 0
+ // Muon Side(C): 1
+ // Values based on TemperatureSensors within the TPC (type: 3(TPC))
+ //
+ // FIXME: Also return residual-distribution, covariance Matrix
+ // or simply chi2 for validity check?
+ //
+
+ TLinearFitter fitter(3,"x0++x1++x2");
+ TVectorD param(3);
+ Int_t i = 0;
+
+ Int_t nsensors = fSensors->GetEntries();
+ for (Int_t isensor=0; isensor<nsensors; isensor++) { // loop over all sensors
+ AliTPCSensorTemp *entry = (AliTPCSensorTemp*)fSensors->At(isensor);
+
+ if (entry->GetType()==3 && entry->GetSide()==side) { // take SensorType:TPC
+ Double_t x[3];
+ x[0]=1;
+ x[1]=entry->GetX();
+ x[2]=entry->GetY();
+ Double_t y = entry->GetValue(timeSec); // get temperature value
+ fitter.AddPoint(x,y,1); // add values to LinearFitter
+ i++;
+ }
+
+ }
+ fitter.Eval();
+ fitter.GetParameters(param);
+
+ return param[2]; // return vertical (Y) tempGradient
+
+ }