// @(#)$Id: hpidmdcfunc.cc,v 1.5 2007-07-19 19:56:27 jurkovic Exp $
// *-- Author : Jaroslav Bielcik
//   Modified : Marcin Jaskula 14/03/2003
//                 code cleaning. Changed the class name and all methods
//                 changed to static ones.

//_HADES_CLASS_DESCRIPTION 
////////////////////////////////////////////////////////////////////////////////
//
// HPidMdcFunc
//
// Methods used for filling members of HPidHitData
//
////////////////////////////////////////////////////////////////////////////////

#include "hpidmdcfunc.h"
//#include "hpidparticlesim.h"
//#include "hpidtrackcand.h"
#include "hpidfl.h"
#include "hmdcseg.h"
#include "hmdchit.h"
#include "hmdcclusinf.h"
#include "hrichhitsim.h"
#include "hkicktracksim.h"
#include "hgeantkine.h"
#include "hmdcdef.h"
#include "hmdctrackddef.h"

ClassImp(HPidMdcFunc)


HPidMdcFunc::HPidMdcFunc()
{

}

HPidMdcFunc::~HPidMdcFunc(void) 
{

}


// -----------------------------------------------------------------------------
Float_t HPidMdcFunc::getMdcChiSquare(HMdcSeg *pMdcSeg)
{
  Float_t chi2=-99.0;
  if(pMdcSeg)
    {
      chi2=pMdcSeg->getChi2();
    }
  return chi2;
}
/*
Float_t HPidMdcFunc::getMdcChiSquare(const HPidTrackCand *pPidTrack)
{
  Float_t chi2=-99;
  HMdcSeg * pMdcSeg=NULL;
  if(pPidTrack)
    {
      pMdcSeg=(HMdcSeg*)pPidTrack->getMdcSeg();
      if(pMdcSeg)
        {
	  chi2=pMdcSeg->getChi2();
        }
    }
  
    return chi2;
}



Int_t HPidMdcFunc::getMdcClsSize(const HPidTrackCand *pPidTrack, Int_t module)
{
HMdcSeg * pMdcSeg=NULL;
Int_t cls=0;

    if(pPidTrack)
    {
        pMdcSeg=(HMdcSeg*)pPidTrack->getMdcSeg();
        if(pMdcSeg)
        {
            cls=getMdcClsSize(pMdcSeg,module);
        }
    }

    return cls;
}

// -----------------------------------------------------------------------------

Int_t HPidMdcFunc::getMdcNWires(const HPidTrackCand *pPidTrack,Int_t module)
{
HMdcSeg * pMdcSeg=NULL;
Int_t nwires=0;

    if(pPidTrack){
        pMdcSeg=(HMdcSeg*)pPidTrack->getMdcSeg();
        if(pMdcSeg) {
            nwires=getMdcNWires(pMdcSeg,module);
        }
    }

    return nwires;
}

// -----------------------------------------------------------------------------

Int_t HPidMdcFunc::getMdcLevelCls(const HPidTrackCand *pPidTrack,Int_t module)
{
HMdcSeg * pMdcSeg=NULL;
Int_t level=0;

    if(pPidTrack){
        pMdcSeg=(HMdcSeg*)pPidTrack->getMdcSeg();
        if(pMdcSeg) {
            level=getMdcLevelCls(pMdcSeg,module);
        }
    }

    return level;
}

// -----------------------------------------------------------------------------

Int_t HPidMdcFunc::getIntCharge(const HPidTrackCand *pPidTrack){
HRichHit * pRichHit=NULL;
Int_t int_charge=0;

    if(pPidTrack){
        pRichHit=(HRichHit*)pPidTrack->getRichHit();
        if(pRichHit) {
            int_charge=pRichHit->getRingAmplitude();
        }
    }

    return int_charge;
}
*/
// -----------------------------------------------------------------------------

HCategory* HPidMdcFunc::getMdcHitCat(void)
{
  return HPidFL::getCategory(catMdcHit);
}

