ROOT logo
// $Id$
// Author: Akira Okumura 2007/09/24

/******************************************************************************
 * Copyright (C) 2006-, Akira Okumura                                         *
 * All rights reserved.                                                       *
 *****************************************************************************/

///////////////////////////////////////////////////////////////////////////////
//
// ARay
//
// Classical ray class
//
///////////////////////////////////////////////////////////////////////////////

#include "ARay.h"
#include "TMath.h"

ClassImp(ARay)

ARay::ARay()
{
  // Default constructor
  fLambda = 0;
  fDirection = TVector3(1, 0, 0);
  fStatus = kRun;
}

//_____________________________________________________________________________
ARay::ARay(Int_t id, Double_t lambda, Double_t x, Double_t y, Double_t z,
           Double_t t, Double_t nx, Double_t ny, Double_t nz)
  : TGeoTrack(id, 22 /*photon*/, 0, 0)
{
  // Constructor
  AddPoint(x, y, z, t);
  fLambda = lambda;
  SetDirection(nx, ny, nz);
  fStatus = kRun;
}

//_____________________________________________________________________________
ARay::~ARay()
{
}

//_____________________________________________________________________________
void ARay::GetDirection(Double_t* v) const
{
  fDirection.GetXYZ(v);
}

//_____________________________________________________________________________
void ARay::GetLastPoint(Double_t* x) const
{
  GetPoint(GetNpoints() - 1, x[0], x[1], x[2], x[3]);
}

//_____________________________________________________________________________
Bool_t ARay::IsAbsorbed() const
{
  if(fStatus == kAbsorb){
    return kTRUE;
  } // if

  return kFALSE;
}

//_____________________________________________________________________________
Bool_t ARay::IsExited() const
{
  if(fStatus == kExit){
    return kTRUE;
  } // if

  return kFALSE;
}

//_____________________________________________________________________________
Bool_t ARay::IsFocused() const
{
  if(fStatus == kFocus){
    return kTRUE;
  } // if

  return kFALSE;
}

//_____________________________________________________________________________
Bool_t ARay::IsRunning() const
{
  if(fStatus == kRun){
    return kTRUE;
  } // if

  return kFALSE;
}

//_____________________________________________________________________________
Bool_t ARay::IsStopped() const
{
  if(fStatus == kStop){
    return kTRUE;
  } // if

  return kFALSE;
}

//_____________________________________________________________________________
Bool_t ARay::IsSuspended() const
{
  if(fStatus == kSuspend){
    return kTRUE;
  } // if

  return kFALSE;
}

//_____________________________________________________________________________
TPolyLine3D* ARay::MakePolyLine3D() const
{
  TPolyLine3D* pol = new TPolyLine3D;

  for(Int_t i = 0; i < GetNpoints(); i++){
    Double_t x, y, z, t;
    GetPoint(i, x, y, z, t);
    pol->SetPoint(i, x, y, z);
  } // i

  return pol;
}

//_____________________________________________________________________________
void ARay::SetDirection(Double_t* d)
{
  Double_t mag = TMath::Sqrt(d[0]*d[0] + d[1]*d[1] +d[2]*d[2]);
  if(mag > 0){
    fDirection.SetXYZ(d[0]/mag, d[1]/mag, d[2]/mag);
  } // if
}

