+ // fits the anode dependence of drift speed
+
+ Float_t rangeForMax[2]={78.,178.};
+ PolyFit(fPolDegree);
+ fActualPolDegree=fPolDegree;
+ if(fPolDegree==3){
+ Double_t deltasq=fParam[2]*fParam[2]-3*fParam[1]*fParam[3];
+ Double_t zero1=-999.;
+ Double_t zero2=-999.;
+ if(deltasq>=0. && TMath::Abs(fParam[3])>0.){
+ Double_t delta=TMath::Sqrt(deltasq);
+ zero1=(-fParam[2]+delta)/3./fParam[3];
+ zero2=(-fParam[2]-delta)/3./fParam[3];
+ }
+ Bool_t twoZeroes=kFALSE;
+ Bool_t oneZero=kFALSE;
+ if(zero1>0. && zero1<256. && zero2>0. && zero2<256.) twoZeroes=kTRUE;
+ if(zero1>rangeForMax[0] && zero1<rangeForMax[1]) oneZero=kTRUE;
+ if(zero2>rangeForMax[0] && zero2<rangeForMax[1]) oneZero=kTRUE;
+ if(!oneZero || twoZeroes){
+ PolyFit(2);
+ Double_t xmax=-999.;
+ if(fParam[2]<0.) xmax=-fParam[1]/2./fParam[2];
+ if(xmax>rangeForMax[0] && xmax<rangeForMax[1]){
+ fActualPolDegree=2;
+ }else{
+ Double_t averSpeed=0.;
+ Double_t sumWei=0.;
+ Int_t nUsedPts=0;
+ for(Int_t jpad=fFirstPadForFit; jpad<=fLastPadForFit; jpad++){
+ if(fDriftSpeed[jpad]>0 && GetInjPadStatus(jpad)>fPadStatusCutForFit){
+ Double_t wei=1./fDriftSpeedErr[jpad]/fDriftSpeedErr[jpad];
+ averSpeed+=wei*fDriftSpeed[jpad];
+ sumWei+=wei;
+ nUsedPts++;
+ }
+ }
+ if(sumWei>0.) averSpeed/=sumWei;
+ if(nUsedPts<fPolDegree+1) averSpeed=0;
+ fParam[0]=averSpeed;
+ for(Int_t i=1; i < fPolDegree+1; i++) fParam[i]=0.;
+ fActualPolDegree=0;
+ }
+ }
+ }
+}
+//______________________________________________________________________
+void AliITSOnlineSDDInjectors::PolyFit(Int_t degree){