// -----------------------------------------------------------------------------

HCategory* HPidMdcFunc::getClusInfCat(void)
{
    return HPidFL::getCategory(catMdcClusInf);
}

// -----------------------------------------------------------------------------


Int_t  HPidMdcFunc::getMdcClsSize(HMdcSeg *seg,Int_t module){
 Int_t cls=0;
 HMdcHit *hit;
 if(seg) {
   hit=getMdcHit(seg,module);
   if(hit) cls=getMdcClsSize(hit);

 }
 return cls;
}

HMdcClusInf* HPidMdcFunc::getMdcClusInfoBySegment(HMdcSeg* pSeg,Int_t module)
{
  Int_t clsindex=getMdcClusInfoIndexBySegment(pSeg, module);
  return getClusInfObj(clsindex);
  return NULL;
}

Int_t HPidMdcFunc::getMdcClusInfoIndexBySegment(HMdcSeg* pSeg,Int_t module)
{
  HMdcHit *hit;
  Int_t clsindex = -1;
  hit=getMdcHit(pSeg,module);
  if(hit) 
    {
      clsindex=hit->getClusInfIndex();	
    }
  return clsindex;
}


Int_t  HPidMdcFunc::getMdcNWires(HMdcSeg *seg,Int_t module){
 Int_t nwires=0;
 HMdcHit *hit;
 if(seg) {
   hit=getMdcHit(seg,module);
   if(hit) nwires=getMdcNWires(hit);

 }
 return nwires;
}

Int_t  HPidMdcFunc::getMdcLevelCls(HMdcSeg *seg,Int_t module){
 Int_t level=0;
 HMdcHit *hit;
 if(seg) {
   hit=getMdcHit(seg,module);
   if(hit) level=getMdcLevelCls(hit);

 }
 return level;
}

HMdcHit* HPidMdcFunc::getMdcHit(HMdcSeg *seg,Int_t module){
  HMdcHit *hit=NULL;
  Int_t hit_inx=-1;
  if(seg) {
    hit_inx=seg->getHitInd(module);
    if(hit_inx>-1){
      if(getMdcHitCat()) {
    hit=(HMdcHit *)getMdcHitCat()->getObject(hit_inx);
    return hit;
      } else {
    printf("******MdcHitCat is NULL********\n");
    printf("******use HPidMdcFunc::setMdcHitCat()********\n");
      }
    }
  }
  return hit;
}


Int_t        HPidMdcFunc::getMdcClsSize(HMdcHit *hit){
  Int_t clssize=-1;
  Int_t clsindex=-1;
  HMdcClusInf *pObj_clusinf=NULL;

  clsindex=hit->getClusInfIndex();
  pObj_clusinf=getClusInfObj(clsindex);
  if(pObj_clusinf){
    clssize=pObj_clusinf->getClusSize();
  }
  return clssize;
}

Int_t        HPidMdcFunc::getMdcNWires(HMdcHit *hit){
  Int_t nwires=-1;
  Int_t clsindex=-1;
  HMdcClusInf *pObj_clusinf=NULL;

  clsindex=hit->getClusInfIndex();
  pObj_clusinf=getClusInfObj(clsindex);
  if(pObj_clusinf){
     nwires=pObj_clusinf->getNDrTimes();
  }
  return nwires;
}
Int_t        HPidMdcFunc::getMdcLevelCls(HMdcHit *hit){
  Int_t level=-1;
  Int_t clsindex=-1;
  HMdcClusInf *pObj_clusinf=NULL;

  clsindex=hit->getClusInfIndex();
  pObj_clusinf=getClusInfObj(clsindex);
  if(pObj_clusinf){
     level=pObj_clusinf->getLevelClFinding();
  }
  return level;
}

