ROOT logo
#ifndef HMDCCLUSFITSIM_H
#define HMDCCLUSFITSIM_H

#include "hmdcclusfit.h"
#include <math.h>

class HMdcClusFitSim : public HMdcClusFit {
protected:
  Short_t nTracks;      // number of GEANT tracks passed fit
  Short_t nTracksClus;  // number of GEANT tracks in input of fit (in cluster)
  Int_t   geantTrack;   // geant track number which has max.num. of wires passed fit
  Short_t nTrWires;     // number of wires passed fit from track num.=geantTrack
  Short_t nTrWiresClus; // number of wires in cluster from track num.=geantTrack
  Bool_t  primary;      // =kTRUE if "geantTrack" is primary track

  Float_t x1geant;      // GEANT track parameters on the same
  Float_t y1geant;      // planes as x1,y1,z1,x2,y2,z2 in HMdcClusFit [mm]
  Float_t z1geant;      //
  Float_t x2geant;      //
  Float_t y2geant;      //
  Float_t z2geant;      //
  Bool_t  direction;    // =KTRUE if track direction is from target to meta
                        // =kFALSE if opposed. GEANT xyz =-10000. in this case
  Int_t   particleID;   // GEANT particle ID number
  Float_t momentum;     // GEANT particle momentum (in MeV/c)

public:
  HMdcClusFitSim();
  ~HMdcClusFitSim(){}

  void    setNumTracks(Short_t n)       {nTracks      = n;}
  void    setNumTracksClus(Short_t n)   {nTracksClus  = n;}
  void    setGeantTrackNum(Int_t i)     {geantTrack   = i;}
  void    setNumWiresTrack(Short_t n)   {nTrWires     = n;}
  void    setNumWiresTrClus(Short_t n)  {nTrWiresClus = n;}
  void    setX1Geant(Float_t v)         {x1geant      = v;}
  void    setY1Geant(Float_t v)         {y1geant      = v;}
  void    setZ1Geant(Float_t v)         {z1geant      = v;}
  void    setX2Geant(Float_t v)         {x2geant      = v;}
  void    setY2Geant(Float_t v)         {y2geant      = v;}
  void    setZ2Geant(Float_t v)         {z2geant      = v;}
  void    setPrimaryFlag(Bool_t fl)     {primary      = fl;}
  void    setFakeTrack(Bool_t dir=kTRUE);
  void    setXYZ1Geant(Float_t x,Float_t y,Float_t z) {x1geant=x; y1geant=y; z1geant=z;}
  void    setXYZ2Geant(Float_t x,Float_t y,Float_t z) {x2geant=x; y2geant=y; z2geant=z;}
  void    setParticleID(Int_t id)       {particleID   = id;}
  void    setMomentum(Float_t mom)      {momentum     = mom;}
  void    setFakeFlag(void)             {if(nTrWiresClus > 0) nTrWiresClus = -nTrWiresClus;}

  Short_t getNumTracks(void) const      {return nTracks;}
  Short_t getNumTracksClus(void) const  {return nTracksClus;}
  Int_t   getGeantTrackNum(void) const  {return geantTrack;}
  Short_t getNumWiresTrack(void) const  {return nTrWires;}
  Short_t getNumWiresTrClus(void) const {return nTrWiresClus >= 0 ? nTrWiresClus : -nTrWiresClus;}
  Float_t getX1Geant(void) const        {return x1geant;}
  Float_t getY1Geant(void) const        {return y1geant;}
  Float_t getZ1Geant(void) const        {return z1geant;}
  Float_t getX2Geant(void) const        {return x2geant;}
  Float_t getY2Geant(void) const        {return y2geant;}
  Float_t getZ2Geant(void) const        {return z2geant;}
  Bool_t  isPrimary(void) const         {return primary;}
  Bool_t  isTrackDirGood(void) const    {return direction;}
  Float_t getGeantPhi(void) const       {return atan2(y2geant-y1geant,x2geant-x1geant);}
  Float_t getGeantTheta(void) const     {return atan2(sqrt((x2geant-x1geant)*(x2geant-x1geant) +
                                         (y2geant-y1geant)*(y2geant-y1geant)),z2geant-z1geant);}
  void    getGeantRZmin(Float_t &zm, Float_t &r0, Float_t xBm=0., Float_t yBm=0.) 
      const {calcRZtoLineXY(zm,r0,x1geant,y1geant,z1geant, x2geant,y2geant,z2geant,xBm,yBm);}
  Int_t   getParticleID(void) const     {return particleID;}
  Float_t getMomentum(void) const       {return momentum;}
  
