]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Enabling V0 selection studies.
authormarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 14 Mar 2008 15:39:27 +0000 (15:39 +0000)
committermarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 14 Mar 2008 15:39:27 +0000 (15:39 +0000)
Adding the AliKF infnormation to the V0
info.  (Marian)

PWG1/AliESDRecV0Info.cxx
PWG1/AliESDRecV0Info.h
PWG1/AliGenV0Info.h
PWG1/AliRecInfoMaker.cxx

index 1c126d9c663748ca67b269041c3f5f4c20336e66..6469381fef5b2e2be834668231ff29343602faad 100644 (file)
@@ -50,6 +50,8 @@
 #include "AliESDkink.h"
 #include "AliESDv0.h"
 #include "AliV0.h"
+#include "AliKFParticle.h"
+#include "AliKFVertex.h"
 //
 #include "AliTreeDraw.h"
 #include "AliMCInfo.h"
@@ -66,30 +68,47 @@ ClassImp(AliESDRecV0Info)
 
 AliESDRecV0Info:: AliESDRecV0Info():
   TObject(),
-  fT1(),      //track1
-  fT2(),      //track2  
-  fDist1(0),    //info about closest distance according closest MC - linear DCA
-  fDist2(0),    //info about closest distance parabolic DCA
-  fInvMass(0),  //reconstructed invariant mass -
+  fT1(),               //track1
+  fT2(),               //track2  
+  fDist1(0),           //info about closest distance according closest MC - linear DCA
+  fDist2(0),           //info about closest distance parabolic DCA
+  fInvMass(0),         //reconstructed invariant mass -
   //
-  fDistMinR(0), // distance at minimal radius
-  fRr(0),       // rec position of the vertex 
-  fPointAngleFi(0), //point angle fi
-  fPointAngleTh(0), //point angle theta
-  fPointAngle(0),   //point angle full
-  fV0Status(0),       // status of the kink
+  fDistMinR(0),        // distance at minimal radius
+  fRr(0),              // rec position of the vertex 
+  fPointAngleFi(0),    //point angle fi
+  fPointAngleTh(0),    //point angle theta
+  fPointAngle(0),      //point angle full
+  fV0Status(0),        // status of the kink
   fV0tpc(0),           // Vo information from reconsturction according TPC
   fV0its(0),           // Vo information from reconsturction according ITS
   fV0rec(0),           // V0 information form the reconstruction
-  fMultiple(0),     // how man times V0 was recostructed 
-  fV0Multiple(0),   // how man times was V0 reconstucted
-  fRecStatus(0)    // status form the reconstuction
+  fV0recOff(0),        // V0 information form the reconstruction - OFFLINE
+  fMultiple(0),        // how man times V0 was recostructed 
+  fRecStatus(0),       // status form the reconstuction
+  fV0MultipleOn(0),    // how man times was V0 reconstucted
+  fV0MultipleOff(0),   // how man times was V0 reconstucted
+  //
+  fKFrecChi2NC(0),     //  ONLINE V0 finder non constrained chi2  
+  fKFrecChi2C(0),      //  ONLINE V0 finder   constrained chi2 - prim vertex  
+  fKFrecChi2CM(0),     //  ONLINE V0 finder   constrained chi2 - prim vertex+mass 
+  fKFRecNC(0),         //  non constrained  
+  fKFRecC(0),          //  constrained vertex
+  fKFRecCM(0),         //  constrained vertex+mass
+  fKFrecOffChi2NC(0),  // OFFLINE V0 finder - non constrained chi2  
+  fKFrecOffChi2C(0),   // OFFLINE V0 finder -     constrained chi2 - prim vertex  
+  fKFrecOffChi2CM(0),  // OFFLINE V0 finder -     constrained chi2 - prim vertex+mass
+  fKFOffRecNC(0),      //  non constrained  
+  fKFOffRecC(0),       //  constrained vertex
+  fKFOffRecCM(0)       //  constrained vertex+mass
 {
   //
   // default constructor
   //
-  fV0tpc = new AliV0();
-  fV0its = new AliV0();
+  fV0tpc    = new AliV0();
+  fV0its    = new AliV0();
+  fV0rec    = new AliV0();
+  fV0recOff = new AliV0();
 }
 
 
@@ -243,3 +262,96 @@ void  AliESDRecV0Info::Update(Float_t vertex[3])
   }
 }
 