HMdcClusInf* HPidMdcFunc::getClusInfObj(Int_t clsindex){
  //get ClusInfObj from category using index

  HMdcClusInf *pObj_clusinf=NULL;
  if(getClusInfCat()){
    pObj_clusinf=(HMdcClusInf* )getClusInfCat()->getObject(clsindex);
  } else {
    printf("******MdcClusInfCat is NULL********\n");
    printf("******use HPidMdcFunc::setMdcClusInfCat()********\n");
  }
  return pObj_clusinf;
}

Int_t HPidMdcFunc::calculateLevelBin(Int_t level) {
  Int_t mdc_lev_bin =-1;
  if (level>=4&&level<=6) mdc_lev_bin=(Int_t )level-4;
  return mdc_lev_bin;
}

Int_t HPidMdcFunc::calculateBin(Float_t mdc_angle,Int_t option) {
  // calculate the the bin of the angle (option=0 ... theta; =1 ... phi)

  Int_t mdc_theta_bin=-9;
  Int_t mdc_phi_bin=-9;
  Int_t theta_bin_size=10;
  Int_t phi_bin_size=10;

  Float_t theta_min=10.0;
  Float_t theta_max=90.0;

  Float_t phi_min=0.0;
  Float_t phi_max=360.0;

  switch (option) {
  case 0:
    // case theta
    if(mdc_angle>=theta_min&&mdc_angle<=theta_max) {
      mdc_theta_bin=((Int_t)(mdc_angle-theta_min))/theta_bin_size;
      //  printf("mdc_angle=%f bin=%i \n",mdc_angle,mdc_theta_bin);
      return mdc_theta_bin;
    } else {
      printf ("theta out of range\n");
      return -2;
    }
  case 1:
    if(mdc_angle>=phi_min&&mdc_angle<=phi_max){
      mdc_phi_bin=(((Int_t) mdc_angle)%60)/phi_bin_size;
      if(mdc_phi_bin>2) mdc_phi_bin=5-mdc_phi_bin ;//e.g. 10-10 and 50-60 is bin 0
      return mdc_phi_bin;
    }else{
      printf ("phi out of range\n");
      return -2;
    }


  default:
    printf("Third argument should be 0-1 for theta-phi angle\n");
    return -1;
  }
}

