X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FAliTPCSensorTempArray.cxx;h=b1dda2c40cb8946f05dd1bcefbbbabbc65fa103a;hb=f4d5fd21cab98a73f6a337517f1bae51e37203c0;hp=d21fcd91ad9e4182c06b3820e2048382a74eb281;hpb=f2b1ee6eb7bbd02b974ccbaa2b636fe4a11b82b9;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/AliTPCSensorTempArray.cxx b/TPC/AliTPCSensorTempArray.cxx index d21fcd91ad9..b1dda2c40cb 100644 --- a/TPC/AliTPCSensorTempArray.cxx +++ b/TPC/AliTPCSensorTempArray.cxx @@ -22,15 +22,17 @@ /////////////////////////////////////////////////////////////////////////////// #include "AliTPCSensorTempArray.h" +#include "TLinearFitter.h" +#include "TVectorD.h" +#include "AliLog.h" + + ClassImp(AliTPCSensorTempArray) -const char kFname[] = "TempSensor.txt"; -const char kAmandaString[] = "tpc_temp:PT_%d.Temperature"; //_____________________________________________________________________________ -AliTPCSensorTempArray::AliTPCSensorTempArray():AliDCSSensorArray(), - fAmandaString(kAmandaString) +AliTPCSensorTempArray::AliTPCSensorTempArray():AliDCSSensorArray() { // // AliTPCSensorTempArray default constructor @@ -38,47 +40,51 @@ 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, const TString& amandaString) + :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()); - fStartTime = TTimeStamp(startTime); - fEndTime = TTimeStamp(endTime); - delete expPath; + 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) : - AliDCSSensorArray(), - fAmandaString(kAmandaString) +AliTPCSensorTempArray::AliTPCSensorTempArray(const char *fname, + const TString& amandaString) : + AliDCSSensorArray() { // // AliTPCSensorTempArray constructor // - fSensors = AliTPCSensorTemp::ReadList(fname); + fSensors = AliTPCSensorTemp::ReadList(fname,amandaString); fSensors->BypassStreamer(kFALSE); } //_____________________________________________________________________________ AliTPCSensorTempArray::AliTPCSensorTempArray(const AliTPCSensorTempArray &c): - AliDCSSensorArray(c), - fAmandaString(c.fAmandaString) + AliDCSSensorArray(c) { // // AliTPCSensorTempArray copy constructor @@ -100,57 +106,26 @@ 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::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) @@ -178,3 +153,41 @@ AliTPCSensorTemp* AliTPCSensorTempArray::GetSensor(Int_t IdDCS){ AliTPCSensorTemp* AliTPCSensorTempArray::GetSensor(Double_t x, Double_t y, Double_t z){ return dynamic_cast(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; 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 + + }