X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliDCSSensor.cxx;h=69af0d9e2849bbb8859c955ec082cd59af5fefdf;hb=d6882b38e994e5cd8d8b4a7192e4aad7418a008d;hp=cf7bfc3f95723b7a662eeaa9dc4efdbbf07a3c0f;hpb=dc0184e74b85397f34e5ef9365417c29e5d5c9ee;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliDCSSensor.cxx b/STEER/AliDCSSensor.cxx index cf7bfc3f957..69af0d9e284 100644 --- a/STEER/AliDCSSensor.cxx +++ b/STEER/AliDCSSensor.cxx @@ -22,24 +22,9 @@ //////////////////////////////////////////////////////////////////////////////// -// 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; iGetPoint(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;