ROOT logo
#ifndef ALIITSV11GEOMCABLE_H
#define ALIITSV11GEOMCABLE_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */


class TGeoVolume;
class TGeoNode;

#include <TObjArray.h>

//*************************************************************************
//   Base class of cable classes
//
//
// Ludovic Gaudichet                                   gaudichet@to.infn.it
//*************************************************************************


class AliITSv11GeomCable : public TNamed {

 public:
  AliITSv11GeomCable();
  AliITSv11GeomCable(const char* name);

  virtual ~AliITSv11GeomCable();
  void SetDebug(Int_t debug = 1) {fDebug = debug;};

  void  SetInitialNode(TGeoVolume *vol);
  void  ResetInitialNode();

  void  AddCheckPoint( TGeoVolume *vol, Int_t iCheckPt, Double_t *coord);
  virtual Int_t       GetNCheckPoints() const;
  virtual Int_t       GetPoint(Int_t iCheckPt, Double_t *coord) const;
  virtual Int_t       GetVect(Int_t iCheckPt, Double_t *coord) const;
  virtual TGeoVolume* GetVolume( Int_t iCheckPt ) const;

  virtual Int_t       GetCheckPoint( Int_t iCheckPt, Int_t nOccur,
				     Int_t motherLevel, Double_t *coord);
  virtual Int_t       GetCheckVect( Int_t iCheckPt, Int_t nOccur,
				    Int_t motherLevel, Double_t *coord);
  virtual Int_t       GetCheckVect( const Double_t *localCoord,
				    TGeoVolume *vol, Int_t nOccur,
				    Int_t motherLevel, Double_t *coord);
  void ResetPoints();

 protected:
  AliITSv11GeomCable(const AliITSv11GeomCable &source);
  AliITSv11GeomCable& operator=(const AliITSv11GeomCable &source);
  bool     CheckDaughter(const TGeoNode* node, Int_t i = 0);
  void     ResetCheckDaughter();
  void     CopyFrom(Double_t *c, const Double_t *o) const;
  Double_t ScalProd(const Double_t *a, const Double_t *b) const;

  static const Int_t fgkCableMaxNodeLevel = 50; // max. number of levels
  static const Int_t fgkCableMaxLayer = 15;     // max. number of layers

  Int_t fDebug;                         // debug flag
  Int_t fNodeInd[fgkCableMaxNodeLevel]; // index of nodes in the node tree
  TObjArray fPointArray;                // array of points
  TObjArray fVolumeArray;               // volumes containing the points
  TGeoVolume *fCurrentVol;              // volume to search in the node tree
  TGeoNode *fInitialNode;               // initial node to start searching

  ClassDef(AliITSv11GeomCable,1)
};

inline Int_t AliITSv11GeomCable::GetNCheckPoints() const{
  return fVolumeArray.GetEntriesFast(); }

inline void AliITSv11GeomCable::ResetCheckDaughter() {
  for (Int_t i=0; i<fgkCableMaxNodeLevel; i++) fNodeInd[i] = -1; }

inline void AliITSv11GeomCable::CopyFrom(Double_t *c, const Double_t *o)
const { *(c++)=*(o++); *(c++)=*(o++); *c=*o; }

inline Double_t AliITSv11GeomCable::ScalProd(const Double_t *a,
						const Double_t *b) const {
  Double_t s = *(a++)*(*(b++)); s+=*(a++)*(*(b++)); s+=*a*(*b);
  return s;
}





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