ROOT logo
// $Id: WSTube.h 2597 2011-11-13 08:03:06Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

#ifndef Geom1_WSTube_H
#define Geom1_WSTube_H

#include <Glasses/WSSeed.h>
#include <TLorentzVector.h>
#include <TRandom.h>

#include <TMatrixD.h>

class WSTube : public WSSeed
{
  MAC_RNR_FRIENDS(WSTube);

public:
  enum ConnState_e { CS_Disconnected, CS_Connecting,
		     CS_Connected,    CS_Disconnecting };

  enum TransSource_e { TS_Links, TS_Transes };

  struct Traveler
  {
    ZNode*  fNode;
    Float_t fPosition;
    Float_t fVelocity;
    void*   fUserData;
    Bool_t  fShown;

    Traveler() : fNode(0) {}
    Traveler(ZNode* n, Float_t p, Float_t v, void* ud=0) :
      fNode(n), fPosition(p), fVelocity(v), fUserData(0), fShown(false) {}
    virtual ~Traveler() {}

    ClassDef(Traveler, 1);
  };

private:
  void _init();

protected:
  TransSource_e mTransSource;   // X{GS} 7 PhonyEnum()

  ZLink<ZNode>	mNodeA;		// X{GS} L{}
  ZLink<ZNode>	mNodeB;		// X{GS} L{}

  ZTrans        mTransA;        // X{r}
  ZTrans        mTransB;        // X{r}

  Bool_t        bWeakConnect;   // X{GS} 7 Bool()
  Float_t	mDefWidth;	// X{GS} 7 Value(-range=>[  0,1000, 1,1000], join=>1)
  Float_t	mDefSpread;	// X{GS} 7 Value(-range=>[-180,180, 1,1000], join=>1)
  Float_t	mDefTension;	// X{GS} 7 Value(-range=>[-10,10,1,100])

  TLorentzVector mVecA;		// X{GSRr} 7 LorentzVector()
  TLorentzVector mSgmA;		// X{GSRr} 7 LorentzVector()
  TLorentzVector mVecB;		// X{GSRr} 7 LorentzVector()
  TLorentzVector mSgmB;		// X{GSRr} 7 LorentzVector()

  TRandom       mRnd;

  void define_direction(ZTrans& t, const ZPoint& dr,
			const TLorentzVector& vec, const TLorentzVector& sgm);

public:
  WSTube(const Text_t* n="WSTube", const Text_t* t=0);
  virtual ~WSTube();

  virtual void AdEnlightenment();

  // TimeMakerClient (override from WSSeed)
  virtual void TimeTick(Double_t t, Double_t dt);

  // Connection and travelers
  //-------------------------
protected:
  Float_t     mDefVelocity; // X{GS} 7 Value(-range=>[0,1e3,1,1000], -join=>1)
  Float_t     mMinWaitTime; // X{GS} 7 Value(-range=>[0,1e3,1,1000])

  ConnState_e mConnectionStauts;   // X{GS} 7 PhonyEnum(-const=>1)
  Float_t     m_conn_time; //!
  Float_t     m_conn_vel;  //!
  TMatrixD*   m_conn_cof;  //!

  void connect(WSPoint*& ap, WSPoint*& bp);
  void disconnect();
  void assert_disconnect(const Exc_t& eh);
  void conn_travel(WSPoint* p, Double_t t);

public:
  void Connect();                             // X{E}  7 MButt(-join=>1)
  void Disconnect();                          // X{E}  7 MButt()
  void AnimateConnect(Float_t velocity=0);    // X{ED} 7 MCWButt(-join=>1)
  void AnimateDisconnect(Float_t velocity=0, Bool_t delay_p=false); // X{E}  7 MCWButt()

  // Travelers
  //----------
protected:
  list<Traveler>  m_traveler_list;
  ZLink<AList>    mTravelers;      // X{GS} L{} RnrBits{0,0,0,0, 0,0,0,5}
public:
  void TravelAtoB() { MakeTraveler( mDefVelocity); } // X{E} 7 MButt(-join=>1)
  void TravelBtoA() { MakeTraveler(-mDefVelocity); } // X{E} 7 MButt()
  void MakeTraveler(Float_t velocity=0, Float_t wait_time=0); // X{E} 7 MCWButt()

#include "WSTube.h7"
  ClassDef(WSTube, 1);
}; // endclass WSTube


#endif
 WSTube.h:1
 WSTube.h:2
 WSTube.h:3
 WSTube.h:4
 WSTube.h:5
 WSTube.h:6
 WSTube.h:7
 WSTube.h:8
 WSTube.h:9
 WSTube.h:10
 WSTube.h:11
 WSTube.h:12
 WSTube.h:13
 WSTube.h:14
 WSTube.h:15
 WSTube.h:16
 WSTube.h:17
 WSTube.h:18
 WSTube.h:19
 WSTube.h:20
 WSTube.h:21
 WSTube.h:22
 WSTube.h:23
 WSTube.h:24
 WSTube.h:25
 WSTube.h:26
 WSTube.h:27
 WSTube.h:28
 WSTube.h:29
 WSTube.h:30
 WSTube.h:31
 WSTube.h:32
 WSTube.h:33
 WSTube.h:34
 WSTube.h:35
 WSTube.h:36
 WSTube.h:37
 WSTube.h:38
 WSTube.h:39
 WSTube.h:40
 WSTube.h:41
 WSTube.h:42
 WSTube.h:43
 WSTube.h:44
 WSTube.h:45
 WSTube.h:46
 WSTube.h:47
 WSTube.h:48
 WSTube.h:49
 WSTube.h:50
 WSTube.h:51
 WSTube.h:52
 WSTube.h:53
 WSTube.h:54
 WSTube.h:55
 WSTube.h:56
 WSTube.h:57
 WSTube.h:58
 WSTube.h:59
 WSTube.h:60
 WSTube.h:61
 WSTube.h:62
 WSTube.h:63
 WSTube.h:64
 WSTube.h:65
 WSTube.h:66
 WSTube.h:67
 WSTube.h:68
 WSTube.h:69
 WSTube.h:70
 WSTube.h:71
 WSTube.h:72
 WSTube.h:73
 WSTube.h:74
 WSTube.h:75
 WSTube.h:76
 WSTube.h:77
 WSTube.h:78
 WSTube.h:79
 WSTube.h:80
 WSTube.h:81
 WSTube.h:82
 WSTube.h:83
 WSTube.h:84
 WSTube.h:85
 WSTube.h:86
 WSTube.h:87
 WSTube.h:88
 WSTube.h:89
 WSTube.h:90
 WSTube.h:91
 WSTube.h:92
 WSTube.h:93
 WSTube.h:94
 WSTube.h:95
 WSTube.h:96
 WSTube.h:97
 WSTube.h:98
 WSTube.h:99
 WSTube.h:100
 WSTube.h:101
 WSTube.h:102
 WSTube.h:103
 WSTube.h:104
 WSTube.h:105
 WSTube.h:106
 WSTube.h:107
 WSTube.h:108
 WSTube.h:109
 WSTube.h:110
 WSTube.h:111
 WSTube.h:112
 WSTube.h:113
 WSTube.h:114
 WSTube.h:115