ROOT logo
#ifndef ALIITSALIGNMILLEMODULE_H
#define ALIITSALIGNMILLEMODULE_H 
/* Copyright(c) 2007-2009 , ALICE Experiment at CERN, All rights reserved. * 
 * See cxx source for full Copyright notice                               */  
 
/// \ingroup rec 
/// \class AliITSAlignMilleModule 
/// \brief Class for alignment of ITS 
// 
// Authors: Marcello Lunardon 

/* $Id$  */ 
//#include <TString.h> 
//#include <TObject.h> 
#include <TNamed.h> 


class AliAlignObjParams; 
class TGeoHMatrix; 

class AliITSAlignMilleModule : public TNamed 
{ 
public: 
  AliITSAlignMilleModule(); 
  AliITSAlignMilleModule(UShort_t volid); // basic single volume constructor
  AliITSAlignMilleModule(Int_t index, UShort_t volid, char* symname, const TGeoHMatrix *m, Int_t nsv=0, const UShort_t *volidsv=NULL); // general constructor

  AliITSAlignMilleModule(const AliITSAlignMilleModule& rhs); // copy constructor
  AliITSAlignMilleModule& operator=(const AliITSAlignMilleModule& rhs);  
    
  virtual ~AliITSAlignMilleModule(); 
   
  // geometry methods  
  Int_t     GetIndex() const {return fIndex;} 
  UShort_t  GetVolumeID() const {return fVolumeID;}  
  Int_t     GetNSensitiveVolumes() const {return fNSensVol;} 
  TGeoHMatrix *GetMatrix() const {return fMatrix;} 
  const UShort_t *GetSensitiveVolumeVolumeID() const {return fSensVolVolumeID;}

  Int_t     Set(Int_t index, UShort_t volid, char* symname, const TGeoHMatrix * const m, Int_t nsv=0, const UShort_t *volidsv=NULL); // initialize a super module
  
  // util
  static Int_t GetIndexFromVolumeID(UShort_t volid);
  static UShort_t GetVolumeIDFromSymname(const Char_t *symname);
  static UShort_t GetVolumeIDFromIndex(Int_t index);

  // methods
  Bool_t    IsIn(UShort_t volid) const;
  TGeoHMatrix *GetSensitiveVolumeMatrix(UShort_t voluid);
  TGeoHMatrix *GetSensitiveVolumeOrigGlobalMatrix(UShort_t voluid);
  TGeoHMatrix *GetSensitiveVolumeModifiedMatrix(UShort_t voluid, const Double_t * const deltalocal); 
  AliAlignObjParams *GetSensitiveVolumeMisalignment(UShort_t voluid, const AliAlignObjParams *a); 
  AliAlignObjParams *GetSensitiveVolumeMisalignment(UShort_t voluid, const Double_t * const deltalocal); 
  // forse non serve...
  AliAlignObjParams *GetSensitiveVolumeGlobalMisalignment(UShort_t voluid, const Double_t * const deltalocal); 
  // mo' proviamo questo
  AliAlignObjParams *GetSensitiveVolumeTotalMisalignment(UShort_t voluid, const Double_t * const deltalocal); 
  void      Print(Option_t*) const; 

protected:
  Int_t     SensVolMatrix(UShort_t volid, TGeoHMatrix *m); 
  Int_t     SensVolOrigGlobalMatrix(UShort_t volid, TGeoHMatrix *m); 
  void      AddSensitiveVolume(UShort_t volid);

private:
  static const Int_t fgkSensModules = 2198; // number of sensors
  Int_t          fNSensVol; ///
  Int_t          fIndex; ///
  UShort_t       fVolumeID; ///
  // il symname e' il nome del TNamed...
  Int_t          fSensVolIndex[fgkSensModules]; ///
  UShort_t       fSensVolVolumeID[fgkSensModules]; ///
  TGeoHMatrix   *fMatrix; /// ideal TGeoHMatrix of the supermodule
  TGeoHMatrix   *fSensVolMatrix; ///
  TGeoHMatrix   *fSensVolModifMatrix; ///
  AliAlignObjParams *fTempAlignObj; ///
	
  ClassDef(AliITSAlignMilleModule, 0)

}; 

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