]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCSensorTempArray.cxx
Fix for negative sigmas. Memory leaks (Marco)
[u/mrichter/AliRoot.git] / TPC / AliTPCSensorTempArray.cxx
index 9fd451faa9a757ca05a9f863d032d91705ad3ee7..42e6e290a000441bdfd47b734fff3bf872ea8ce8 100644 (file)
 ///////////////////////////////////////////////////////////////////////////////
 
 #include "AliTPCSensorTempArray.h"
+#include "TLinearFitter.h"
+#include "TVectorD.h"
 
 ClassImp(AliTPCSensorTempArray)
 
-const char kFname[] = "TempSensor.txt";
-const char kAmandaString[] = "tpc_temp:PT_%d.Temperature";
-const Int_t  kMinGraph = 10;       // minimum #points of graph to be fitted
-const Int_t  kMinPoints = 10;      // minimum number of points per knot in fit
-const Int_t  kIter = 10;           // number of iterations for spline fit
-const Double_t  kMaxDelta = 0.00;  // precision parameter for spline fit
-const Int_t  kFitReq = 2;          // fit requirement, 2 = continuous 2nd derivative
 
 //_____________________________________________________________________________
-AliTPCSensorTempArray::AliTPCSensorTempArray():AliDCSSensorArray(),
- fAmandaString(kAmandaString)
+AliTPCSensorTempArray::AliTPCSensorTempArray():AliDCSSensorArray()
 {
   //
   // AliTPCSensorTempArray default constructor
@@ -43,34 +37,38 @@ AliTPCSensorTempArray::AliTPCSensorTempArray():AliDCSSensorArray(),
  
 }
 //_____________________________________________________________________________
-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
@@ -82,8 +80,7 @@ AliTPCSensorTempArray::AliTPCSensorTempArray(const char *fname) :
 
 //_____________________________________________________________________________
 AliTPCSensorTempArray::AliTPCSensorTempArray(const AliTPCSensorTempArray &c):
-  AliDCSSensorArray(c),
-  fAmandaString(c.fAmandaString)
+  AliDCSSensorArray(c)
 {
   //
   // AliTPCSensorTempArray copy constructor
@@ -121,41 +118,16 @@ void AliTPCSensorTempArray::Copy(TObject &c) const
   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) 
@@ -183,3 +155,41 @@ AliTPCSensorTemp* AliTPCSensorTempArray::GetSensor(Int_t IdDCS){
 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
+
+ }