]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliV0vertexer.cxx
Typo corrected
[u/mrichter/AliRoot.git] / ITS / AliV0vertexer.cxx
index 077fb229047a8325dd4e4a0135d12db4f7357872..207648f6853498310975a02b4157658966284b14 100644 (file)
 //
 //     Origin: Iouri Belikov, IReS, Strasbourg, Jouri.Belikov@cern.ch
 //-------------------------------------------------------------------------
+#include <Riostream.h>
 #include <TFile.h>
-#include <TTree.h>
+#include <TPDGCode.h>
 #include <TObjArray.h>
-#include <iostream.h>
+#include <TTree.h>
 
+#include "AliITStrackV2.h"
 #include "AliV0vertex.h"
 #include "AliV0vertexer.h"
-#include "AliITStrackV2.h"
 
 ClassImp(AliV0vertexer)
 
@@ -50,7 +51,9 @@ Int_t AliV0vertexer::Tracks2V0vertices(const TFile *inp, TFile *out) {
 
    in->cd();
 
-   TTree *trkTree=(TTree*)in->Get("TreeT_ITS_0");
+   Char_t name[100];
+   sprintf(name,"TreeT_ITS_%d",fEventN);
+   TTree *trkTree=(TTree*)in->Get(name);
    TBranch *branch=trkTree->GetBranch("tracks");
    Int_t nentr=(Int_t)trkTree->GetEntries();
 
@@ -64,13 +67,17 @@ Int_t AliV0vertexer::Tracks2V0vertices(const TFile *inp, TFile *out) {
        AliITStrackV2 *iotrack=new AliITStrackV2;
        branch->SetAddress(&iotrack);
        trkTree->GetEvent(i);
+
+       iotrack->PropagateTo(3.,0.0023,65.19); iotrack->PropagateTo(2.5,0.,0.);
+
        if (iotrack->Get1Pt() > 0.) {nneg++; negtrks.AddLast(iotrack);}
        else {npos++; postrks.AddLast(iotrack);}
    }   
 
 
    out->cd();
-   TTree vtxTree("TreeV","Tree with V0 vertices");
+   sprintf(name,"TreeV%d",fEventN);
+   TTree vtxTree(name,"Tree with V0 vertices");
    AliV0vertex *ioVertex=0;
    vtxTree.Branch("vertices","AliV0vertex",&ioVertex,32000,0);
 
@@ -78,11 +85,19 @@ Int_t AliV0vertexer::Tracks2V0vertices(const TFile *inp, TFile *out) {
    for (i=0; i<nneg; i++) {
       if (i%10==0) cerr<<nneg-i<<'\r';
       AliITStrackV2 *ntrk=(AliITStrackV2 *)negtrks.UncheckedAt(i);
+
+      if (TMath::Abs(ntrk->GetD(fX,fY))<fDPmin) continue;
+      if (TMath::Abs(ntrk->GetD(fX,fY))>fRmax) continue;
+
       for (Int_t k=0; k<npos; k++) {
          AliITStrackV2 *ptrk=(AliITStrackV2 *)postrks.UncheckedAt(k);
 
-         if (TMath::Abs(ntrk->GetD())<fDNmin) continue;
-         if (TMath::Abs(ptrk->GetD())<fDPmin) continue;
+         if (TMath::Abs(ptrk->GetD(fX,fY))<fDPmin) continue;
+         if (TMath::Abs(ptrk->GetD(fX,fY))>fRmax) continue;
+
+         if (TMath::Abs(ntrk->GetD(fX,fY))<fDNmin)
+         if (TMath::Abs(ptrk->GetD(fX,fY))<fDNmin) continue;
+
 
          AliITStrackV2 nt(*ntrk), pt(*ptrk), *pnt=&nt, *ppt=&pt;
 
@@ -104,8 +119,11 @@ Int_t AliV0vertexer::Tracks2V0vertices(const TFile *inp, TFile *out) {
 
          Double_t px,py,pz; vertex.GetPxPyPz(px,py,pz);
          Double_t p2=px*px+py*py+pz*pz;
-         Double_t cost=(x*px+y*py+z*pz)/TMath::Sqrt(p2*(r2+z*z));
-         if (cost<fCPAmax) continue;
+         Double_t cost=((x-fX)*px + (y-fY)*py + (z-fZ)*pz)/
+                TMath::Sqrt(p2*((x-fX)*(x-fX) + (y-fY)*(y-fY) + (z-fZ)*(z-fZ)));
+
+         //if (cost < (5*fCPAmax-0.9-TMath::Sqrt(r2)*(fCPAmax-1))/4.1) continue;
+         if (cost < fCPAmax) continue;
 
          //vertex.ChangeMassHypothesis(); //default is Lambda0 
 
@@ -171,6 +189,12 @@ Double_t AliV0vertexer::PropagateToDCA(AliITStrackV2 *n, AliITStrackV2 *p) {
   // This function returns the DCA between two tracks
   // The tracks will be moved to the point of DCA ! 
   //--------------------------------------------------------------------
+  Double_t dy2=n->GetSigmaY2() + p->GetSigmaY2();
+  Double_t dz2=n->GetSigmaZ2() + p->GetSigmaZ2();
+  Double_t dx2=dy2; 
+
+  //dx2=dy2=dz2=1.;
+
   Double_t p1[8]; External2Helix(n,p1);
   p1[6]=TMath::Sin(p1[2]); p1[7]=TMath::Cos(p1[2]);
   Double_t p2[8]; External2Helix(p,p2);
@@ -183,19 +207,19 @@ Double_t AliV0vertexer::PropagateToDCA(AliITStrackV2 *n, AliITStrackV2 *p) {
   Evaluate(p2,t2,r2,g2,gg2);
 
   Double_t dx=r2[0]-r1[0], dy=r2[1]-r1[1], dz=r2[2]-r1[2];
-  Double_t dm=dx*dx + dy*dy + dz*dz;
+  Double_t dm=dx*dx/dx2 + dy*dy/dy2 + dz*dz/dz2;
 
   Int_t max=27;
   while (max--) {
-     Double_t gt1=-(dx*g1[0] + dy*g1[1] + dz*g1[2]);
-     Double_t gt2=+(dx*g2[0] + dy*g2[1] + dz*g2[2]);
-     Double_t h11=g1[0]*g1[0] - dx*gg1[0] + 
-                  g1[1]*g1[1] - dy*gg1[1] +
-                  g1[2]*g1[2] - dz*gg1[2];
-     Double_t h22=g2[0]*g2[0] + dx*gg2[0] + 
-                  g2[1]*g2[1] + dy*gg2[1] +
-                  g2[2]*g2[2] + dz*gg2[2];
-     Double_t h12=-(g1[0]*g2[0] + g1[1]*g2[1] + g1[2]*g2[2]);
+     Double_t gt1=-(dx*g1[0]/dx2 + dy*g1[1]/dy2 + dz*g1[2]/dz2);
+     Double_t gt2=+(dx*g2[0]/dx2 + dy*g2[1]/dy2 + dz*g2[2]/dz2);
+     Double_t h11=(g1[0]*g1[0] - dx*gg1[0])/dx2 + 
+                  (g1[1]*g1[1] - dy*gg1[1])/dy2 +
+                  (g1[2]*g1[2] - dz*gg1[2])/dz2;
+     Double_t h22=(g2[0]*g2[0] + dx*gg2[0])/dx2 + 
+                  (g2[1]*g2[1] + dy*gg2[1])/dy2 +
+                  (g2[2]*g2[2] + dz*gg2[2])/dz2;
+     Double_t h12=-(g1[0]*g2[0]/dx2 + g1[1]*g2[1]/dy2 + g1[2]*g2[2]/dz2);
 
      Double_t det=h11*h22-h12*h12;
 
@@ -215,7 +239,7 @@ Double_t AliV0vertexer::PropagateToDCA(AliITStrackV2 *n, AliITStrackV2 *p) {
 
      if (TMath::Abs(dt1)/(TMath::Abs(t1)+1.e-3) < 1.e-4)
      if (TMath::Abs(dt2)/(TMath::Abs(t2)+1.e-3) < 1.e-4) {
-        if ((gt1*gt1+gt2*gt2) > 1.e-4) 
+        if ((gt1*gt1+gt2*gt2) > 1.e-4/dy2/dy2
           cerr<<"AliV0vertexer::PropagateToDCA:"
                  " stopped at not a stationary point !\n";
         Double_t lmb=h11+h22; lmb=lmb-TMath::Sqrt(lmb*lmb-4*det);
@@ -230,7 +254,7 @@ Double_t AliV0vertexer::PropagateToDCA(AliITStrackV2 *n, AliITStrackV2 *p) {
         Evaluate(p1,t1+dt1,r1,g1,gg1);
         Evaluate(p2,t2+dt2,r2,g2,gg2);
         dx=r2[0]-r1[0]; dy=r2[1]-r1[1]; dz=r2[2]-r1[2];
-        dd=dx*dx + dy*dy + dz*dz;
+        dd=dx*dx/dx2 + dy*dy/dy2 + dz*dz/dz2;
        if (dd<dm) break;
         dt1*=0.5; dt2*=0.5;
         if (div>512) {
@@ -263,7 +287,8 @@ Double_t AliV0vertexer::PropagateToDCA(AliITStrackV2 *n, AliITStrackV2 *p) {
     return 1.e+33;
   }  
 
-  return TMath::Sqrt(dm);
+  return TMath::Sqrt(dm*TMath::Sqrt(dy2*dz2));
+  //return TMath::Sqrt(dx*dx + dy*dy + dz*dz);
 }