} // Row
if(count > 0) mean = mean/count;
}
+ if(mean < 0.1) mean = 0.1;
object->SetValue(detector,mean);
}
const Float_t kDrWidth = AliTRDgeometry::DrThick();
Int_t binmax = 0;
Int_t binmin = 0;
- Double_t *x = new Double_t[5];
- Double_t *y = new Double_t[5];
+ //Double_t *x = new Double_t[5];
+ //Double_t *y = new Double_t[5];
+ Double_t x[5];
+ Double_t y[5];
x[0] = 0.0;
x[1] = 0.0;
x[2] = 0.0;
TF1 * polynome = 0x0;
TF1 * polynomea = 0x0;
TF1 * polynomeb = 0x0;
- Double_t *c = 0x0;
+ Double_t c0 = 0.0;
+ Double_t c1 = 0.0;
+ Double_t c2 = 0.0;
+ Double_t c3 = 0.0;
+ Double_t c4 = 0.0;
// Some variables
TAxis *xpph = projPH->GetXaxis();
y[0] = pentea->GetBinContent(binmax-2);
y[1] = pentea->GetBinContent(binmax-1);
y[2] = pentea->GetBinContent(binmax);
- c = CalculPolynomeLagrange2(x,y);
+ CalculPolynomeLagrange2(x,y,c0,c1,c2,c3,c4);
AliInfo("At the limit for beginning!");
break;
case 2:
y[1] = pentea->GetBinContent(binmax-1);
y[2] = pentea->GetBinContent(binmax);
y[3] = pentea->GetBinContent(binmax+1);
- c = CalculPolynomeLagrange3(x,y);
+ CalculPolynomeLagrange3(x,y,c0,c1,c2,c3,c4);
break;
default:
switch(binmax){
y[0] = pentea->GetBinContent(binmax);
y[1] = pentea->GetBinContent(binmax+1);
y[2] = pentea->GetBinContent(binmax+2);
- c = CalculPolynomeLagrange2(x,y);
+ CalculPolynomeLagrange2(x,y,c0,c1,c2,c3,c4);
break;
case 2:
minnn = pentea->GetBinCenter(binmax-1);
y[1] = pentea->GetBinContent(binmax);
y[2] = pentea->GetBinContent(binmax+1);
y[3] = pentea->GetBinContent(binmax+2);
- c = CalculPolynomeLagrange3(x,y);
+ CalculPolynomeLagrange3(x,y,c0,c1,c2,c3,c4);
break;
default:
minnn = pentea->GetBinCenter(binmax-2);
y[2] = pentea->GetBinContent(binmax);
y[3] = pentea->GetBinContent(binmax+1);
y[4] = pentea->GetBinContent(binmax+2);
- c = CalculPolynomeLagrange4(x,y);
+ CalculPolynomeLagrange4(x,y,c0,c1,c2,c3,c4);
break;
}
break;
if(put) {
polynomeb = new TF1("polb","[0]+[1]*x+[2]*x*x+[3]*x*x*x+[4]*x*x*x*x",minnn,maxxx);
- polynomeb->SetParameters(c[0],c[1],c[2],c[3],c[4]);
+ polynomeb->SetParameters(c0,c1,c2,c3,c4);
Double_t step = (maxxx-minnn)/10000;
Double_t l = minnn;
y[0] = projPH->GetBinContent(binmax-2);
y[1] = projPH->GetBinContent(binmax-1);
y[2] = projPH->GetBinContent(binmax);
- c = CalculPolynomeLagrange2(x,y);
+ CalculPolynomeLagrange2(x,y,c0,c1,c2,c3,c4);
//AliInfo("At the limit for the drift!");
break;
case 1:
y[1] = projPH->GetBinContent(binmax-1);
y[2] = projPH->GetBinContent(binmax);
y[3] = projPH->GetBinContent(binmax+1);
- c = CalculPolynomeLagrange3(x,y);
+ CalculPolynomeLagrange3(x,y,c0,c1,c2,c3,c4);
break;
default:
switch(binmax)
y[0] = projPH->GetBinContent(binmax);
y[1] = projPH->GetBinContent(binmax+1);
y[2] = projPH->GetBinContent(binmax+2);
- c = CalculPolynomeLagrange2(x,y);
+ CalculPolynomeLagrange2(x,y,c0,c1,c2,c3,c4);
break;
case 2:
minn = projPH->GetBinCenter(binmax-1);
y[1] = projPH->GetBinContent(binmax);
y[2] = projPH->GetBinContent(binmax+1);
y[3] = projPH->GetBinContent(binmax+2);
- c = CalculPolynomeLagrange3(x,y);
+ CalculPolynomeLagrange3(x,y,c0,c1,c2,c3,c4);
break;
default:
minn = projPH->GetBinCenter(binmax-2);
y[2] = projPH->GetBinContent(binmax);
y[3] = projPH->GetBinContent(binmax+1);
y[4] = projPH->GetBinContent(binmax+2);
- c = CalculPolynomeLagrange4(x,y);
+ CalculPolynomeLagrange4(x,y,c0,c1,c2,c3,c4);
break;
}
break;
if(put) {
polynomea = new TF1("pola","[0]+[1]*x+[2]*x*x+[3]*x*x*x+[4]*x*x*x*x",minn,maxx);
- polynomea->SetParameters(c[0],c[1],c[2],c[3],c[4]);
+ polynomea->SetParameters(c0,c1,c2,c3,c4);
Double_t step = (maxx-minn)/1000;
Double_t l = minn;
y[3] = pente->GetBinContent(binmin+1);
y[4] = pente->GetBinContent(binmin+2);
//Calcul the polynome de Lagrange
- c = CalculPolynomeLagrange4(x,y);
+ CalculPolynomeLagrange4(x,y,c0,c1,c2,c3,c4);
//richtung +/-
if((pente->GetBinContent(binmin+2) <= pente->GetBinContent(binmin+1)) &&
(pente->GetBinContent(binmin-2) <= pente->GetBinContent(binmin-1))) {
y[2] = pente->GetBinContent(binmin);
y[3] = pente->GetBinContent(binmin+1);
//Calcul the polynome de Lagrange
- c = CalculPolynomeLagrange3(x,y);
+ CalculPolynomeLagrange3(x,y,c0,c1,c2,c3,c4);
//richtung +: nothing
//richtung -
if((pente->GetBinContent(binmin-2) <= pente->GetBinContent(binmin-1))) {
y[2] = pente->GetBinContent(binmin+1);
y[3] = pente->GetBinContent(binmin+2);
//Calcul the polynome de Lagrange
- c = CalculPolynomeLagrange3(x,y);
+ CalculPolynomeLagrange3(x,y,c0,c1,c2,c3,c4);
//richtung +
if((pente->GetBinContent(binmin+2) <= pente->GetBinContent(binmin+1))) {
//AliInfo("polynome 3+ case 2");
y[1] = pente->GetBinContent(binmin+1);
y[2] = pente->GetBinContent(binmin+2);
//Calcul the polynome de Lagrange
- c = CalculPolynomeLagrange2(x,y);
+ CalculPolynomeLagrange2(x,y,c0,c1,c2,c3,c4);
//richtung +
if((pente->GetBinContent(binmin+2) <= pente->GetBinContent(binmin+1))) {
//AliInfo("polynome 2+ false");
y[1] = pente->GetBinContent(binmin);
y[2] = pente->GetBinContent(binmin+1);
//Calcul the polynome de Lagrange
- c = CalculPolynomeLagrange2(x,y);
+ CalculPolynomeLagrange2(x,y,c0,c1,c2,c3,c4);
//richtung +: nothing
//richtung -: nothing
}
y[1] = pente->GetBinContent(binmin-1);
y[2] = pente->GetBinContent(binmin);
//Calcul the polynome de Lagrange
- c = CalculPolynomeLagrange2(x,y);
+ CalculPolynomeLagrange2(x,y,c0,c1,c2,c3,c4);
//AliInfo("At the limit for the drift!");
//fluctuation too big!
//richtung +: nothing
if(put) {
polynome = new TF1("pol","[0]+[1]*x+[2]*x*x+[3]*x*x*x+[4]*x*x*x*x",min,max);
- polynome->SetParameters(c[0],c[1],c[2],c[3],c[4]);
+ polynome->SetParameters(c0,c1,c2,c3,c4);
//AliInfo(Form("GetMinimum of the function %f",polynome->GetMinimumX()));
Double_t step = (max-min)/1000;
Double_t l = min;
pente->Draw();
}
else {
- if(pentea) delete pentea;
- if(pente) delete pente;
+ delete pentea;
+ delete pente;
if(polynome) delete polynome;
if(polynomea) delete polynomea;
if(polynomeb) delete polynomeb;
- if(x) delete [] x;
- if(y) delete [] y;
- if(c) delete [] c;
+ //if(x) delete [] x;
+ //if(y) delete [] y;
if(line) delete line;
}
}
}
//_____________________________________________________________________________
-Double_t *AliTRDCalibraFit::CalculPolynomeLagrange2(const Double_t *x, const Double_t *y) const
+void AliTRDCalibraFit::CalculPolynomeLagrange2(const Double_t *x, const Double_t *y, Double_t &c0, Double_t &c1, Double_t &c2, Double_t &c3, Double_t &c4) const
{
//
// Calcul the coefficients of the polynome passant par ces trois points de degre 2
//
- Double_t *c = new Double_t[5];
Double_t x0 = y[0]/((x[0]-x[1])*(x[0]-x[2]));
Double_t x1 = y[1]/((x[1]-x[0])*(x[1]-x[2]));
Double_t x2 = y[2]/((x[2]-x[0])*(x[2]-x[1]));
- c[4] = 0.0;
- c[3] = 0.0;
- c[2] = x0+x1+x2;
- c[1] = -(x0*(x[1]+x[2])+x1*(x[0]+x[2])+x2*(x[0]+x[1]));
- c[0] = x0*x[1]*x[2]+x1*x[0]*x[2]+x2*x[0]*x[1];
-
- return c;
-
+ c4 = 0.0;
+ c3 = 0.0;
+ c2 = x0+x1+x2;
+ c1 = -(x0*(x[1]+x[2])+x1*(x[0]+x[2])+x2*(x[0]+x[1]));
+ c0 = x0*x[1]*x[2]+x1*x[0]*x[2]+x2*x[0]*x[1];
}
//_____________________________________________________________________________
-Double_t *AliTRDCalibraFit::CalculPolynomeLagrange3(const Double_t *x, const Double_t *y) const
+void AliTRDCalibraFit::CalculPolynomeLagrange3(const Double_t *x, const Double_t *y, Double_t &c0, Double_t &c1, Double_t &c2, Double_t &c3, Double_t &c4) const
{
//
// Calcul the coefficients of the polynome passant par ces quatre points de degre 3
//
- Double_t *c = new Double_t[5];
Double_t x0 = y[0]/((x[0]-x[1])*(x[0]-x[2])*(x[0]-x[3]));
Double_t x1 = y[1]/((x[1]-x[0])*(x[1]-x[2])*(x[1]-x[3]));
Double_t x2 = y[2]/((x[2]-x[0])*(x[2]-x[1])*(x[2]-x[3]));
Double_t x3 = y[3]/((x[3]-x[0])*(x[3]-x[1])*(x[3]-x[2]));
- c[4] = 0.0;
- c[3] = x0+x1+x2+x3;
- c[2] = -(x0*(x[1]+x[2]+x[3])
+ c4 = 0.0;
+ c3 = x0+x1+x2+x3;
+ c2 = -(x0*(x[1]+x[2]+x[3])
+x1*(x[0]+x[2]+x[3])
+x2*(x[0]+x[1]+x[3])
+x3*(x[0]+x[1]+x[2]));
- c[1] = (x0*(x[1]*x[2]+x[1]*x[3]+x[2]*x[3])
+ c1 = (x0*(x[1]*x[2]+x[1]*x[3]+x[2]*x[3])
+x1*(x[0]*x[2]+x[0]*x[3]+x[2]*x[3])
+x2*(x[0]*x[1]+x[0]*x[3]+x[1]*x[3])
+x3*(x[0]*x[1]+x[0]*x[2]+x[1]*x[2]));
- c[0] = -(x0*x[1]*x[2]*x[3]
+ c0 = -(x0*x[1]*x[2]*x[3]
+x1*x[0]*x[2]*x[3]
+x2*x[0]*x[1]*x[3]
+x3*x[0]*x[1]*x[2]);
- return c;
-
-
}
//_____________________________________________________________________________
-Double_t *AliTRDCalibraFit::CalculPolynomeLagrange4(const Double_t *x, const Double_t *y) const
+void AliTRDCalibraFit::CalculPolynomeLagrange4(const Double_t *x, const Double_t *y, Double_t &c0, Double_t &c1, Double_t &c2, Double_t &c3, Double_t &c4) const
{
//
// Calcul the coefficients of the polynome passant par ces cinqs points de degre 4
//
- Double_t *c = new Double_t[5];
Double_t x0 = y[0]/((x[0]-x[1])*(x[0]-x[2])*(x[0]-x[3])*(x[0]-x[4]));
Double_t x1 = y[1]/((x[1]-x[0])*(x[1]-x[2])*(x[1]-x[3])*(x[1]-x[4]));
Double_t x2 = y[2]/((x[2]-x[0])*(x[2]-x[1])*(x[2]-x[3])*(x[2]-x[4]));
Double_t x4 = y[4]/((x[4]-x[0])*(x[4]-x[1])*(x[4]-x[2])*(x[4]-x[3]));
- c[4] = x0+x1+x2+x3+x4;
- c[3] = -(x0*(x[1]+x[2]+x[3]+x[4])
+ c4 = x0+x1+x2+x3+x4;
+ c3 = -(x0*(x[1]+x[2]+x[3]+x[4])
+x1*(x[0]+x[2]+x[3]+x[4])
+x2*(x[0]+x[1]+x[3]+x[4])
+x3*(x[0]+x[1]+x[2]+x[4])
+x4*(x[0]+x[1]+x[2]+x[3]));
- c[2] = (x0*(x[1]*x[2]+x[1]*x[3]+x[1]*x[4]+x[2]*x[3]+x[2]*x[4]+x[3]*x[4])
+ c2 = (x0*(x[1]*x[2]+x[1]*x[3]+x[1]*x[4]+x[2]*x[3]+x[2]*x[4]+x[3]*x[4])
+x1*(x[0]*x[2]+x[0]*x[3]+x[0]*x[4]+x[2]*x[3]+x[2]*x[4]+x[3]*x[4])
+x2*(x[0]*x[1]+x[0]*x[3]+x[0]*x[4]+x[1]*x[3]+x[1]*x[4]+x[3]*x[4])
+x3*(x[0]*x[1]+x[0]*x[2]+x[0]*x[4]+x[1]*x[2]+x[1]*x[4]+x[2]*x[4])
+x4*(x[0]*x[1]+x[0]*x[2]+x[0]*x[3]+x[1]*x[2]+x[1]*x[3]+x[2]*x[3]));
- c[1] = -(x0*(x[1]*x[2]*x[3]+x[1]*x[2]*x[4]+x[1]*x[3]*x[4]+x[2]*x[3]*x[4])
+ c1 = -(x0*(x[1]*x[2]*x[3]+x[1]*x[2]*x[4]+x[1]*x[3]*x[4]+x[2]*x[3]*x[4])
+x1*(x[0]*x[2]*x[3]+x[0]*x[2]*x[4]+x[0]*x[3]*x[4]+x[2]*x[3]*x[4])
+x2*(x[0]*x[1]*x[3]+x[0]*x[1]*x[4]+x[0]*x[3]*x[4]+x[1]*x[3]*x[4])
+x3*(x[0]*x[1]*x[2]+x[0]*x[1]*x[4]+x[0]*x[2]*x[4]+x[1]*x[2]*x[4])
+x4*(x[0]*x[1]*x[2]+x[0]*x[1]*x[3]+x[0]*x[2]*x[3]+x[1]*x[2]*x[3]));
- c[0] = (x0*x[1]*x[2]*x[3]*x[4]
+ c0 = (x0*x[1]*x[2]*x[3]*x[4]
+x1*x[0]*x[2]*x[3]*x[4]
+x2*x[0]*x[1]*x[3]*x[4]
+x3*x[0]*x[1]*x[2]*x[4]
+x4*x[0]*x[1]*x[2]*x[3]);
- return c;
-
-
}
//_____________________________________________________________________________
void AliTRDCalibraFit::NormierungCharge()
}
+
+