+void  AliESDRecV0Info::UpdateKF(const AliESDVertex &vertex, Int_t pdg0, Int_t pdg1, Float_t mass){
+  //
+  // Calculate properties of V0 vertex using different type of constraints 
+  //
+  fKFrecChi2NC=0;     //  ONLINE V0 finder non constrained chi2  
+  fKFrecChi2C=0;      //  ONLINE V0 finder   constrained chi2 - prim vertex  
+  fKFrecChi2CM=0;     //  ONLINE V0 finder   constrained chi2 - prim vertex+mass 
+  if (fKFRecNC) {delete fKFRecNC; fKFRecNC=0;}
+  if (fKFRecC)  {delete fKFRecC;  fKFRecC=0;}
+  if (fKFRecCM) {delete fKFRecCM; fKFRecCM=0;}
+  //
+  fKFrecOffChi2NC=0;  // OFFLINE V0 finder - non constrained chi2  
+  fKFrecOffChi2C=0;   // OFFLINE V0 finder -     constrained chi2 - prim vertex  
+  fKFrecOffChi2CM=0;  // OFFLINE V0 finder -     constrained chi2 - prim vertex+mass
+  if (fKFOffRecNC) {delete fKFOffRecNC; fKFOffRecNC=0;}
+  if (fKFOffRecC)  {delete fKFOffRecC;  fKFOffRecC=0;}
+  if (fKFOffRecCM) {delete fKFOffRecCM; fKFOffRecCM=0;}
+  if (fV0Status==0) return; //
+  //
+  AliKFVertex primVtx(vertex);
+  //
+  if (fV0rec && 
+      TMath::Abs(fV0rec->GetParamN()->GetSigmaY2())>0.000000001&&
+      TMath::Abs(fV0rec->GetParamP()->GetSigmaY2())>0.000000001
+      ){
+    //
+    Double_t x, y, z;
+    AliKFParticle p1( *(fV0rec->GetParamN()), pdg0 );
+    AliKFParticle p2( *(fV0rec->GetParamP()), pdg1 );
+    //
+    fKFRecNC  = new AliKFParticle;
+    fV0rec->GetXYZ(x,y,z);
+    fKFRecNC->SetVtxGuess(x,y,z);
+    *(fKFRecNC)+=p1;
+    *(fKFRecNC)+=p2;
+    fKFrecChi2NC =fKFRecNC->GetChi2() ;
+    //
+    fKFRecC  = new AliKFParticle;
+    fV0rec->GetXYZ(x,y,z);
+    fKFRecC->SetVtxGuess(x,y,z);
+    *(fKFRecC)+=p1;
+    *(fKFRecC)+=p2;
+    fKFRecC->SetProductionVertex(primVtx);
+    fKFrecChi2C =fKFRecC->GetChi2();
+    //
+    fKFRecCM  = new AliKFParticle;
+    fV0rec->GetXYZ(x,y,z);
+    fKFRecCM->SetVtxGuess(x,y,z);
+    *(fKFRecCM)+=p1;
+    *(fKFRecCM)+=p2;
+    fKFRecCM->SetProductionVertex(primVtx);
+    fKFRecCM->SetMassConstraint(mass);
+    fKFrecChi2CM =fKFRecCM->GetChi2();    
+  }
+
+  if (fV0recOff && 
+      TMath::Abs(fV0recOff->GetParamN()->GetSigmaY2())>0.000000001&&
+      TMath::Abs(fV0recOff->GetParamP()->GetSigmaY2())>0.000000001
+      ){
+    //
+    Double_t x, y, z;
+    AliKFParticle p1( *(fV0recOff->GetParamN()), pdg0 );
+    AliKFParticle p2( *(fV0recOff->GetParamP()), pdg1 );
+    //
+    fKFOffRecNC  = new AliKFParticle;
+    fV0recOff->GetXYZ(x,y,z);
+    fKFOffRecNC->SetVtxGuess(x,y,z);
+    *(fKFOffRecNC)+=p1;
+    *(fKFOffRecNC)+=p2;
+    fKFrecOffChi2NC =fKFOffRecNC->GetChi2() ;
+    //
+    fKFOffRecC  = new AliKFParticle;
+    fV0recOff->GetXYZ(x,y,z);
+    fKFOffRecC->SetVtxGuess(x,y,z);
+    *(fKFOffRecC)+=p1;
+    *(fKFOffRecC)+=p2;
+    fKFOffRecC->SetProductionVertex(primVtx);
+    fKFrecOffChi2C =fKFOffRecC->GetChi2();
+    //
+    fKFOffRecCM  = new AliKFParticle;
+    fV0recOff->GetXYZ(x,y,z);
+    fKFOffRecCM->SetVtxGuess(x,y,z);
+    *(fKFOffRecCM)+=p1;
+    *(fKFOffRecCM)+=p2;
+    fKFOffRecCM->SetProductionVertex(primVtx);
+    fKFOffRecCM->SetMassConstraint(mass);
+    fKFrecOffChi2CM =fKFOffRecCM->GetChi2();    
+  }
+
+
+}
+
+
index 8b8214c7fd15b9e3bb1634cfa84e591bef0966d5..6f3d166830cf71dfbd35ca8ab099e3e7ed54c43b 100644 (file)
@@ -7,7 +7,8 @@
 
 #include "TObject.h"
 #include "AliESDRecInfo.h"
