]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCSensorTempArray.cxx
gstpar calls removed, settings moved to galice.cuts
[u/mrichter/AliRoot.git] / TPC / AliTPCSensorTempArray.cxx
index 0c0fb897fcf7a33a81c1539c3545a7bf6085171b..b1dda2c40cb8946f05dd1bcefbbbabbc65fa103a 100644 (file)
 ///////////////////////////////////////////////////////////////////////////////
 
 #include "AliTPCSensorTempArray.h"
+#include "TLinearFitter.h"
+#include "TVectorD.h"
+#include "AliLog.h"
+
+
 
 ClassImp(AliTPCSensorTempArray)
 
-const char kFname[] = "TempSensor.txt";
-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()
@@ -38,45 +37,48 @@ AliTPCSensorTempArray::AliTPCSensorTempArray():AliDCSSensorArray()
   //
   // AliTPCSensorTempArray default constructor
   //
-  fSensors = 0;
-  fFirstSensor = 0;
-  fLastSensor = 0;
-  TTimeStamp defTime(2000,1,1,0,0,0);
-  fStartTime = defTime;
-  fEndTime = defTime;
-
 }
 //_____________________________________________________________________________
-AliTPCSensorTempArray::AliTPCSensorTempArray(Int_t prevRun) : 
-                AliDCSSensorArray(prevRun,"TPC/Calib/Temperature")
+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)
+AliTPCSensorTempArray::AliTPCSensorTempArray(UInt_t startTime, UInt_t endTime,
+                       TTree* confTree, const TString& amandaString)
              :AliDCSSensorArray()
 {
   //
-  // AliTPCSensorTempArray default constructor
+  // AliTPCSensorTempArray constructor for Shuttle preprocessor 
+  //  (confTree read from OCDB)
   //
-  fSensors = AliTPCSensorTemp::ReadListInd(kFname,fFirstSensor,fLastSensor);
-  fStartTime = TTimeStamp(startTime);
-  fEndTime   = TTimeStamp(endTime);
-
+  fSensors = AliTPCSensorTemp::ReadTree(confTree,amandaString);
+  fSensors->BypassStreamer(kFALSE);
+  fStartTime = TTimeStamp((time_t)startTime,0);
+  fEndTime   = TTimeStamp((time_t)endTime,0);
 }
 
 //_____________________________________________________________________________
-AliTPCSensorTempArray::AliTPCSensorTempArray(const char *fname) : 
+AliTPCSensorTempArray::AliTPCSensorTempArray(const char *fname,
+                                          const TString& amandaString) :
                                                   AliDCSSensorArray()
 {
   //
   // AliTPCSensorTempArray constructor
   //
-  fSensors = AliTPCSensorTemp::ReadListInd(fname,fFirstSensor,fLastSensor);
+  fSensors = AliTPCSensorTemp::ReadList(fname,amandaString);
   fSensors->BypassStreamer(kFALSE);
-  TTimeStamp defTime(2000,1,1,0,0,0);
-  fStartTime = defTime;
-  fEndTime = defTime;
-
 }
 
 
@@ -96,9 +98,6 @@ AliTPCSensorTempArray::~AliTPCSensorTempArray()
   //
   // AliTPCSensorTempArray destructor
   //
-  fSensors->Delete();
-  delete fSensors;
-
 }
 
 //_____________________________________________________________________________
@@ -107,55 +106,88 @@ AliTPCSensorTempArray &AliTPCSensorTempArray::operator=(const AliTPCSensorTempAr
   //
   // Assignment operator
   //
-
-  if (this != &c) ((AliTPCSensorTempArray &) c).Copy(*this);
+  if (this != &c) {
+     fSensors->Delete();
+     new (this) AliTPCSensorTempArray(c);
+     fSensors = (TClonesArray*)c.fSensors->Clone();
+  }
   return *this;
-
 }
 
-//_____________________________________________________________________________
-void AliTPCSensorTempArray::Copy(TObject &c) const
-{
-  //
-  // Copy function
-  //
 
-  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::ReadListInd(fname,fFirstSensor,fLastSensor);
+  AliCDBEntry *entry = AliCDBManager::Instance()->Get(dbEntry);
+  TTree *tree = (TTree*) entry->GetObject();
+  fSensors = AliTPCSensorTemp::ReadTree(tree);
+
 }  
+
 //_____________________________________________________________________________
-void AliTPCSensorTempArray::SetGraph(TMap *map
+AliTPCSensorTemp* AliTPCSensorTempArray::GetSensor(Int_t type, Int_t side, Int_t sector, Int_t num
 {
-  // 
-  // Read graphs from DCS maps 
-  //
-  AliDCSSensorArray::SetGraph(map,"tpc_temp:PT_%d.Temperature");
-}  
+ //
+ //  Return sensor information for sensor specified by type, side, sector and num
+ //
+ Int_t nsensors = fSensors->GetEntries();
+ for (Int_t isensor=0; isensor<nsensors; isensor++) {
+   AliTPCSensorTemp *entry = (AliTPCSensorTemp*)fSensors->At(isensor);
+   if (entry->GetSide() == side &&
+       entry->GetType() == type &&
+       entry->GetSector() == sector &&
+       entry->GetNum() == num ) return entry;
+ }
+ return 0;
+}
 //_____________________________________________________________________________
-void AliTPCSensorTempArray::MakeSplineFit(TMap *map) 
-{
-  // 
-  // Make spline fits from DCS maps 
-  //
-  AliDCSSensorArray::MakeSplineFit(map,"tpc_temp:PT_%d.Temperature");
-}  
 
+AliTPCSensorTemp* AliTPCSensorTempArray::GetSensor(Int_t IdDCS){
+  return dynamic_cast<AliTPCSensorTemp*>(AliDCSSensorArray::GetSensor(IdDCS));
+}
+//_____________________________________________________________________________
 
+AliTPCSensorTemp* AliTPCSensorTempArray::GetSensor(Double_t x, Double_t y, Double_t z){
+  return dynamic_cast<AliTPCSensorTemp*>(AliDCSSensorArray::GetSensor(x,y,z));
+}
 //_____________________________________________________________________________
-TMap* AliTPCSensorTempArray::ExtractDCS(TMap *dcsMap) 
-{
+
+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))
  //
- // Extract temperature graphs from DCS maps
+ // FIXME: Also return residual-distribution, covariance Matrix
+ //        or simply chi2 for validity check?
  //
 
- TMap *values = AliDCSSensorArray::ExtractDCS(dcsMap,"tpc_temp:PT_%d.Temperature");
- return values;
-}
+ 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
 
+ }