+
+
+ for(j=0; j<(np2)-1; j++) {
+ for(k=0; k<(np1)-1; k++) {
+ dphi=TMath::Abs(phi1[k]-phi2[j]);
+ if(dphi>180) dphi = 360-dphi;
+ if(dphi>DeltaPhiXY) continue;
+ if(TMath::Abs((Z1[k]-(Z2[j]-Z1[k])/((r2[j]/r1[k])-1))-fPosition[2])
+ <4*fResolution[2]) {
+ hITSXv->Fill(Vzero[0]+(X2[j]-((X2[j]-X1[k])/(Y2[j]-Y1[k]))*Y2[j]));
+ hITSYv->Fill(Vzero[1]+(Y2[j]-((Y2[j]-Y1[k])/(X2[j]-X1[k]))*X2[j]));
+ }
+ }
+ }
+
+ TF1 *fx = new TF1
+ ("fx","([0]*exp(-0.5*((x-[1])/[2])*((x-[1])/[2])))+[3]",Vzero[0]-0.5,Vzero[0]+0.5);
+
+ max=(Int_t) hITSXv->GetMaximum();
+ BinMax=hITSXv->GetMaximumBin();
+ sigma=0;
+ f1=f2=0;
+ for(i=0;i<nbinxy;i++) VectorBinXY[i]=(Int_t)hITSXv->GetBinContent(i);
+ for(i=0;i<10;i++) f1=f1+VectorBinXY[i]/10;
+ for(i=nbinxy-10;i<nbinxy;i++) f2=f2+VectorBinXY[i]/10;
+ MediaFondo=(f1+f2)/2;
+ for(i=0;i<nbinxy;i++) {
+ if(VectorBinXY[i]-MediaFondo>(max-MediaFondo)*0.4 &&
+ VectorBinXY[i]-MediaFondo<(max-MediaFondo)*0.7) {
+ sigma=hITSXv->GetBinCenter(BinMax)-hITSXv->GetBinCenter(i);
+ sigma=TMath::Abs(sigma);
+ if(sigma==0) sigma=0.05;
+ }
+ }
+
+ /*cout << "f1 " <<f1 <<endl;
+ cout << "f2 " <<f2 <<endl;
+ cout << "GetMaximumBin " <<hITSXv->GetMaximumBin() <<endl;
+ cout << "max " << hITSXv->GetBinContent(BinMax)<<endl;
+ cout << "sigma " <<sigma <<endl;
+ cout << "Fondo " << MediaFondo<< endl;
+ cout << "nbinxy " <<nbinxy <<endl;*/
+
+ fx->SetParameter(0,max);
+ fx->SetParameter(1,Vzero[0]);
+ fx->SetParameter(2,sigma);
+ fx->SetParameter(3,MediaFondo);
+
+ hITSXv->Fit("fx","RMEQ0");
+
+ fSNR[0] = fx->GetParameter(0)/fx->GetParameter(3);
+ if(fSNR[0]<0.) {
+ cout << "\nNegative Signal to noise ratio for x!!!" << endl;
+ cout << "The algorithm cannot find the x vertex position." << endl;
+ exit(123456789);
+ }
+ else
+ {
+ fPosition[0]=fx->GetParameter(1);
+ fResolution[0]=fx->GetParError(1);
+ }