-
+class AliESDvertex;
+class AliKFParticle;
 
 
 
@@ -21,6 +22,7 @@ class AliESDRecV0Info: public TObject {
 public:
   AliESDRecV0Info();
   void Update(Float_t vertex[3]);
+  void UpdateKF(const AliESDVertex &vertex, Int_t pdg0, Int_t pdg1, Float_t mass);
 protected:
   AliESDRecInfo  fT1;      //track1
   AliESDRecInfo  fT2;      //track2  
@@ -40,13 +42,33 @@ protected:
   Float_t        fPointAngleFi; //point angle fi
   Float_t        fPointAngleTh; //point angle theta
   Float_t        fPointAngle;   //point angle full
-  Int_t          fV0Status;       // status of the kink
+  //
+  Int_t          fV0Status;       // status of the V0
   AliV0*         fV0tpc;           // Vo information from reconsturction according TPC
   AliV0*         fV0its;           // Vo information from reconsturction according ITS
   AliV0*         fV0rec;           // V0 information form the reconstruction
+  AliV0*         fV0recOff;        // V0 information form the reconstruction - OFFLINE
   Int_t          fMultiple;     // how man times V0 was recostructed 
-  Int_t          fV0Multiple;   // how man times was V0 reconstucted
-  Int_t          fRecStatus;    // status form the reconstuction
+  Int_t          fRecStatus;    // status form the reconstuction - 1 reconstructed - -1 fake
+  Int_t          fV0MultipleOn;    // how man times was V0 reconstucted - onfly
+  Int_t          fV0MultipleOff;   // how man times was V0 reconstucted - offline
+  //
+  // AliKF variables - variables to make a selection + resoluton study
+  //
+  Float_t        fKFrecChi2NC;     //  ONLINE V0 finder non constrained chi2  
+  Float_t        fKFrecChi2C;      //  ONLINE V0 finder   constrained chi2 - prim vertex  
+  Float_t        fKFrecChi2CM;     //  ONLINE V0 finder   constrained chi2 - prim vertex+mass 
+  AliKFParticle* fKFRecNC;         //  non constrained  
+  AliKFParticle* fKFRecC;          //  constrained vertex
+  AliKFParticle* fKFRecCM;         //  constrained vertex+mass
+  //
+  Float_t        fKFrecOffChi2NC;  // OFFLINE V0 finder - non constrained chi2  
+  Float_t        fKFrecOffChi2C;   // OFFLINE V0 finder -     constrained chi2 - prim vertex  
+  Float_t        fKFrecOffChi2CM;  // OFFLINE V0 finder -     constrained chi2 - prim vertex+mass
+  AliKFParticle* fKFOffRecNC;       //  non constrained  
+  AliKFParticle* fKFOffRecC;        //  constrained vertex
+  AliKFParticle* fKFOffRecCM;       //  constrained vertex+mass
+
   ClassDef(AliESDRecV0Info,2)   // container for  
 };
 
index 0d68ec8df62b4c01b5ce5c8b2ca7696ba9cf9e07..f995629b30dabeb0f4c64781473ffc4d60eb1272 100644 (file)
@@ -30,7 +30,7 @@ public:
   void Update(Float_t vertex[3]);       
   AliMCInfo &  GetPlus()      {return fMCd;}
   AliMCInfo &  GetMinus()     {return fMCm;}
-  TParticle &  GetMopther()   {return fMotherP;}
+  TParticle &  GetMother()   {return fMotherP;}
   Double_t    GetMCDist1() const { return fMCDist1;}
   Double_t    GetMCDist2() const {return fMCDist2;}  
   const Double_t*  GetMCPdr() const {return fMCPdr;}
index a1f61d008bc96a1a9d0e806adc03c18b070c6112..010fe3133b2c35c29191124c8990f0027dc697fd 100644 (file)
@@ -749,27 +749,34 @@ Int_t AliRecInfoMaker::TreeTLoop()
   }  
   // --sort reconstructed V0
   //
