#include "TSystem.h"
#include "TObject.h"
#include "TMath.h"
#include "AliTPCTempMap.h"
#include "AliTPCSensorTempArray.h"
#include "AliTPCCalibVdrift.h"
ClassImp(AliTPCCalibVdrift)
namespace paramDefinitions {
const Double_t kstdE = 400;
const Double_t kstdT = 293;
const Double_t kstdP = 744;
const Double_t kstdCco2 = 9.52;
const Double_t kstdCn2 = 4.76;
const Double_t kstdVdrift = 2.57563;
const Double_t kdvdE = 0.24;
const Double_t kdvdT = 0.30;
const Double_t kdvdP = -0.13;
const Double_t kdvdCco2 = -6.60;
const Double_t kdvdCn2 = -1.74;
const Double_t kdvdE2nd = -0.00107628;
const Double_t kdvdT2nd = -0.00134441;
const Double_t kdvdP2nd = 0.000135325;
const Double_t kdvdCco22nd = 0.328761;
const Double_t kdvdCn22nd = 0.151605;
const Double_t torrTokPascal = 0.750061683;
Double_t krho = 0.934246;
Double_t kg = 9.81;
const Double_t kKelvin =273.15;
const Double_t kNominalTemp =19.03;
const Double_t kNominalPress =973.9;
}
using namespace paramDefinitions;
AliTPCCalibVdrift::AliTPCCalibVdrift():
TNamed(),
fSensTemp(0),
fSensPres(0),
fTempMap(0),
fSensGasComp(0),
fNominalTemp(0),
fNominalPress(0)
{
}
AliTPCCalibVdrift::AliTPCCalibVdrift(AliTPCSensorTempArray *SensTemp, AliDCSSensor *SensPres, TObject *SensGasComp):
TNamed(),
fSensTemp(0),
fSensPres(0),
fTempMap(0),
fSensGasComp(0),
fNominalTemp(0),
fNominalPress(0)
{
fSensTemp = SensTemp;
fSensPres = SensPres;
if (fSensTemp) {
fTempMap = new AliTPCTempMap(fSensTemp);
} else {
fTempMap = 0;
}
fSensGasComp = SensGasComp;
fNominalTemp = kNominalTemp;
fNominalPress= kNominalPress;
}
AliTPCCalibVdrift::AliTPCCalibVdrift(const AliTPCCalibVdrift& source) :
TNamed(source),
fSensTemp(source.fSensTemp),
fSensPres(source.fSensPres),
fTempMap(source.fTempMap),
fSensGasComp(source.fSensGasComp),
fNominalTemp(source.fNominalTemp),
fNominalPress(source.fNominalPress)
{
}
AliTPCCalibVdrift& AliTPCCalibVdrift::operator=(const AliTPCCalibVdrift& source){
if (&source == this) return *this;
new (this) AliTPCCalibVdrift(source);
return *this;
}
AliTPCCalibVdrift::~AliTPCCalibVdrift()
{
}
Double_t AliTPCCalibVdrift::GetPTRelative(UInt_t absTimeSec, Int_t side){
TTimeStamp tstamp(absTimeSec);
if (!fSensPres||!fSensTemp) return 0;
Double_t pressure = fSensPres->GetValue(tstamp);
TLinearFitter * fitter = fTempMap->GetLinearFitter(3,side,tstamp);
if (!fitter) return 0;
TVectorD vec;
fitter->GetParameters(vec);
delete fitter;
if (vec[0]<10) return 0;
Double_t temperature = vec[0];
Double_t tpnom = (fNominalTemp+kKelvin)/(fNominalPress);
Double_t tpmeasured = (temperature+kKelvin)/(pressure);
Double_t result = (tpmeasured-tpnom)/tpnom;
return result;
}
Double_t AliTPCCalibVdrift::VdriftLinearHyperplaneApprox(Double_t dE, Double_t dT, Double_t dP, Double_t dCco2, Double_t dCn2)
{
Double_t termE = dE*kdvdE + TMath::Power(dE,2)*kdvdE2nd;
Double_t termT = dT*kdvdT + TMath::Power(dT,2)*kdvdT2nd;
Double_t termP = dP*kdvdP + TMath::Power(dP,2)*kdvdP2nd;
Double_t termCo2 = dCco2*kdvdCco2 + TMath::Power(dCco2,2)*kdvdCco22nd;
Double_t termN2 = dCn2*kdvdCn2 + TMath::Power(dCn2,2)*kdvdCn22nd;
Double_t vdChange = termE+termT+termP+termCo2+termN2;
return vdChange;
}
Double_t AliTPCCalibVdrift::GetVdriftNominal()
{
return kstdVdrift;
}
Double_t AliTPCCalibVdrift::GetVdriftChange(Double_t x, Double_t y, Double_t z, UInt_t absTimeSec)
{
TTimeStamp tstamp(absTimeSec);
Double_t dE = 0.23;
AliTPCTempMap *tempMap = fTempMap;
Double_t dT = 0;
if (fTempMap) {
Double_t tempValue = tempMap->GetTemperature(x, y, z, tstamp);
dT = tempValue + 273.15 - kstdT;
}
Double_t dP = 0;
if (fSensPres==0) {
dP = - krho*kg*y/10000*torrTokPascal;
} else {
Double_t pressure = fSensPres->GetValue(tstamp) + 0.4;
dP = (pressure - krho*kg*y/10000) * torrTokPascal - kstdP;
}
Double_t dCco2 = 0;
Double_t dCn2 = 0;
Double_t vdChange = VdriftLinearHyperplaneApprox(dE, dT, dP, dCco2, dCn2);
return vdChange;
}
Double_t AliTPCCalibVdrift::GetMeanZVdriftChange(Double_t x, Double_t y, UInt_t absTimeSec)
{
Int_t nPoints = 5;
Double_t vdriftSum = 0;
for (Int_t i = 0; i<nPoints; i++) {
Double_t z = (Double_t)i/(nPoints-1)*500-250;
vdriftSum = vdriftSum + GetVdriftChange(x, y, z, absTimeSec);
}
Double_t meanZVdrift = vdriftSum/nPoints;
return meanZVdrift;
}
TGraph *AliTPCCalibVdrift::MakeGraphMeanZVdriftChange(Double_t x, Double_t y, Int_t nPoints)
{
UInt_t startTime = fSensTemp->GetStartTime();
UInt_t endTime = fSensTemp->GetEndTime();
UInt_t stepTime = (endTime - startTime)/nPoints;
Double_t *xvec = new Double_t[nPoints];
Double_t *yvec = new Double_t[nPoints];
for (Int_t ip=0; ip<nPoints; ip++) {
xvec[ip] = startTime+ip*stepTime;
yvec[ip] = GetMeanZVdriftChange(x, y, fSensTemp->GetStartTime().GetSec() + ip*stepTime);
}
TGraph *graph = new TGraph(nPoints,xvec,yvec);
delete [] xvec;
delete [] yvec;
graph->GetXaxis()->SetTimeDisplay(1);
graph->GetXaxis()->SetLabelOffset(0.02);
graph->GetXaxis()->SetTimeFormat("#splitline{%d/%m}{%H:%M}");
return graph;
}
AliTPCCalibVdrift.cxx:100 AliTPCCalibVdrift.cxx:101 AliTPCCalibVdrift.cxx:102 AliTPCCalibVdrift.cxx:103 AliTPCCalibVdrift.cxx:104 AliTPCCalibVdrift.cxx:105 AliTPCCalibVdrift.cxx:106 AliTPCCalibVdrift.cxx:107 AliTPCCalibVdrift.cxx:108 AliTPCCalibVdrift.cxx:109 AliTPCCalibVdrift.cxx:110 AliTPCCalibVdrift.cxx:111 AliTPCCalibVdrift.cxx:112 AliTPCCalibVdrift.cxx:113 AliTPCCalibVdrift.cxx:114 AliTPCCalibVdrift.cxx:115 AliTPCCalibVdrift.cxx:116 AliTPCCalibVdrift.cxx:117 AliTPCCalibVdrift.cxx:118 AliTPCCalibVdrift.cxx:119 AliTPCCalibVdrift.cxx:120 AliTPCCalibVdrift.cxx:121 AliTPCCalibVdrift.cxx:122 AliTPCCalibVdrift.cxx:123 AliTPCCalibVdrift.cxx:124 AliTPCCalibVdrift.cxx:125 AliTPCCalibVdrift.cxx:126 AliTPCCalibVdrift.cxx:127 AliTPCCalibVdrift.cxx:128 AliTPCCalibVdrift.cxx:129 AliTPCCalibVdrift.cxx:130 AliTPCCalibVdrift.cxx:131 AliTPCCalibVdrift.cxx:132 AliTPCCalibVdrift.cxx:133 AliTPCCalibVdrift.cxx:134 AliTPCCalibVdrift.cxx:135 AliTPCCalibVdrift.cxx:136 AliTPCCalibVdrift.cxx:137 AliTPCCalibVdrift.cxx:138 AliTPCCalibVdrift.cxx:139 AliTPCCalibVdrift.cxx:140 AliTPCCalibVdrift.cxx:141 AliTPCCalibVdrift.cxx:142 AliTPCCalibVdrift.cxx:143 AliTPCCalibVdrift.cxx:144 AliTPCCalibVdrift.cxx:145 AliTPCCalibVdrift.cxx:146 AliTPCCalibVdrift.cxx:147 AliTPCCalibVdrift.cxx:148 AliTPCCalibVdrift.cxx:149 AliTPCCalibVdrift.cxx:150 AliTPCCalibVdrift.cxx:151 AliTPCCalibVdrift.cxx:152 AliTPCCalibVdrift.cxx:153 AliTPCCalibVdrift.cxx:154 AliTPCCalibVdrift.cxx:155 AliTPCCalibVdrift.cxx:156 AliTPCCalibVdrift.cxx:157 AliTPCCalibVdrift.cxx:158 AliTPCCalibVdrift.cxx:159 AliTPCCalibVdrift.cxx:160 AliTPCCalibVdrift.cxx:161 AliTPCCalibVdrift.cxx:162 AliTPCCalibVdrift.cxx:163 AliTPCCalibVdrift.cxx:164 AliTPCCalibVdrift.cxx:165 AliTPCCalibVdrift.cxx:166 AliTPCCalibVdrift.cxx:167 AliTPCCalibVdrift.cxx:168 AliTPCCalibVdrift.cxx:169 AliTPCCalibVdrift.cxx:170 AliTPCCalibVdrift.cxx:171 AliTPCCalibVdrift.cxx:172 AliTPCCalibVdrift.cxx:173 AliTPCCalibVdrift.cxx:174 AliTPCCalibVdrift.cxx:175 AliTPCCalibVdrift.cxx:176 AliTPCCalibVdrift.cxx:177 AliTPCCalibVdrift.cxx:178 AliTPCCalibVdrift.cxx:179 AliTPCCalibVdrift.cxx:180 AliTPCCalibVdrift.cxx:181 AliTPCCalibVdrift.cxx:182 AliTPCCalibVdrift.cxx:183 AliTPCCalibVdrift.cxx:184 AliTPCCalibVdrift.cxx:185 AliTPCCalibVdrift.cxx:186 AliTPCCalibVdrift.cxx:187 AliTPCCalibVdrift.cxx:188 AliTPCCalibVdrift.cxx:189 AliTPCCalibVdrift.cxx:190 AliTPCCalibVdrift.cxx:191 AliTPCCalibVdrift.cxx:192 AliTPCCalibVdrift.cxx:193 AliTPCCalibVdrift.cxx:194 AliTPCCalibVdrift.cxx:195 AliTPCCalibVdrift.cxx:196 AliTPCCalibVdrift.cxx:197 AliTPCCalibVdrift.cxx:198 AliTPCCalibVdrift.cxx:199 AliTPCCalibVdrift.cxx:200 AliTPCCalibVdrift.cxx:201 AliTPCCalibVdrift.cxx:202 AliTPCCalibVdrift.cxx:203 AliTPCCalibVdrift.cxx:204 AliTPCCalibVdrift.cxx:205 AliTPCCalibVdrift.cxx:206 AliTPCCalibVdrift.cxx:207 AliTPCCalibVdrift.cxx:208 AliTPCCalibVdrift.cxx:209 AliTPCCalibVdrift.cxx:210 AliTPCCalibVdrift.cxx:211 AliTPCCalibVdrift.cxx:212 AliTPCCalibVdrift.cxx:213 AliTPCCalibVdrift.cxx:214 AliTPCCalibVdrift.cxx:215 AliTPCCalibVdrift.cxx:216 AliTPCCalibVdrift.cxx:217 AliTPCCalibVdrift.cxx:218 AliTPCCalibVdrift.cxx:219 AliTPCCalibVdrift.cxx:220 AliTPCCalibVdrift.cxx:221 AliTPCCalibVdrift.cxx:222 AliTPCCalibVdrift.cxx:223 AliTPCCalibVdrift.cxx:224 AliTPCCalibVdrift.cxx:225 AliTPCCalibVdrift.cxx:226 AliTPCCalibVdrift.cxx:227 AliTPCCalibVdrift.cxx:228 AliTPCCalibVdrift.cxx:229 AliTPCCalibVdrift.cxx:230 AliTPCCalibVdrift.cxx:231 AliTPCCalibVdrift.cxx:232 AliTPCCalibVdrift.cxx:233 AliTPCCalibVdrift.cxx:234 AliTPCCalibVdrift.cxx:235 AliTPCCalibVdrift.cxx:236 AliTPCCalibVdrift.cxx:237 AliTPCCalibVdrift.cxx:238 AliTPCCalibVdrift.cxx:239 AliTPCCalibVdrift.cxx:240 AliTPCCalibVdrift.cxx:241 AliTPCCalibVdrift.cxx:242 AliTPCCalibVdrift.cxx:243 AliTPCCalibVdrift.cxx:244 AliTPCCalibVdrift.cxx:245 AliTPCCalibVdrift.cxx:246 AliTPCCalibVdrift.cxx:247 AliTPCCalibVdrift.cxx:248 AliTPCCalibVdrift.cxx:249 AliTPCCalibVdrift.cxx:250 AliTPCCalibVdrift.cxx:251 AliTPCCalibVdrift.cxx:252 AliTPCCalibVdrift.cxx:253 AliTPCCalibVdrift.cxx:254 AliTPCCalibVdrift.cxx:255 AliTPCCalibVdrift.cxx:256 AliTPCCalibVdrift.cxx:257 AliTPCCalibVdrift.cxx:258 AliTPCCalibVdrift.cxx:259 AliTPCCalibVdrift.cxx:260 AliTPCCalibVdrift.cxx:261 AliTPCCalibVdrift.cxx:262 AliTPCCalibVdrift.cxx:263 AliTPCCalibVdrift.cxx:264 AliTPCCalibVdrift.cxx:265 AliTPCCalibVdrift.cxx:266 AliTPCCalibVdrift.cxx:267 AliTPCCalibVdrift.cxx:268 AliTPCCalibVdrift.cxx:269 AliTPCCalibVdrift.cxx:270 AliTPCCalibVdrift.cxx:271 AliTPCCalibVdrift.cxx:272 AliTPCCalibVdrift.cxx:273 AliTPCCalibVdrift.cxx:274 AliTPCCalibVdrift.cxx:275 AliTPCCalibVdrift.cxx:276 AliTPCCalibVdrift.cxx:277 AliTPCCalibVdrift.cxx:278 AliTPCCalibVdrift.cxx:279 AliTPCCalibVdrift.cxx:280 AliTPCCalibVdrift.cxx:281 AliTPCCalibVdrift.cxx:282 AliTPCCalibVdrift.cxx:283 AliTPCCalibVdrift.cxx:284 AliTPCCalibVdrift.cxx:285 AliTPCCalibVdrift.cxx:286 AliTPCCalibVdrift.cxx:287 AliTPCCalibVdrift.cxx:288 AliTPCCalibVdrift.cxx:289 AliTPCCalibVdrift.cxx:290 AliTPCCalibVdrift.cxx:291 AliTPCCalibVdrift.cxx:292 AliTPCCalibVdrift.cxx:293 AliTPCCalibVdrift.cxx:294 AliTPCCalibVdrift.cxx:295 AliTPCCalibVdrift.cxx:296 AliTPCCalibVdrift.cxx:297 AliTPCCalibVdrift.cxx:298 AliTPCCalibVdrift.cxx:299 AliTPCCalibVdrift.cxx:300 AliTPCCalibVdrift.cxx:301 AliTPCCalibVdrift.cxx:302 AliTPCCalibVdrift.cxx:303 AliTPCCalibVdrift.cxx:304 AliTPCCalibVdrift.cxx:305 AliTPCCalibVdrift.cxx:306 AliTPCCalibVdrift.cxx:307 AliTPCCalibVdrift.cxx:308 AliTPCCalibVdrift.cxx:309 AliTPCCalibVdrift.cxx:310 AliTPCCalibVdrift.cxx:311 AliTPCCalibVdrift.cxx:312 AliTPCCalibVdrift.cxx:313 AliTPCCalibVdrift.cxx:314 AliTPCCalibVdrift.cxx:315 AliTPCCalibVdrift.cxx:316 AliTPCCalibVdrift.cxx:317