SingleParticleEvent

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
#ifndef SingleParticleEvent_h
#define SingleParticleEvent_h
//
// SingleParticleEvent by droll (23/DEC/2005)
//

// include files
#include "GeneratorInterface/CosmicMuonGenerator/interface/CosmicMuonParameters.h"
#include "GeneratorInterface/CosmicMuonGenerator/interface/Point5MaterialMap.h"
#include <iostream>

class SingleParticleEvent {
public:
  // constructor
  SingleParticleEvent() {
    ID = 0;
    Px = 0.;
    Py = 0.;
    Pz = 0.;
    E = 0.;
    M = 0.;
    Vx = 0.;
    Vy = 0.;
    Vz = 0.;
    T0 = 0.;
    ID_in = 0;
    Px_in = 0.;
    Py_in = 0.;
    Pz_in = 0.;
    E_in = 0.;
    M_in = 0.;
    Vx_in = 0.;
    Vy_in = 0.;
    Vz_in = 0.;
    T0_in = 0.;
    HitTarget = false;
    PlugVx = PlugOnShaftVx;
    PlugVz = PlugOnShaftVz;
    RhoAir = 0.;
    RhoWall = 0.;
    RhoRock = 0.;
    RhoClay = 0.;
    RhoPlug = 0.;
    ClayWidth = DefaultClayWidth;
  }
  // destructor
  ~SingleParticleEvent() {}

private:
  int ID;
  double Px;
  double Py;
  double Pz;
  double E;
  double M;
  double Vx;
  double Vy;
  double Vz;
  double T0;
  int ID_in;
  double Px_in;
  double Py_in;
  double Pz_in;
  double E_in;
  double M_in;
  double Vx_in;
  double Vy_in;
  double Vz_in;
  double T0_in;
  bool HitTarget;
  bool MTCC;

  // other stuff
  double dX;
  double dY;
  double dZ;
  double tmpVx;
  double tmpVy;
  double tmpVz;
  // update event during propagation
  void update(double stepSize);
  // temporary propagation
  void updateTmp(double stepSize);
  void subtractEloss(double waterEquivalents);  // update 4momentum
  double absVzTmp();                            // |Vz| [mm]
  double rVxyTmp();                             // R_XY [mm]

public:
  // create (initialize) an event with a single particle
  void create(int id, double px, double py, double pz, double e, double m, double vx, double vy, double vz, double t0);
  // propagate particle to target area
  void propagate(double ElossScaleFac,
                 double RadiusTarget,
                 double Z_DistTarget,
                 double Z_CentrTarget,
                 bool TrackerOnly,
                 bool MTCCHalf);
  double Eloss(double waterEquivalents, double Energy);  //return Eloss
  // particle has hit the target volume (during propagation)
  bool hitTarget();
  // event info (direct access)
  //initial state mother particle
  int id_in();                // [HEP particle code]
  double px_in();             // [GeV/c]
  double py_in();             // [GeV/c]
  double pz_in();             // [GeV/c]
  double e_in();              // [GeV]
  double m_in();              // [GeV/c^2]
  double vx_in();             // [mm]
  double vy_in();             // [mm]
  double vz_in();             // [mm]
  double t0_in();             // [mm/c] with c = 299.792458 mm/ns
  double WaterEquivalents();  //[g cm^-2]

  //final state daughter particles
  int id();     // [HEP particle code]
  double px();  // [GeV/c]
  double py();  // [GeV/c]
  double pz();  // [GeV/c]
  double e();   // [GeV]
  double m();   // [GeV/c^2]
  double vx();  // [mm]
  double vy();  // [mm]
  double vz();  // [mm]
  double t0();  // [mm/c] with c = 299.792458 mm/ns
  // event info (calculated)
  double phi();     // in horizontal (x-z) plane [rad]
  double theta();   // off vertical    (y) axis  [rad]
  double absmom();  // |p| [GeV/c]
  double absVz();   // |Vz| [mm]
  double rVxy();    // R_XY [mm]

  void setEug(double Eug);          // [GeV]
  double Eug();                     // [GeV/c]
  double deltaEmin(double Energy);  // [GeV]
  void SurfProj(double Vx_in,
                double Vy_in,
                double Vz_in,
                double Px_in,
                double Py_in,
                double Pz_in,
                double& Vx_up,
                double& Vy_up,
                double& Vz_up);

  double PlugVx;
  double PlugVz;
  double RhoAir;
  double RhoWall;
  double RhoRock;
  double RhoClay;
  double RhoPlug;
  double ClayWidth;
  double waterEquivalents;
  double E_ug;
};
#endif