]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliDCSSensor.cxx
Update documentation (SPD, SSD, multiplicity)
[u/mrichter/AliRoot.git] / STEER / AliDCSSensor.cxx
index cf7bfc3f95723b7a662eeaa9dc4efdbbf07a3c0f..69af0d9e2849bbb8859c955ec082cd59af5fefdf 100644 (file)
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// Running instructions:
-/*
-  TClonesArray * arr = AliDCSSensor::ReadList("TempSensor.txt");
-  TFile f("TempSensors.root","RECREATE");
-  TTree * tree = new TTree("TempSensor", "TempSensor");
-  tree->Branch("Temp",&arr);
-  tree->Fill();
-  tree->Write();
-  
- */
-//
-
-
 #include "AliDCSSensor.h"
 ClassImp(AliDCSSensor)
 
-const Double_t kSmall = -9e99;     // invalid small value
-const Double_t kLarge = 9e99;      // invalid large value
 const Double_t kSecInHour = 3600.; // seconds in one hour
 
 
@@ -95,7 +80,8 @@ Double_t AliDCSSensor::GetValue(UInt_t timeSec)
  // Get temperature value for actual sensor
  //  timeSec given as offset from start-of-run measured in seconds
  //
- return Eval(TTimeStamp(fStartTime+timeSec));
+ Bool_t inside=kTRUE;
+ return Eval(TTimeStamp((time_t)(fStartTime+timeSec),0),inside);
 }
 //_____________________________________________________________________________
 Double_t AliDCSSensor::GetValue(TTimeStamp time) 
@@ -103,32 +89,72 @@ Double_t AliDCSSensor::GetValue(TTimeStamp time)
  // Get temperature value for actual sensor
  //  time given as absolute TTimeStamp
  //
- return Eval(time);
+ Bool_t inside=kTRUE;
+ return Eval(time, inside);
 }
 
 //_____________________________________________________________________________
 
-Double_t AliDCSSensor::Eval(const TTimeStamp& time) const
+Double_t AliDCSSensor::Eval(const TTimeStamp& time, Bool_t inside) const
 {
   // 
   // Return temperature at given time
-  //  If time < start of map  return kSmall
-  //  If time > end of map    return kLarge
+  //  If time < start of map  return value at start of map, inside = false
+  //  If time > end of map    return value at end of map, inside = false
   
   UInt_t timeSec = time.GetSec();
   UInt_t diff = timeSec-fStartTime;
+  inside = true;
   
-  if ( timeSec < fStartTime ) return kSmall;
-  if ( timeSec > fEndTime ) return kLarge;
+  if ( timeSec < fStartTime ) { 
+     inside=false;
+     diff=0;
+  }
+  if ( timeSec > fEndTime ) {
+     inside=false;
+     diff = fEndTime-fStartTime;
+  }
  
   Double_t timeHour = diff/kSecInHour;
   if ( fFit ) {
      return fFit->Eval(timeHour); 
   } else {
-     return kSmall;
+     if ( fGraph ) {
+       return EvalGraph(timeHour);
+     } else {  
+       return -99;
+     }
   }
 }
+//_____________________________________________________________________________
+Double_t AliDCSSensor::EvalGraph(const Double_t& timeHour) const 
+{
+  //
+  // Extract last value in graph observed before time given by timeHour
+  //
+
+  // return -99 if point specified is before beginning of graph
+  Double_t x=0; Double_t y=0;
+  fGraph->GetPoint(0,x,y);
+  if ( timeHour < x ) return -99;
+  
+  // return previous point when first time > timeHour is observed
+  
+  Int_t npoints = fGraph->GetN();
+  for (Int_t i=1; i<npoints; i++) {
+     fGraph->GetPoint(i,x,y);
+     if ( timeHour < x ) {
+       fGraph->GetPoint(i-1,x,y);
+       return y;
+     }
+  }
+  
+  // return last point if all times are < timeHour
+  return y;
+} 
+       
 
+//_____________________________________________________________________________
 TGraph* AliDCSSensor::MakeGraph(Int_t nPoints) const
 {
   //
@@ -153,7 +179,7 @@ TGraph* AliDCSSensor::MakeGraph(Int_t nPoints) const
   graph->GetXaxis()->SetTimeDisplay(1);
   graph->GetXaxis()->SetLabelOffset(0.02);
   graph->GetXaxis()->SetTimeFormat("#splitline{%d/%m}{%H:%M}");
-  
+
   return graph;
 }
 
@@ -163,9 +189,9 @@ TClonesArray * AliDCSSensor::ReadTree(TTree* tree) {
   //
   // read values from ascii file
   //
-  
+
   Int_t nentries = tree->GetEntries();
-  
+
   char stringId[100];
   Int_t num=0;
   Int_t idDCS=0;