-
-TVectorD * AliTPCcalibTracksGain::MakeQPosNorm(TTree * chain0, Int_t ipad, Bool_t isMax, Int_t maxPoints, Int_t verbose){
- //
- // Input parameters
- // chain0 - the tree with information -Debug stream
- // ipad - 0 IROC
- // - 1 OROC medium
- // - 2 OROC LONG
- // isMax - kFALSE - total charge param
- // kTRUE - Max charge param
- //
- // maxPoints - number of points for fit
- //
- // verbose -
- //
- /* e.g
- ipad=0
- isMax=kTRUE;
- maxPoints=1000000;
- */
- // Make Q normalization as function of following parameters
- // 1 - dp - relative pad position
- // 2 - dt - relative time position
- // 3 - di - drift length (norm to 1);
- // 4 - dq0 - Tot/Max charge
- // 5 - dq1 - Max/Tot charge
- // 6 - sy - sigma y - shape
- // 7 - sz - sigma z - shape
- //
- // Coeficient of Taylor expansion fitted
- // Fit parameters returned as TVectorD
- // Fit parameters to be used in corresponding correction function
- // in AliTPCclusterParam
- //
- //
- TStatToolkit toolkit;
- Double_t chi2;
- TVectorD fitParam;
- TMatrixD covMatrix;
- Int_t npoints;
- TCut cutA("dedge>3&&fraction2<0.7");
- chain0->SetAlias("dp","((Cl.fPad-int(Cl.fPad)-0.5)/0.5)");
- chain0->SetAlias("dt","((Cl.fTimeBin-int(Cl.fTimeBin)-0.5)/0.5)");
- chain0->SetAlias("di","(sqrt(1.-abs(Cl.fZ)/250.))");
- chain0->SetAlias("dq0","(0.2*(Cl.fQ+2)/(Cl.fMax+2))");
- chain0->SetAlias("dq1","(5*(Cl.fMax+2)/(Cl.fQ+2))");
- chain0->SetAlias("sy","(0.32/sqrt(0.01^2+Cl.fSigmaY2))");
- chain0->SetAlias("sz","(0.32/sqrt(0.01^2+Cl.fSigmaZ2))");
- //
- TString fstring="";
- fstring+="dp++"; //1
- fstring+="dt++"; //2
- fstring+="dp*dp++"; //3
- fstring+="dt*dt++"; //4
- fstring+="dt*dt*dt++"; //5
- fstring+="dp*dt++"; //6
- fstring+="dp*dt*dt++"; //7
- fstring+="(dq0)++"; //8
- fstring+="(dq1)++"; //9
- //
- //
- fstring+="dp*dp*(di)++"; //10
- fstring+="dt*dt*(di)++"; //11
- fstring+="dp*dp*sy++"; //12
- fstring+="dt*sz++"; //13
- fstring+="dt*dt*sz++"; //14
- fstring+="dt*dt*dt*sz++"; //15
- //
- fstring+="dp*dp*1*sy*sz++"; //16
- fstring+="dt*sy*sz++"; //17
- fstring+="dt*dt*sy*sz++"; //18
- fstring+="dt*dt*dt*sy*sz++"; //19
- //
- fstring+="dp*dp*(dq0)++"; //20
- fstring+="dt*1*(dq0)++"; //21
- fstring+="dt*dt*(dq0)++"; //22
- fstring+="dt*dt*dt*(dq0)++"; //23
- //
- fstring+="dp*dp*(dq1)++"; //24
- fstring+="dt*(dq1)++"; //25
- fstring+="dt*dt*(dq1)++"; //26
- fstring+="dt*dt*dt*(dq1)++"; //27
-
- TString var;
- if (isMax) var = "Cl.fMax/gain/dedxM.fElements[2]";
- if (!isMax) var = "Cl.fQ/gain/dedxQ.fElements[2]";
- TString cutP="IPad==";
- cutP+=ipad;
- //
- TString *strq0 = toolkit.FitPlane(chain0,var.Data(),fstring.Data(), cutP.Data()+cutA, chi2,npoints,fitParam,covMatrix,-1,0,maxPoints);
- //
- //
- if (verbose){
- printf("Chi2/npoints = %f",TMath::Sqrt(chi2/npoints));
- printf("\nFit function\n:%s\n",strq0->Data());
- }
- TVectorD *vec = new TVectorD(fitParam);
- return vec;
-}
-
-void AliTPCcalibTracksGain::MakeQPosNormAll(TTree * chain, AliTPCClusterParam * param, Int_t maxPoints, Int_t verbose){
- //
- // Fill the content of the of the AliTPCclusterParam
- // with fitted values of corrections
- //
- param->fPosQTnorm[0] = MakeQPosNorm(chain,0,kTRUE,100000,kTRUE);
- param->fPosQTnorm[1] = MakeQPosNorm(chain,1,kTRUE,100000,kTRUE);
- param->fPosQTnorm[2] = MakeQPosNorm(chain,1,kTRUE,100000,kTRUE);
- //
- param->fPosQMnorm[0] = MakeQPosNorm(chain,0,kFALSE,100000,kTRUE);
- param->fPosQMnorm[1] = MakeQPosNorm(chain,1,kFALSE,100000,kTRUE);
- param->fPosQMnorm[2] = MakeQPosNorm(chain,2,kFALSE,100000,kTRUE);
-}
-
-
-
-/*
-
- Position correction fit:
- //
-TStatToolkit toolkit;
-Double_t chi2;
-TVectorD fitParam;
-TMatrixD covMatrix;
-Int_t npoints;
-//
-TCut cutA("dedge>3&&fraction2<0.7");
-chain0->SetAlias("dp","((Cl.fPad-int(Cl.fPad)-0.5)/0.5)");
-chain0->SetAlias("dt","((Cl.fTimeBin-int(Cl.fTimeBin)-0.5)/0.5)");
-chain0->SetAlias("di","(sqrt(1.-abs(Cl.fZ)/250.))");
-chain0->SetAlias("dq0","(0.2*(Cl.fQ+2)/(Cl.fMax+2))");
-chain0->SetAlias("dq1","(5*(Cl.fMax+2)/(Cl.fQ+2))");
-chain0->SetAlias("sy","(0.2/sqrt(0.01^2+Cl.fSigmaY2))");
-chain0->SetAlias("sz","(0.2/sqrt(0.01^2+Cl.fSigmaZ2))");
-
-TString fstring="";
-
-fstring+="dp++"; //1
-fstring+="dt++"; //2
-fstring+="dp*dp++"; //3
-fstring+="dt*dt++"; //4
-fstring+="dt*dt*dt++"; //5
-fstring+="dp*dt++"; //6
-fstring+="dp*dt*dt++"; //7
-fstring+="(dq0)++"; //8
-fstring+="(dq1)++"; //9
-//
-//
-fstring+="dp*dp*(di)++"; //10
-fstring+="dt*dt*(di)++"; //11
-fstring+="dp*dp*sy++"; //12
-fstring+="dt*sz++"; //13
-fstring+="dt*dt*sz++"; //14
-fstring+="dt*dt*dt*sz++"; //15
-//
-fstring+="dp*dp*1*sy*sz++"; //16
-fstring+="dt*sy*sz++"; //17
-fstring+="dt*dt*sy*sz++"; //18
-fstring+="dt*dt*dt*sy*sz++"; //19
-//
-fstring+="dp*dp*(dq0)++"; //20
-fstring+="dt*1*(dq0)++"; //21
-fstring+="dt*dt*(dq0)++"; //22
-fstring+="dt*dt*dt*(dq0)++"; //23
-
-fstring+="dp*dp*(dq1)++"; //24
-fstring+="dt*(dq1)++"; //25
-fstring+="dt*dt*(dq1)++"; //26
-fstring+="dt*dt*dt*(dq1)++"; //27
-
-
- TString *strq0 = toolkit.FitPlane(chain0,"Cl.fMax/gain/dedxM.fElements[2]",fstring->Data(), "IPad==0"+cutA, chi2,npoints,fitParam,covMatrix,-1,0,200000);
- TString *strqt0 = toolkit.FitPlane(chain0,"Cl.fQ/gain/dedxQ.fElements[2]",fstring->Data(), "IPad==0"+cutA, chi2,npoints,fitParam,covMatrix,-1,0,200000);
-
- chain0->SetAlias("qcorM0",strq0->Data());
- chain0->SetAlias("qcorT0",strqt0->Data());
-//chain0->SetAlias("mmqcorM0","min(max(qcorM0,0.75),1.15)");
- chain0->Draw("(Cl.fMax/gain/dedxM.fElements[2]):min(max(qcorM0,0.75),1.15)","IPad==0"+cutA,"prof",100000)
-
- fraction05 -
- sigma 0.2419
- sigma fit 0.2302
- sigma fit with shape 0.2257
- fraction 07
- qtot sigma 0.322
- qmax sigma 0.292
- qmax sigma fit 0.2702
- qmax sigma fit+ratio 0.2638
-
-*/
-