//_____________________________________________________________________________
void ARay::SetDirection(Double_t dx, Double_t dy, Double_t dz)
{
  Double_t mag = TMath::Sqrt(dx*dx + dy*dy + dz*dz);
  if(mag > 0){
    fDirection.SetXYZ(dx/mag, dy/mag, dz/mag);
  } // if
}
 ARay.cxx:1
 ARay.cxx:2
 ARay.cxx:3
 ARay.cxx:4
 ARay.cxx:5
 ARay.cxx:6
 ARay.cxx:7
 ARay.cxx:8
 ARay.cxx:9
 ARay.cxx:10
 ARay.cxx:11
 ARay.cxx:12
 ARay.cxx:13
 ARay.cxx:14
 ARay.cxx:15
 ARay.cxx:16
 ARay.cxx:17
 ARay.cxx:18
 ARay.cxx:19
 ARay.cxx:20
 ARay.cxx:21
 ARay.cxx:22
 ARay.cxx:23
 ARay.cxx:24
 ARay.cxx:25
 ARay.cxx:26
 ARay.cxx:27
 ARay.cxx:28
 ARay.cxx:29
 ARay.cxx:30
 ARay.cxx:31
 ARay.cxx:32
 ARay.cxx:33
 ARay.cxx:34
 ARay.cxx:35
 ARay.cxx:36
 ARay.cxx:37
 ARay.cxx:38
 ARay.cxx:39
 ARay.cxx:40
 ARay.cxx:41
 ARay.cxx:42
 ARay.cxx:43
 ARay.cxx:44
 ARay.cxx:45
 ARay.cxx:46
 ARay.cxx:47
 ARay.cxx:48
 ARay.cxx:49
 ARay.cxx:50
 ARay.cxx:51
 ARay.cxx:52
 ARay.cxx:53
 ARay.cxx:54
 ARay.cxx:55
 ARay.cxx:56
 ARay.cxx:57
 ARay.cxx:58
 ARay.cxx:59
 ARay.cxx:60
 ARay.cxx:61
 ARay.cxx:62
 ARay.cxx:63
 ARay.cxx:64
 ARay.cxx:65
 ARay.cxx:66
 ARay.cxx:67
 ARay.cxx:68
 ARay.cxx:69
 ARay.cxx:70
 ARay.cxx:71
 ARay.cxx:72
 ARay.cxx:73
 ARay.cxx:74
 ARay.cxx:75
 ARay.cxx:76
 ARay.cxx:77
 ARay.cxx:78
 ARay.cxx:79
 ARay.cxx:80
 ARay.cxx:81
 ARay.cxx:82
 ARay.cxx:83
 ARay.cxx:84
 ARay.cxx:85
 ARay.cxx:86
 ARay.cxx:87
 ARay.cxx:88
 ARay.cxx:89
 ARay.cxx:90
 ARay.cxx:91
 ARay.cxx:92
 ARay.cxx:93
 ARay.cxx:94
 ARay.cxx:95
 ARay.cxx:96
 ARay.cxx:97
 ARay.cxx:98
 ARay.cxx:99
 ARay.cxx:100
 ARay.cxx:101
 ARay.cxx:102
 ARay.cxx:103
 ARay.cxx:104
 ARay.cxx:105
 ARay.cxx:106
 ARay.cxx:107
 ARay.cxx:108
 ARay.cxx:109
 ARay.cxx:110
 ARay.cxx:111
 ARay.cxx:112
 ARay.cxx:113
 ARay.cxx:114
 ARay.cxx:115
 ARay.cxx:116
 ARay.cxx:117
 ARay.cxx:118
 ARay.cxx:119
 ARay.cxx:120
 ARay.cxx:121
 ARay.cxx:122
 ARay.cxx:123
 ARay.cxx:124
 ARay.cxx:125
 ARay.cxx:126
 ARay.cxx:127
 ARay.cxx:128
 ARay.cxx:129
 ARay.cxx:130
 ARay.cxx:131
 ARay.cxx:132
 ARay.cxx:133
 ARay.cxx:134
 ARay.cxx:135
 ARay.cxx:136
 ARay.cxx:137
 ARay.cxx:138
 ARay.cxx:139
 ARay.cxx:140
 ARay.cxx:141
 ARay.cxx:142
 ARay.cxx:143
 ARay.cxx:144
 ARay.cxx:145
 ARay.cxx:146
 ARay.cxx:147
 ARay.cxx:148
 ARay.cxx:149