  Float_t dX1(void) const               {return x1-x1geant;}
  Float_t dY1(void) const               {return y1-y1geant;}
  Float_t dZ1(void) const               {return z1-z1geant;}
  Float_t dX2(void) const               {return x2-x2geant;}
  Float_t dY2(void) const               {return y2-y2geant;}
  Float_t dZ2(void) const               {return z2-z2geant;}
  Bool_t  isFakeGeant(void) const       {return nTrWiresClus < 4;}
  Float_t getPurity(void) const         {return numOfWires ? 
                                         Float_t(nTrWires)/Float_t(numOfWires) : 0.;}
  Float_t getEfficiency(void) const     {return nTrWiresClus ? 
                                         Float_t(nTrWires)/getNumWiresTrClus() : 0.;}
  void    printSimVsRec(void) const;
  
  virtual void print(void) const;
  virtual Bool_t isGeant() const        {return kTRUE;}

  ClassDef(HMdcClusFitSim,1) // geant data for HMdcClusFit
};

#endif
 hmdcclusfitsim.h:1
 hmdcclusfitsim.h:2
 hmdcclusfitsim.h:3
 hmdcclusfitsim.h:4
 hmdcclusfitsim.h:5
 hmdcclusfitsim.h:6
 hmdcclusfitsim.h:7
 hmdcclusfitsim.h:8
 hmdcclusfitsim.h:9
 hmdcclusfitsim.h:10
 hmdcclusfitsim.h:11
 hmdcclusfitsim.h:12
 hmdcclusfitsim.h:13
 hmdcclusfitsim.h:14
 hmdcclusfitsim.h:15
 hmdcclusfitsim.h:16
 hmdcclusfitsim.h:17
 hmdcclusfitsim.h:18
 hmdcclusfitsim.h:19
 hmdcclusfitsim.h:20
 hmdcclusfitsim.h:21
 hmdcclusfitsim.h:22
 hmdcclusfitsim.h:23
 hmdcclusfitsim.h:24
 hmdcclusfitsim.h:25
 hmdcclusfitsim.h:26
 hmdcclusfitsim.h:27
 hmdcclusfitsim.h:28
 hmdcclusfitsim.h:29
 hmdcclusfitsim.h:30
 hmdcclusfitsim.h:31
 hmdcclusfitsim.h:32
 hmdcclusfitsim.h:33
 hmdcclusfitsim.h:34
 hmdcclusfitsim.h:35
 hmdcclusfitsim.h:36
 hmdcclusfitsim.h:37
 hmdcclusfitsim.h:38
 hmdcclusfitsim.h:39
 hmdcclusfitsim.h:40
 hmdcclusfitsim.h:41
 hmdcclusfitsim.h:42
 hmdcclusfitsim.h:43
 hmdcclusfitsim.h:44
 hmdcclusfitsim.h:45
 hmdcclusfitsim.h:46
 hmdcclusfitsim.h:47
 hmdcclusfitsim.h:48
 hmdcclusfitsim.h:49
 hmdcclusfitsim.h:50
 hmdcclusfitsim.h:51
 hmdcclusfitsim.h:52
 hmdcclusfitsim.h:53
 hmdcclusfitsim.h:54
 hmdcclusfitsim.h:55
 hmdcclusfitsim.h:56
 hmdcclusfitsim.h:57
 hmdcclusfitsim.h:58
 hmdcclusfitsim.h:59
 hmdcclusfitsim.h:60
 hmdcclusfitsim.h:61
 hmdcclusfitsim.h:62
 hmdcclusfitsim.h:63
 hmdcclusfitsim.h:64
 hmdcclusfitsim.h:65
 hmdcclusfitsim.h:66
 hmdcclusfitsim.h:67
 hmdcclusfitsim.h:68
 hmdcclusfitsim.h:69
 hmdcclusfitsim.h:70
 hmdcclusfitsim.h:71
 hmdcclusfitsim.h:72
 hmdcclusfitsim.h:73
 hmdcclusfitsim.h:74
 hmdcclusfitsim.h:75
 hmdcclusfitsim.h:76
 hmdcclusfitsim.h:77
 hmdcclusfitsim.h:78
 hmdcclusfitsim.h:79
 hmdcclusfitsim.h:80
 hmdcclusfitsim.h:81
 hmdcclusfitsim.h:82
 hmdcclusfitsim.h:83
 hmdcclusfitsim.h:84
 hmdcclusfitsim.h:85
 hmdcclusfitsim.h:86
 hmdcclusfitsim.h:87
 hmdcclusfitsim.h:88
 hmdcclusfitsim.h:89
 hmdcclusfitsim.h:90