X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FAliTPCcalibDB.cxx;h=5aed0fa07e81de828150426d60ff1964a452282e;hb=9ab38379024f14edd47a3835a9e8f93d05e47bd3;hp=7a57b737c406ffe512fcbdffd80442a925c017fc;hpb=f02699558d22736664d26debf958e09852515919;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/AliTPCcalibDB.cxx b/TPC/AliTPCcalibDB.cxx index 7a57b737c40..5aed0fa07e8 100644 --- a/TPC/AliTPCcalibDB.cxx +++ b/TPC/AliTPCcalibDB.cxx @@ -84,7 +84,7 @@ #include #include #include -#include +#include #include "AliTPCcalibDB.h" #include "AliTPCAltroMapping.h" @@ -113,6 +113,7 @@ class AliTPCCalDet; #include "AliTPCCalibCE.h" #include "AliTPCExBFirst.h" #include "AliTPCTempMap.h" +#include "AliTPCCalibVdrift.h" @@ -173,9 +174,12 @@ AliTPCcalibDB::AliTPCcalibDB(): fMapping(0), fParam(0), fClusterParam(0), - fGRPArray(100000), //! array of GRPs - per run - JUST for calibration studies - fGoofieArray(100000), //! array of GOOFIE values -per run - Just for calibration studies - fTemperatureArray(100000), //! array of temperature sensors - per run - Just for calibration studies + fGRPArray(100000), //! array of GRPs - per run - JUST for calibration studies + fGRPMaps(100000), //! array of GRPs - per run - JUST for calibration studies + fGoofieArray(100000), //! array of GOOFIE values -per run - Just for calibration studies + fVoltageArray(100000), + fTemperatureArray(100000), //! array of temperature sensors - per run - Just for calibration studies + fVdriftArray(100000), //! array of v drift interfaces fRunList(100000) //! run list - indicates try to get the run param { @@ -201,8 +205,11 @@ AliTPCcalibDB::AliTPCcalibDB(const AliTPCcalibDB& ): fParam(0), fClusterParam(0), fGRPArray(0), //! array of GRPs - per run - JUST for calibration studies + fGRPMaps(0), //! array of GRPs - per run - JUST for calibration studies fGoofieArray(0), //! array of GOOFIE values -per run - Just for calibration studies + fVoltageArray(0), fTemperatureArray(0), //! array of temperature sensors - per run - Just for calibration studies + fVdriftArray(0), //! array of v drift interfaces fRunList(0) //! run list - indicates try to get the run param { // @@ -681,7 +688,7 @@ void AliTPCcalibDB::RegisterExB(Int_t index, Float_t bz, Bool_t bdelete){ Float_t factor = bz/(-5.); // default b filed in Cheb with minus sign - AliMagF* bmap = new AliMagWrapCheb("Maps","Maps", 2, factor, 10., AliMagWrapCheb::k5kG,kTRUE,"$(ALICE_ROOT)/data/maps/mfchebKGI_sym.root"); + AliMagF* bmap = new AliMagFCheb("MapsExB","MapsExB", 2, factor, 10., AliMagFCheb::k5kG,kTRUE,"$(ALICE_ROOT)/data/maps/mfchebKGI_sym.root"); AliTPCExBFirst *exb = new AliTPCExBFirst(bmap,0.88*2.6400e+04,50,50,50); AliTPCExB::SetInstance(exb); @@ -713,7 +720,6 @@ void AliTPCcalibDB::SetExBField(Float_t bz){ // // Set magnetic filed for ExB correction // - printf("Set magnetic field for ExB correction = %f\n",bz); fExB = GetExB(bz,kFALSE); } @@ -726,16 +732,45 @@ void AliTPCcalibDB::GetRunInformations( Int_t run){ AliCDBEntry * entry = 0; if (run>= fRunList.GetSize()){ fRunList.Set(run*2+1); - fGRPArray.Expand(run*2+1);fGoofieArray.Expand(run*2+1); fTemperatureArray.Expand(run*2+1); + fGRPArray.Expand(run*2+1); + fGRPMaps.Expand(run*2+1); + fGoofieArray.Expand(run*2+1); + fVoltageArray.Expand(run*2+1); + fTemperatureArray.Expand(run*2+1); + fVdriftArray.Expand(run*2+1); } if (fRunList[run]>0) return; entry = AliCDBManager::Instance()->Get("GRP/GRP/Data",run); - if (entry) fGRPArray.AddAt(entry->GetObject(),run); + if (entry) { + AliGRPObject * grpRun = dynamic_cast(entry->GetObject()); + if (!grpRun){ + TMap* map = dynamic_cast(entry->GetObject()); + if (map){ + //grpRun = new AliGRPObject; + //grpRun->ReadValuesFromMap(map); + grpRun = MakeGRPObjectFromMap(map); + + fGRPMaps.AddAt(map,run); + } + } + fGRPArray.AddAt(grpRun,run); + } entry = AliCDBManager::Instance()->Get("TPC/Calib/Goofie",run); if (entry) fGoofieArray.AddAt(entry->GetObject(),run); + // + entry = AliCDBManager::Instance()->Get("TPC/Calib/HighVoltage",run); + if (entry) fVoltageArray.AddAt(entry->GetObject(),run); + // entry = AliCDBManager::Instance()->Get("TPC/Calib/Temperature",run); if (entry) fTemperatureArray.AddAt(entry->GetObject(),run); fRunList[run]=1; // sign as used + + AliDCSSensor * press = GetPressureSensor(run); + AliTPCSensorTempArray * temp = GetTemperatureSensor(run); + if (press && temp){ + AliTPCCalibVdrift * vdrift = new AliTPCCalibVdrift(temp, press,0); + fVdriftArray.AddAt(vdrift,run); + } } @@ -747,18 +782,62 @@ Float_t AliTPCcalibDB::GetGain(Int_t sector, Int_t row, Int_t pad){ return calPad->GetCalROC(sector)->GetValue(row,pad); } -AliDCSSensor * AliTPCcalibDB::GetPressureSensor(Int_t run){ + +AliGRPObject *AliTPCcalibDB::GetGRP(Int_t run){ // + // Get GRP object for given run // - AliGRPObject * grpRun = dynamic_cast(fGRPArray.At(run)); + AliGRPObject * grpRun = dynamic_cast((Instance()->fGRPArray).At(run)); + if (!grpRun) { + Instance()->GetRunInformations(run); + grpRun = dynamic_cast(Instance()->fGRPArray.At(run)); + if (!grpRun) return 0; + } + return grpRun; +} + +TMap * AliTPCcalibDB::GetGRPMap(Int_t run){ + // + // + // + TMap * grpRun = dynamic_cast((Instance()->fGRPMaps).At(run)); + if (!grpRun) { + Instance()->GetRunInformations(run); + grpRun = dynamic_cast(Instance()->fGRPMaps.At(run)); + if (!grpRun) return 0; + } + return grpRun; +} + + +AliDCSSensor * AliTPCcalibDB::GetPressureSensor(Int_t run, Int_t type){ + // + // Get Pressure sensor + // + // + // First try to get if trom map - if existing (Old format of data storing) + // + TMap *map = GetGRPMap(run); + if (map){ + AliDCSSensor * sensor = 0; + TObject *osensor=0; + if (type==0) osensor = ((*map)("fCavernPressure")); + if (type==1) osensor = ((*map)("fP2Pressure")); + sensor =dynamic_cast(osensor); + if (sensor) return sensor; + } + // + // If not map try to get it from the GRPObject + // + AliGRPObject * grpRun = dynamic_cast(fGRPArray.At(run)); if (!grpRun) { GetRunInformations(run); grpRun = dynamic_cast(fGRPArray.At(run)); if (!grpRun) return 0; } AliDCSSensor * sensor = grpRun->GetCavernAtmosPressure(); - return sensor; - + if (type==1) sensor = grpRun->GetSurfaceAtmosPressure(); + return sensor; } AliTPCSensorTempArray * AliTPCcalibDB::GetTemperatureSensor(Int_t run){ @@ -785,26 +864,75 @@ AliDCSSensorArray * AliTPCcalibDB::GetGoofieSensors(Int_t run){ return goofieArray; } +AliDCSSensorArray * AliTPCcalibDB::GetVoltageSensors(Int_t run){ + // + // Get temperature sensor array + // + AliDCSSensorArray * voltageArray = (AliDCSSensorArray *)fVoltageArray.At(run); + if (!voltageArray) { + GetRunInformations(run); + voltageArray = (AliDCSSensorArray *)fVoltageArray.At(run); + } + return voltageArray; +} +AliTPCCalibVdrift * AliTPCcalibDB::GetVdrift(Int_t run){ + // + // Get the interface to the the vdrift + // + AliTPCCalibVdrift * vdrift = (AliTPCCalibVdrift*)fVdriftArray.At(run); + if (!vdrift) { + GetRunInformations(run); + vdrift= (AliTPCCalibVdrift*)fVdriftArray.At(run); + } + return vdrift; +} -Float_t AliTPCcalibDB::GetPressure(Int_t timeStamp, Int_t run){ +Float_t AliTPCcalibDB::GetChamberHighVoltage(Int_t timeStamp, Int_t run, Int_t sector) { + // + // return the chamber HV for given run and time: 0-35 IROC, 36-72 OROC + // + TTimeStamp stamp(timeStamp); + AliDCSSensorArray* voltageArray = AliTPCcalibDB::Instance()->GetVoltageSensors(run); + if (!voltageArray) return 0; + AliDCSSensor *sensor = voltageArray->GetSensor((sector+1)*3); + if (!sensor) return 0; + return sensor->GetValue(stamp); +} + +Float_t AliTPCcalibDB::GetPressure(Int_t timeStamp, Int_t run, Int_t type){ // // GetPressure for given time stamp and runt // TTimeStamp stamp(timeStamp); - AliDCSSensor * sensor = GetPressureSensor(run); + AliDCSSensor * sensor = Instance()->GetPressureSensor(run,type); if (!sensor) return 0; - if (!sensor->GetFit()) return 0; return sensor->GetValue(stamp); } +Float_t AliTPCcalibDB::GetValueGoofie(Int_t timeStamp, Int_t run, Int_t type){ + // + // GetPressure for given time stamp and runt + // + TTimeStamp stamp(timeStamp); + AliDCSSensorArray* goofieArray = AliTPCcalibDB::Instance()->GetGoofieSensors(run); + if (!goofieArray) return 0; + AliDCSSensor *sensor = goofieArray->GetSensor(type); + return sensor->GetValue(stamp); +} + + + + + + Bool_t AliTPCcalibDB::GetTemperatureFit(Int_t timeStamp, Int_t run, Int_t side,TVectorD& fit){ // // // TTimeStamp tstamp(timeStamp); - AliTPCSensorTempArray* tempArray = GetTemperatureSensor(run); + AliTPCSensorTempArray* tempArray = Instance()->GetTemperatureSensor(run); if (! tempArray) return kFALSE; AliTPCTempMap * tempMap = new AliTPCTempMap(tempArray); TLinearFitter * fitter = tempMap->GetLinearFitter(3,side,tstamp); @@ -818,8 +946,33 @@ Bool_t AliTPCcalibDB::GetTemperatureFit(Int_t timeStamp, Int_t run, Int_t side, return kTRUE; } +Float_t AliTPCcalibDB::GetTemperature(Int_t timeStamp, Int_t run, Int_t side){ + // + // + // + TVectorD vec(5); + if (side==0) { + GetTemperatureFit(timeStamp,run,0,vec); + return vec[0]; + } + if (side==1){ + GetTemperatureFit(timeStamp,run,0,vec); + return vec[0]; + } + return 0; +} +Double_t AliTPCcalibDB::GetPTRelative(UInt_t timeSec, Int_t run, Int_t side){ + // + // Get relative P/T + // time - absolute time + // run - run number + // side - 0 - A side 1-C side + AliTPCCalibVdrift * vdrift = Instance()->GetVdrift(run); + if (!vdrift) return 0; + return vdrift->GetPTRelative(timeSec,side); +} void AliTPCcalibDB::ProcessEnv(const char * runList){ @@ -962,3 +1115,38 @@ void AliTPCcalibDB::ProcessGoofie( AliDCSSensorArray* goofieArray, TVectorD & ve } } + + +AliGRPObject * AliTPCcalibDB::MakeGRPObjectFromMap(TMap *map){ + // + // Function to covert old GRP run information from TMap to GRPObject + // + // TMap * map = AliTPCcalibDB::GetGRPMap(52406); + if (!map) return 0; + AliDCSSensor * sensor = 0; + TObject *osensor=0; + osensor = ((*map)("fP2Pressure")); + sensor =dynamic_cast(osensor); + // + if (!sensor) return 0; + // + AliDCSSensor * sensor2 = new AliDCSSensor(*sensor); + osensor = ((*map)("fCavernPressure")); + TGraph * gr = new TGraph(2); + gr->GetX()[0]= -100000.; + gr->GetX()[1]= 1000000.; + gr->GetY()[0]= atof(osensor->GetName()); + gr->GetY()[1]= atof(osensor->GetName()); + sensor2->SetGraph(gr); + sensor2->SetFit(0); + + + AliGRPObject *grpRun = new AliGRPObject; + grpRun->ReadValuesFromMap(map); + grpRun->SetCavernAtmosPressure(sensor2); + grpRun->SetSurfaceAtmosPressure(sensor); + return grpRun; +} + + +