// -----------------------------------------------------------------------------
/*
Int_t  HPidMdcFunc::getGeantId(HRichHitSim * pRichHitSim,HKickTrackSim * pKickTrack){
  //this calculated GeantId in a way I consider it correct
  //return 2,3 or 102 and 103 if e+ e-
  //          -2 ring-pi
  //          -3 ring-p
  //          -5 ring-another lepton
  //          -4 ring-mdc corr ele-meta not
  //          -1 ring-non sence in meta
  HGeantKine *kine=NULL;
  Int_t richTr1=-1;
  Int_t richTr2=-1;
  Int_t richTr3 =-1;
  Int_t iTrack=-1, iId=-1;
  Int_t flag_richmdcele=0;
  Int_t flag_missinmdc=0;



  if(pKickTrack!=NULL&&pRichHitSim!=NULL) {
    if(pRichHitSim->weigTrack1>0) richTr1=pRichHitSim->track1;
    if(pRichHitSim->weigTrack2>0) richTr2=pRichHitSim->track2;
    if(pRichHitSim->weigTrack3>0) richTr3=pRichHitSim->track3;


    flag_richmdcele=0;
    for (Int_t j=0;j<pKickTrack->getNMdcTracks();j++){
      //go over mdc
      iId=-1;

      if(pKickTrack->getMdcTrack(j)>0&&pKickTrack->getMdcTrack(j)<10000){

    for (Int_t k=0;k<pKickTrack->getNMetaTracks();k++){
      //iId=-1;
      //completely new
          if(pKickTrack->getMdcTrack(j)==pKickTrack->getMetaTrack(k)){
        //common MDC-META
        kine=HPidParticleSim::getGeantKine(pKickTrack->getMdcTrack(j));
        kine->getParticle(iTrack, iId);
        if((pKickTrack->getMdcTrack(j)==richTr1)||(pKickTrack->getMdcTrack(j)==richTr2)||(pKickTrack->getMdcTrack(j)==richTr3)){
          //common RING-MDC-META
          //iId=-1;
          //kine=HPidParticleSim::getGeantKine(pKickTrack->getMdcTrack(j));
          //kine->getParticle(iTrack, iId);

          //printf("Rich-Meta-Mdc common track=%i part=%i\n",pKickTrack->getMdcTrack(j),iId);
              //printf("return %i\n",iId);
          return  iId;
        }

        if(iId==9||iId==8) {
          //printf("Ring corr Meta-Mdc common track=%i part=%i\n",pKickTrack->getMdcTrack(j),iId);
          //printf("return -2 (pion)\n");
          return -2;
        }

        if(iId==14){
          // printf("Ring corr Meta-Mdc common track=%i part=%i\n",pKickTrack->getMdcTrack(j),iId);
          //printf("return -3 (proton)\n");
          return -3;
        }

        if(iId==3||iId==2){

          // printf("Ring corr Meta-Mdc common track=%i part=%i\n",pKickTrack->getMdcTrack(j),iId);
          //printf("return -5 (another lepton)\n");
          return -5;
        }
      }

      if((pKickTrack->getMdcTrack(j)==richTr1)||(pKickTrack->getMdcTrack(j)==richTr2)||(pKickTrack->getMdcTrack(j)==richTr3)){
        //common RING-MDC but not META because otherwise it is already return before

        kine=HPidParticleSim::getGeantKine(pKickTrack->getMdcTrack(j));
        kine->getParticle(iTrack, iId);
        if(iId==2||iId==3){
          //common RING-MDC electron (but not META)
          // printf("common RING-MDC lepton (but not META) tr=%i \n",pKickTrack->getMdcTrack(j));
          //printf("set iId=-4\n");
          flag_richmdcele=1;
        } else {
          printf("Strange RING-MDC is not lepton\n");
        }
      }
      //one has to treat separately case that in MDC I do not see a second pair from conv but in META yes
      if((pKickTrack->getMetaTrack(k)==richTr1)||(pKickTrack->getMetaTrack(k)==richTr2)||(pKickTrack->getMetaTrack(k)==richTr3)){
        for (Int_t l=0;l<pKickTrack->getNMdcTracks();l++){
          if(TMath::Abs(pKickTrack->getMdcTrack(l)-pKickTrack->getMetaTrack(k))==1){


        //  printf("common RING-MDC lepton1 ,common RING-META lepton2 from pair  tr=%i in mdc lost \n",pKickTrack->getMetaTrack(l));
        kine=HPidParticleSim::getGeantKine(pKickTrack->getMetaTrack(k));
        kine->getParticle(iTrack, iId);


        //printf("common miss mdc track iTrack=%i set flag_missinmdc=%i\n ",pKickTrack->getMetaTrack(l),(100+iId));
        //return (100+iId);
                //I do not return because it could still be double-double-single case
                flag_missinmdc=(100+iId);

          }
        }
      }
    }
      }
    }
    //        printf("THIS TRACK: RICH %i %i %i MDC (num %i) %i %i %i %i %i META (num %i) %i %i %i\n",richTr1,richTr2,richTr3,pKickTrack->getNMdcTracks(),pKickTrack->getMdcTrack(0),pKickTrack->getMdcTrack(1),pKickTrack->getMdcTrack(2),pKickTrack->getMdcTrack(3),pKickTrack->getMdcTrack(4),pKickTrack->getNMetaTracks(),pKickTrack->getMetaTrack(0),pKickTrack->getMetaTrack(1),pKickTrack->getMetaTrack(2));
    if(flag_missinmdc!=0){
      return flag_missinmdc;
    }

    if(flag_richmdcele==1){
      // printf("return %i\n",-4);
      return -4;
    }
    //printf("return %i\n",-1);
    return -1;

  }
  return 0;

}
*/

Last change: Sat May 22 13:07:10 2010
Last generated: 2010-05-22 13:07

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.