LCOV - code coverage report
Current view: top level - ITSMFT/MFT/MFTrec - AliMFTCATrack.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 145 0.7 %
Date: 2016-06-14 17:26:59 Functions: 1 10 10.0 %

          Line data    Source code
       1             : #include "TMath.h"
       2             : #include <TGeoGlobalMagField.h>
       3             : 
       4             : #include "AliMFTCATrack.h"
       5             : #include "AliMFTCACell.h"
       6             : #include "AliMFTTrackExtrap.h"
       7             : 
       8             : #include "AliLog.h"
       9             : 
      10          12 : ClassImp(AliMFTCATrack)
      11             : 
      12             : 
      13             : 
      14             : //___________________________________________________________________________
      15             : 
      16             : AliMFTCATrack::AliMFTCATrack() :
      17           0 : TObject(),
      18           0 : fGID(-1),
      19           0 : fNcells(0),
      20           0 : fStartLayer(-1),
      21           0 : fCellGIDarray(),
      22           0 : fMCflag(0),
      23           0 : fVertX(0.),
      24           0 : fVertY(0.),
      25           0 : fVertZ(0.),
      26           0 : fTheta(0.),
      27           0 : fPhi(0.),
      28           0 : fChiSqX(0.),
      29           0 : fChiSqY(0.),
      30           0 : fMCindex(-1),
      31           0 : fChargeSign(0.),
      32           0 : fPt(0.)
      33           0 : {
      34             :   
      35           0 :   fCells = new TClonesArray("AliMFTCACell", fNDetMax);
      36             :   
      37           0 : }
      38             : 
      39             : //___________________________________________________________________________
      40             : 
      41             : AliMFTCATrack::AliMFTCATrack(const AliMFTCATrack &track) :
      42           0 : TObject(track),
      43           0 : fGID(track.fGID),
      44           0 : fNcells(track.fNcells),
      45           0 : fStartLayer(track.fStartLayer),
      46           0 : fMCflag(track.fMCflag),
      47           0 : fVertX(track.fVertX),
      48           0 : fVertY(track.fVertY),
      49           0 : fVertZ(track.fVertZ),
      50           0 : fTheta(track.fTheta),
      51           0 : fPhi(track.fPhi),
      52           0 : fChiSqX(track.fChiSqX),
      53           0 : fChiSqY(track.fChiSqY),
      54           0 : fMCindex(track.fMCindex),
      55           0 : fChargeSign(track.fChargeSign),
      56           0 : fPt(track.fPt)
      57           0 : {
      58             :   
      59             :   // copy constructor
      60             :   
      61           0 :   fCells = new TClonesArray("AliMFTCACell", fNDetMax);
      62             :   
      63           0 :   for (Int_t icell = 0; icell < track.fNcells; icell++)
      64           0 :   fCellGIDarray[icell] = track.fCellGIDarray[icell];
      65             :   
      66           0 : }
      67             : 
      68             : //___________________________________________________________________________
      69             : 
      70             : AliMFTCATrack& AliMFTCATrack::operator=(const AliMFTCATrack& track) 
      71             : {
      72             : 
      73             :   // assignment operator
      74             : 
      75             :   // check assignement to self
      76           0 :   if (this == &track) return *this;
      77             : 
      78           0 :   TObject::operator=(track);
      79             : 
      80           0 :   fGID = track.fGID;
      81           0 :   fNcells = track.fNcells;
      82           0 :   fStartLayer = track.fStartLayer;
      83           0 :   fCells = new TClonesArray("AliMFTCACell", fNDetMax);
      84           0 :   for (Int_t icell = 0; icell < track.fNcells; icell++)
      85           0 :   fCellGIDarray[icell] = track.fCellGIDarray[icell];
      86           0 :   fMCflag = track.fMCflag;
      87           0 :   fVertX = track.fVertX;
      88           0 :   fVertY = track.fVertY;
      89           0 :   fVertZ = track.fVertZ;
      90           0 :   fTheta = track.fTheta;
      91           0 :   fPhi = track.fPhi;
      92           0 :   fChiSqX = track.fChiSqX;
      93           0 :   fChiSqY = track.fChiSqY;
      94           0 :   fMCindex = track.fMCindex;
      95           0 :   fChargeSign = track.fChargeSign;
      96           0 :   fPt = track.fPt;
      97             : 
      98           0 : }
      99             : 
     100             : //___________________________________________________________________________
     101             : 
     102             : void AliMFTCATrack::Clear(Option_t *) {
     103             :   
     104           0 : }
     105             : //___________________________________________________________________________
     106             : 
     107             : /// Estimate the charge sign
     108             : void  AliMFTCATrack::EvalSignedPt(){
     109             :         const Int_t nMaxh = 100;
     110           0 :         Double_t xTr[nMaxh], yTr[nMaxh], zTr[nMaxh];
     111           0 :         Double_t r[nMaxh], u[nMaxh] , v[nMaxh];
     112             :         
     113             :         AliMFTCACell *celltr;
     114             :         Int_t nptr = 0;
     115             :         
     116           0 :         for (Int_t iCell = 0; iCell < GetNcells(); iCell++) {
     117           0 :                 celltr = (AliMFTCACell*)fCells->At(iCell);
     118             :                 // extract hit x,y,z
     119           0 :                 if (nptr == 0) {
     120           0 :                         xTr[nptr] = celltr->GetHit2()[0];
     121           0 :                         yTr[nptr] = celltr->GetHit2()[1];
     122           0 :                         zTr[nptr] = celltr->GetHit2()[2];
     123           0 :                         nptr++;
     124           0 :                         xTr[nptr] = celltr->GetHit1()[0];
     125           0 :                         yTr[nptr] = celltr->GetHit1()[1];
     126           0 :                         zTr[nptr] = celltr->GetHit1()[2];
     127           0 :                         nptr++;
     128           0 :                 } else {
     129           0 :                         xTr[nptr] = celltr->GetHit1()[0];
     130           0 :                         yTr[nptr] = celltr->GetHit1()[1];
     131           0 :                         zTr[nptr] = celltr->GetHit1()[2];
     132           0 :                         nptr++;
     133             :                 }
     134             :         } // END : cells loop
     135           0 :         for (Int_t i = 0; i< nptr; i++) {
     136           0 :                 AliInfo(Form("x,y,z = %f %f %f",xTr[i],yTr[i],zTr[i]));
     137             :         }
     138             : //      Double_t distL = 0., q2=0.;
     139             : //      Double_t sagitta = AliMFTTrackExtrap::Sagitta(nptr, xTr, yTr, distL,q2);
     140             : //      AliInfo(Form("sagitta = %f",sagitta));;
     141             : //      AliInfo(Form("distL = %f",distL));;
     142             : //      
     143             : //      AliInfo(Form("q2 = %f => pt = %f ",q2, 0.01/q2/2.*0.3*b[2]/10.));
     144             : //      
     145             : //      //fPt = 0.3*TMath::Abs(b[2]/10.)*distL*distL/8./sagitta;
     146             : //      fPt = 0.3*TMath::Abs(b[2]/10.)*AliMFTTrackExtrap::CircleRegression(nptr, xTr, yTr)*TMath::Sign(1.,sagitta);
     147             : // //fPt =0.01/q2/2.*0.3*b[2]/10.;
     148             :         
     149             :         
     150             :         
     151             :         
     152             :         
     153           0 :         for (Int_t iptr = 0; iptr < nptr; iptr++) {
     154             :                 
     155           0 :                 r[iptr] = TMath::Sqrt(yTr[iptr]*yTr[iptr]+xTr[iptr]*xTr[iptr]);
     156           0 :                 u[iptr] = xTr[iptr]/r[iptr]/r[iptr];
     157           0 :                 v[iptr] = yTr[iptr]/r[iptr]/r[iptr];
     158             :                 
     159             :                 
     160           0 :                 AliInfo(Form("u,v,r = %f %f %f ",u[iptr],v[iptr],r[iptr]));
     161             :                 
     162             :         }
     163           0 :         Double_t fdump, slopeX_Z, slopeY_Z;
     164           0 :         AliMFTTrackExtrap::LinearRegression(nptr, xTr,zTr, fdump, slopeX_Z);
     165           0 :         AliMFTTrackExtrap::LinearRegression(nptr, yTr,zTr, fdump, slopeY_Z);
     166             :         
     167           0 :         Double_t phi = TMath::ATan2(slopeY_Z,slopeX_Z);
     168           0 :         Double_t xS,x0;
     169           0 :         Double_t chi2 = AliMFTTrackExtrap::LinearRegression(nptr, u,v, x0, xS);
     170           0 :   AliInfo(Form("chi2 = %f x0, xS %f %f",chi2,x0,xS));;
     171             : 
     172           0 :   if (TMath::Abs(x0)<1.e-10) {
     173           0 :     fPt = 1.e6;
     174           0 :     return;
     175             :   }
     176             :   
     177           0 :         Double_t rx = -xS/(2.*x0);
     178           0 :         Double_t ry =  1./(2.*x0);
     179           0 :         Double_t rr = TMath::Sqrt(rx*rx+ry*ry);
     180           0 :         AliInfo(Form("Rx,Ry = %f %f",rx,ry));;
     181           0 :         AliInfo(Form("R = %f",rr));;
     182           0 :         AliInfo(Form("Phi = %f",phi));;
     183             :         
     184           0 :                 Double_t zmean = 0.5 * (AliMFTConstants::DefaultPlaneZ(0) + AliMFTConstants::DefaultPlaneZ(9));
     185           0 :                 const Double_t x[3] = {0.,0.,zmean};
     186           0 :                 Double_t b[3] = {0.,0.,0.};
     187           0 :                 TGeoGlobalMagField::Instance()->Field(x,b);
     188           0 :                 AliInfo(Form("Field = %e %e %e",b[0],b[1],b[2]));
     189             :                 
     190           0 :         fPt = 0.3*TMath::Abs(b[2]/10.)*rr/100.*TMath::Sign(1.,b[2]*rx*(-phi));
     191             :         
     192             :         
     193           0 :         AliInfo(Form("pt = %f",fPt));;
     194             :         
     195             :         
     196           0 : }
     197             : 
     198             : //___________________________________________________________________________
     199             : 
     200             : void AliMFTCATrack::AddCell(AliMFTCACell *cell) {
     201             :   
     202           0 :   if (fNcells >= fNDetMax) { printf("Max number of cells in this track!\n"); return; }
     203           0 :   new ((*fCells)[fNcells]) AliMFTCACell(*cell);
     204           0 :   fCellGIDarray[fNcells] = cell->GetGID();
     205           0 :   fNcells++;
     206             :   
     207           0 : }
     208             : 
     209             : //___________________________________________________________________________
     210             : 
     211             : Double_t AliMFTCATrack::AddCellToChiSq(AliMFTCACell *cell) {
     212             :   
     213             :   const Int_t nMaxh = 100;
     214           0 :   Double_t xTr[nMaxh], yTr[nMaxh], zTr[nMaxh];
     215             :   Double_t a, ae, b, be, x0, xS, y0, yS, chisqx, chisqy;
     216           0 :   Double_t xTrErrDet = 0.0025/TMath::Sqrt(12.);
     217           0 :   Double_t yTrErrDet = 0.0025/TMath::Sqrt(12.);
     218             :   Double_t xTrErrMS = 0.00055; // estimated at p = 5.5 GeV/c
     219             :   Double_t yTrErrMS = 0.00055; // estimated at p = 5.5 GeV/c
     220           0 :   Double_t xTrErr[nMaxh], yTrErr[nMaxh];
     221           0 :   for (Int_t i = 0; i < nMaxh; i++) {
     222           0 :     xTrErr[i] = TMath::Sqrt(xTrErrDet*xTrErrDet+xTrErrMS*xTrErrMS);
     223           0 :     yTrErr[i] = TMath::Sqrt(yTrErrDet*yTrErrDet+yTrErrMS*yTrErrMS);
     224             :   }
     225             :   Int_t cellGID, ndof, nptr = 0;
     226             :   
     227             :   AliMFTCACell *celltr;
     228             :   
     229           0 :   for (Int_t iCell = 0; iCell < GetNcells(); iCell++) {
     230           0 :     celltr = (AliMFTCACell*)fCells->At(iCell);
     231             :     // extract hit x,y,z
     232           0 :     if (nptr == 0) {
     233           0 :       xTr[nptr] = celltr->GetHit2()[0];
     234           0 :       yTr[nptr] = celltr->GetHit2()[1];
     235           0 :       zTr[nptr] = celltr->GetHit2()[2];
     236           0 :       nptr++;
     237           0 :       xTr[nptr] = celltr->GetHit1()[0];
     238           0 :       yTr[nptr] = celltr->GetHit1()[1];
     239           0 :       zTr[nptr] = celltr->GetHit1()[2];
     240           0 :       nptr++;
     241           0 :     } else {
     242           0 :       xTr[nptr] = celltr->GetHit1()[0];
     243           0 :       yTr[nptr] = celltr->GetHit1()[1];
     244           0 :       zTr[nptr] = celltr->GetHit1()[2];
     245           0 :       nptr++;
     246             :     }
     247             :   } // END : cells loop
     248             :     // the new cell
     249           0 :   xTr[nptr] = cell->GetHit1()[0];
     250           0 :   yTr[nptr] = cell->GetHit1()[1];
     251           0 :   zTr[nptr] = cell->GetHit1()[2];
     252           0 :   nptr++;
     253             :   // linear regression
     254             : //  if (LinFit(nptr,zTr,xTr,xTrErr,a,ae,b,be)) {
     255             : //    x0 = b; xS = a;
     256             : //    if (LinFit(nptr,zTr,yTr,yTrErr,a,ae,b,be)) {
     257             : //      y0 = b; yS = a;
     258             : //      chisqx = 0.;
     259             : //      chisqy = 0.;
     260             : //      for (Int_t iptr = 0; iptr < nptr; iptr++) {
     261             : //        //printf("%d  %f  %f  %f  \n",iptr,xTr[iptr],yTr[iptr],zTr[iptr]);
     262             : //        chisqx += (xTr[iptr]-(xS*zTr[iptr]+x0))*(xTr[iptr]-(xS*zTr[iptr]+x0))/(xTrErr[iptr]*xTrErr[iptr]);
     263             : //        chisqy += (yTr[iptr]-(yS*zTr[iptr]+y0))*(yTr[iptr]-(yS*zTr[iptr]+y0))/(yTrErr[iptr]*yTrErr[iptr]);
     264             : //      }
     265             : //    }
     266             : //  }
     267           0 :   ndof = 2*nptr-4;
     268             :   
     269           0 :   return (chisqx+chisqy)/(Double_t)ndof;
     270             :   
     271           0 : }

Generated by: LCOV version 1.11