-//   AliV0 * v0MI=0;
-//   for (Int_t iEntry=0; iEntry<nV0MIs;iEntry++){
-//     v0MI = (AliV0*)fEvent->GetV0(iEntry);
-//     if (!v0MI) continue;
-//     //
-//     Int_t label0 = TMath::Abs(v0MI->GetLabel(0));
-//     Int_t label1 = TMath::Abs(v0MI->GetLabel(1));
-//     //
-//     for (Int_t i=0;i<2;i++){
-//       Int_t absLabel =  TMath::Abs(v0MI->GetLabel(i));
-//       if (absLabel < fNParticles) {
-//     if (fMultiRecV0[absLabel]>0){
-//       if (fMultiRecV0[absLabel]<20)
-//         fIndexRecV0[absLabel*20+fMultiRecV0[absLabel]] =  iEntry;   
-//     }
-//     else      
-//       fIndexRecV0[absLabel*20] =  iEntry;
-//     fMultiRecV0[absLabel]++;
-//       }
-//     }
-//   }  
+  AliV0 * v0MI=0;
+  for (Int_t iEntry=0; iEntry<nV0MIs;iEntry++){
+    v0MI = (AliV0*)fEvent->GetV0(iEntry);
+    if (!v0MI) continue;
+    //
+    //
+    //
+    //Int_t label0 = TMath::Abs(v0MI->GetLabel(0));
+    //Int_t label1 = TMath::Abs(v0MI->GetLabel(1));
+    AliESDtrack * trackn = fEvent->GetTrack((v0MI->GetNindex()));
+    AliESDtrack * trackp = fEvent->GetTrack((v0MI->GetPindex()));
+    Int_t labels[2]={-1,-1};
+    labels[0] = (trackn==0) ? -1 : trackn->GetLabel(); 
+    labels[1] = (trackp==0) ? -1 : trackp->GetLabel(); 
+    //
+    for (Int_t i=0;i<2;i++){
+      Int_t absLabel =  labels[i];
+      if (absLabel < fNParticles) {
+       if (fMultiRecV0[absLabel]>0){
+         if (fMultiRecV0[absLabel]<20)
+           fIndexRecV0[absLabel*20+fMultiRecV0[absLabel]] =  iEntry;   
+       }
+       else      
+         fIndexRecV0[absLabel*20] =  iEntry;
+       fMultiRecV0[absLabel]++;
+      }
+    }
+  }  
 
 
   printf("Time spended in TreeTLoop\n");
@@ -1046,6 +1053,8 @@ Int_t AliRecInfoMaker::BuildV0Info(Int_t eventNr)
 // loop over all entries for a given event, find corresponding 
 // rec. track and store in the fTreeCmp
 //
+  static TDatabasePDG pdgtable;
+
   TStopwatch timer;
   timer.Start();
   Int_t entry = fNextV0ToRead;
@@ -1123,6 +1132,9 @@ Int_t AliRecInfoMaker::BuildV0Info(Int_t eventNr)
          fRecV0Info->fV0its->Update(vertex);
        }
       }
