X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FAliTPCSensorTempArray.cxx;h=b1dda2c40cb8946f05dd1bcefbbbabbc65fa103a;hb=4ab8985c1f7fbe9b9642049b922752f866ac00a2;hp=0c0fb897fcf7a33a81c1539c3545a7bf6085171b;hpb=54472e4ff461fbb8bb474a5310de51cf18993cc9;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/AliTPCSensorTempArray.cxx b/TPC/AliTPCSensorTempArray.cxx index 0c0fb897fcf..b1dda2c40cb 100644 --- a/TPC/AliTPCSensorTempArray.cxx +++ b/TPC/AliTPCSensorTempArray.cxx @@ -22,15 +22,14 @@ /////////////////////////////////////////////////////////////////////////////// #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; isensorAt(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(AliDCSSensorArray::GetSensor(IdDCS)); +} +//_____________________________________________________________________________ +AliTPCSensorTemp* AliTPCSensorTempArray::GetSensor(Double_t x, Double_t y, Double_t z){ + return dynamic_cast(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; isensorAt(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 + }