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

/* $Id$ */
///////////////////////////////////////////////////////////////////////
//                                                                   //
//  Class AliITSmodule                                               //
//  is a superclass for AliITSmoduleSSD, SPD and SDD.                //
//  The main function of modules is to simulate DIGITS from          //
//  GEANT HITS and produce POINTS from DIGITS                        //
//  It also make fast simulation without use of DIGITS               //
//                                                                   //
//  created by: A.Boucham, W.Peryt, S.Radomski, P.Skowronski         //
//              R.Barbera, B. Batynia, B. Nilsen                     //
//  ver. 1.0    CERN, 16.09.1999                                     //
//                                                                   //
///////////////////////////////////////////////////////////////////////

#include <TObject.h>
#include <TObjArray.h>
#include <TArrayI.h>  // used in inline functions GetHitTrackIndex,GetHitHitIndex, and GetHitTrackAndHitIndex.

class AliITS;
class AliITShit;


class AliITSmodule:public TObject{


 public:
    //________________________________________________________________
    //
    // Constructors and deconstructor
    //________________________________________________________________
    // 
    AliITSmodule();             // default constructor
    AliITSmodule(Int_t index);  //index in TObjectArray in ITS object
    virtual ~AliITSmodule();

    //________________________________________________________________
    //
    // Position managenent (id's getters)
    //________________________________________________________________
    //

    Int_t GetIndex()  const { 
      // get index
      return fIndex;
    }
    void  GetID(Int_t &lay,Int_t &lad,Int_t &det);
    Int_t GetLayer() {
      // get layer
      Int_t i,j,k;GetID(i,j,k);return i;
    }
    Int_t GetLadder(){
      // get ladder
      Int_t i,j,k;GetID(i,j,k);return j;
    }
    Int_t GetDet(){
      // get det
      Int_t i,j,k;GetID(i,j,k);return k;
    }
    //________________________________________________________________
    //
    // Hits management
    //________________________________________________________________
    //
    Int_t GetNhits()   const { 
      // get num of hits
      return fHitsM->GetEntriesFast();
    }
    AliITS *GetITS() const { 
      // get ITS
      return fITS;
    }
    TObjArray *GetHits() const { 
      // get hits
      return fHitsM; 
    }
    AliITShit *GetHit(Int_t i) { 
    // returns pointer to array (TClonesArray) of pointers to hits
      return (AliITShit*)fHitsM->At(i);
    }
    // Adds pointer of hit belonging to this module
    // and returns number of hits in this module
    Int_t  AddHit(AliITShit *hit,Int_t TrackIndex,Int_t HitIndex);
    Int_t GetHitTrackIndex(Int_t i) {// get hit track index
	return fTrackIndex->At(i);}
    Int_t GetHitHitIndex(Int_t i) { 
	// return the hit index number in TreeH for the given sorted hit in
	// the module.
	return fHitIndex->At(i);}
    void GetHitTrackAndHitIndex(Int_t i,Int_t &TrackIndex,Int_t &HitIndex) {
    // return the hit index number for the given hit. Hits are kept on
    // file according to their track index and hit index numbers.
      TrackIndex = fTrackIndex->At(i);HitIndex = fHitIndex->At(i);}
    // Computes mean global location from hits that make up a track passing
    // through a volume.
    Bool_t MedianHitG(AliITShit *h1,AliITShit *h2,
		      Float_t &x,Float_t &y,Float_t &z);
    void MedianHitG(Int_t index, Float_t hitx1,Float_t hity1,Float_t hitz1, 
                    Float_t hitx2,Float_t hity2,Float_t hitz2, Float_t &xMg, 
                    Float_t &yMg, Float_t &zMg);
    // Computes mean local location from hits that make up a track passing
    // through a volume.
    Bool_t MedianHitL(AliITShit *h1,AliITShit *h2,
		      Float_t &x,Float_t &y,Float_t &z) const;
    void MedianHitL(Int_t,AliITShit *,AliITShit *,Float_t &,Float_t &,
		    Float_t &){};
    Double_t PathLength(const AliITShit *itsHit1,const AliITShit *itsHit2);
    // returns both the track and hit index numbers for the given hit. Hits
    // are kept on file according to their track index and hit index numbers.
    void MedianHit(Int_t index, Float_t xg,Float_t yg,Float_t zg,
                   Int_t status,Float_t &xMg, Float_t &yMg, Float_t &zMg,
	       	    	           Int_t &flag);
    void PathLength(Float_t x,Float_t y,Float_t z,Int_t status,
                    Int_t &nseg,Float_t &x1,Float_t &y1,Float_t &z1,
		    Float_t &dx1,Float_t &dy1, Float_t &dz1,Int_t &flag) const;
    Bool_t LineSegmentL(Int_t hindex,Double_t &a,Double_t &b, 
			Double_t &c,Double_t &d,Double_t &e,Double_t &f,
			Double_t &de);
    Bool_t LineSegmentL(Int_t hindex,Double_t &a,Double_t &b,
			Double_t &c,Double_t &d,Double_t &e,Double_t &f,
			Double_t &de,Int_t &track);
    // if returns kTRUE; gives the parameterization of the line segment
    // from this step. x=a+b*t, y=c+d*t, and z=e+f*t for 0.0t<=1.0 and the
    // energy lost during this step all in the local detector coordinates.
    // if returns kFALSE; this is a begining step and no energy loss has
    // occured. This step is used to set up the next steps. Do not use
    // this parameterization.
    Bool_t LineSegmentG(Int_t hindex,Double_t &a,Double_t &b,
			Double_t &c,Double_t &d,Double_t &e,Double_t &f,
			Double_t &de);
    Bool_t LineSegmentG(Int_t hindex,Double_t &a,Double_t &b,
			Double_t &c,Double_t &d,Double_t &e,Double_t &f,
			Double_t &de,Int_t &track);
    // if returns kTRUE; gives the parameterization of the line segment
    // from this step. x=a+b*t, y=c+d*t, and z=e+f*t for 0.0t<=1.0 and the
    // energy lost during this step all in the global detector coordinates.
    // if returns kFALSE; this is a begining step and no energy loss has
    // occured. This step is used to set up the next steps. Do not use
    // this parameterization.

 protected:
    AliITSmodule(const AliITSmodule &source); 
    AliITSmodule& operator=(const AliITSmodule &source); 
    //________________________________________________________________
    //
    // Data members
    //________________________________________________________________
    //
    AliITS       *fITS;       // Pointer to ITS detector
    Int_t         fIndex;      //Index of this module in ITSmodules TObjectArray
    TObjArray    *fHitsM;     // Pointer to list of hits on this module
    TArrayI      *fTrackIndex; // track index
    TArrayI      *fHitIndex; // hit index

    ClassDef(AliITSmodule,0) // Copy the hits into a more useful order
	// Version set to zero so that we do not write out this class.
};

#endif



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