+      //
+      // ????
+      // 
       if (TMath::Abs(fGenV0Info->GetMinus().fPdg)==11 &&TMath::Abs(fGenV0Info->GetPlus().fPdg)==11){
        if (fRecV0Info->fDist2>10){
          fRecV0Info->Update(vertex);
@@ -1138,9 +1150,11 @@ Int_t AliRecInfoMaker::BuildV0Info(Int_t eventNr)
     Int_t label =  TMath::Min(fGenV0Info->GetMinus().fLabel,fGenV0Info->GetPlus().fLabel);
     Int_t label2 = TMath::Max(fGenV0Info->GetMinus().fLabel,fGenV0Info->GetPlus().fLabel);    
     AliV0 *v0MI=0;
+    AliV0 *v0MIOff=0;
     fRecV0Info->fRecStatus   =0;
     fRecV0Info->fMultiple    = fMultiRecV0[label];
-    fRecV0Info->fV0Multiple=0;
+    fRecV0Info->fV0MultipleOn=0;
+    fRecV0Info->fV0MultipleOff=0;
     //
     if (fMultiRecV0[label]>0 || fMultiRecV0[label2]>0){
 
@@ -1156,48 +1170,73 @@ Int_t AliRecInfoMaker::BuildV0Info(Int_t eventNr)
        Int_t vlabelp = (trackp==0) ? -1 : trackp->GetLabel(); 
        //
        if (TMath::Abs(vlabeln)==label &&TMath::Abs(vlabelp)==label2) {
-         v0MI =v0MI2;
-         fRecV0Info->fV0Multiple++;
+         if (v0MI2->GetOnFlyStatus()) {
+           v0MI =v0MI2;
+           fRecV0Info->fV0MultipleOn++;
+         }else  {
+           v0MIOff = v0MI2;
+           fRecV0Info->fV0MultipleOff++;
+         }
          fSignedV0[index]=1;
        }
        if (TMath::Abs(vlabelp)==label &&TMath::Abs(vlabeln)==label2) {
-         v0MI =v0MI2;
-         fRecV0Info->fV0Multiple++;
+         if (v0MI2->GetOnFlyStatus()){
+           v0MI =v0MI2;
+           fRecV0Info->fV0MultipleOn++;
+         }else  {
+           v0MIOff = v0MI2;
+           fRecV0Info->fV0MultipleOff++;
+         }
          fSignedV0[index]=1;
        }
       }
     }
     if (v0MI){
-      fRecV0Info->fV0rec = v0MI;
+      new (fRecV0Info->fV0rec) AliV0(*v0MI);
       fRecV0Info->fRecStatus=1;
     }
-
+    if (v0MIOff){
+      new (fRecV0Info->fV0recOff) AliV0(*v0MIOff);
+      fRecV0Info->fRecStatus=1;
+    }
+    Int_t mpdg = fGenV0Info->GetMother().GetPdgCode();
+    Float_t mass = ( pdgtable.GetParticle(mpdg)==0) ? 0 :pdgtable.GetParticle(mpdg)->Mass();
+    fRecV0Info->UpdateKF(*esdvertex,
+                        fGenV0Info->GetPlus().GetPdg(),
+                        fGenV0Info->GetMinus().GetPdg(),
+                        mass);
     fTreeCmpV0->Fill();
   }
   //
   // write fake v0s
   //
- //  Int_t nV0MIs = fEvent->GetNumberOfV0s();
-//   for (Int_t i=0;i<nV0MIs;i++){
-//     if (fSignedV0[i]==0){
-//       AliV0 *v0MI  = (AliV0*)fEvent->GetV0(i);
-//       if (!v0MI) continue;
-//       //
-//       fRecV0Info->fV0rec = v0MI;
-//       fRecV0Info->fV0Status  =-10;
-//       fRecV0Info->fRecStatus =-2;
-//       //
-//       AliESDRecInfo*  fRecInfo1 = (AliESDRecInfo*)fRecArray->At(TMath::Abs(v0MI->GetLabel(0)));
-//       AliESDRecInfo*  fRecInfo2 = (AliESDRecInfo*)fRecArray->At(TMath::Abs(v0MI->GetLabel(1)));
-//       if (fRecInfo1 && fRecInfo2){
-//     fRecV0Info->fT1 = (*fRecInfo1);
-//     fRecV0Info->fT2 = (*fRecInfo2);
-//     fRecV0Info->fRecStatus =-1;
-//       }
-//       fRecV0Info->Update(vertex);
-//       fTreeCmpV0->Fill();
-//     }
-//   }
+  Int_t nV0MIs = fEvent->GetNumberOfV0s();
+  for (Int_t i=0;i<nV0MIs;i++){
+    if (fSignedV0[i]==0){
+      AliV0 *v0MI  = (AliV0*)fEvent->GetV0(i);
+      if (!v0MI) continue;
+      //
+      new (fRecV0Info->fV0rec) AliV0(*v0MI);
+      fRecV0Info->fV0Status  =-10;
+      fRecV0Info->fRecStatus =-2;
+      //
+      AliESDtrack * trackn = fEvent->GetTrack((v0MI->GetNindex()));
+      AliESDtrack * trackp = fEvent->GetTrack((v0MI->GetPindex()));
+      Int_t vlabeln = (trackn==0) ? -1 : trackn->GetLabel(); 
+      Int_t vlabelp = (trackp==0) ? -1 : trackp->GetLabel(); 
+
+      AliESDRecInfo*  fRecInfo1 = (AliESDRecInfo*)fRecArray->At(TMath::Abs(vlabeln));
+      AliESDRecInfo*  fRecInfo2 = (AliESDRecInfo*)fRecArray->At(TMath::Abs(vlabelp));
+      if (fRecInfo1 && fRecInfo2){
+       fRecV0Info->fT1 = (*fRecInfo1);
+       fRecV0Info->fT2 = (*fRecInfo2);
+       fRecV0Info->fRecStatus =-1;
+      }
+      fRecV0Info->Update(vertex);
+      fRecV0Info->UpdateKF(*esdvertex,211,211,0.49767);
+      fTreeCmpV0->Fill();
+    }
+  }