Subversion Repositories f9daq

Rev

Rev 329 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. //+
  2. // File : BParticle.cc
  3. // Description : Implementation of BTrack class //
  4. //-
  5.  
  6. #include "BParticle.h"
  7.  
  8. ClassImp (BParticle)
  9.  
  10.  
  11.  BParticle::BParticle ( float px, float py, float pz, float e,
  12.                        float charge, SIMPLEPID pid ) {
  13.    m_px = px;
  14.    m_py = py;
  15.    m_pz = pz;
  16.    m_e = e;
  17.    m_charge = charge;
  18.    m_pid = pid;
  19.  }
  20.  
  21.  
  22. float BParticle::GetMass(SIMPLEPID pid){
  23.  
  24. switch (pid){
  25.         case PHOTON:   return 0;
  26.         case ELECTRON: return 0.51;
  27.         case PION:     return 0.139;
  28.         case MUON:     return 0.105;
  29.         case KAON:     return 0.497;
  30.         case PROTON:   return 0.938;
  31.         case JPSI:     return 3.1;
  32.         case D:        return 1.86;
  33.         case DSTAR:    return 2.01;
  34.         case B:        return 5.27;
  35.         case PHI:      return 1.02;
  36.         case LAMBDA0:  return 1.115683;
  37.         case ALL:      return -1;
  38.         default: return 0;
  39. }      
  40.  
  41. }
  42.  
  43.  float BParticle::GetMass ()
  44.  {
  45.    float m2 = m_e * m_e-m_px * m_px-m_py * m_py-m_pz * m_pz;
  46.    if (m2<0) m2=0;
  47.    return sqrt(m2);
  48.  }  
  49.  
  50.  void BParticle::SetEnergyFromMass (float mass)
  51.  {
  52.    if (mass<0) return;
  53.    m_e = sqrt( mass * mass + m_px * m_px +m_py * m_py +m_pz * m_pz );
  54.    
  55.  }
  56.  
  57. void BParticle::SetEnergyFromPid(){
  58.         SetEnergyFromMass(GetMass(m_pid));
  59. }
  60.  
  61. int SelectParticles(TClonesArray *pin , int charge, SIMPLEPID type, TClonesArray *pout){
  62.   pout->Clear();
  63.   int nprt=0;
  64.  
  65.   for(TIter next(pin); BParticle * p =(BParticle *) next();) {
  66.         if (p->charge()== charge && p->pid()== type ) {
  67.           TClonesArray& list = *pout;
  68.           new (list[nprt++]) BParticle ( *p );
  69.         }
  70.   }      
  71.   return nprt;  
  72. }
  73.  
  74. int CombineParticles(TClonesArray *plist1 ,TClonesArray *plist2 , int same, float masslow, float massup, SIMPLEPID pid, TClonesArray *pout){
  75.  // Loop over all the particles in both lists.
  76.  pout->Clear();
  77.  int nprt=0;
  78.  
  79.  for(TIter next1(plist1);BParticle * p1 =(BParticle *) next1();) {
  80.     // the second loop
  81.    for( TIter next2 = (plist1!=plist2 && same==0) ?  TIter(plist2): TIter(next1) ; BParticle * p2 =(BParticle *) next2();) {  
  82.       BParticle  p = *p1 + *p2; // Combine two particles into a new particle  
  83.       if (p.InMassRange(masslow, massup)){
  84.             p.SetPid(pid);
  85.                 TClonesArray& list = *pout;
  86.             new (list[nprt++]) BParticle ( p ); // create a new entry in kslist list of particles
  87.       }
  88.        
  89.    }
  90.                
  91.  }
  92.  return nprt;
  93. }
  94.  
  95.  
  96.  
  97.