class HMdcSizesCells: public TObject

_HADES_CLASS_DESCRIPTION


  HMdcSizesCells
  HMdcSizesCellsSec
  HMdcSizesCellsMod
  HMdcSizesCellsLayer
  HMdcSizesCellsCell

  Creating the container and geting the pointer to cont.:
  HMdcSizesCells* fSizesCells=HMdcSizesCells::getObject();

  Geting the pointer to cont. (without creating):
  HMdcSizesCells* fSizesCells=HMdcSizesCells::getExObject();

  Deleting of container:
  HMdcSizesCells::deleteCont();

  Container class keep volumes sizes of wires (2-points/wire)
  in coordinate system of sector and transformations layer<->mod,
  layer<->sec, ...
  It has same useful functions:
  HMdcSizesCellsCell
    Float_t getWireLength(void)

  HMdcSizesCellsLayer:
    HGeomTransform* getSecTrans();
    HGeomTransform* getModTrans();
    void transSecToRotLayer(HGeomVector& point);
    Double_t getAlpha(const HGeomVector& p1, const HGeomVector& p2);
    Double_t getDist(const HGeomVector& p1,
                     const HGeomVector& p2, Int_t cell);
    void getImpact(const HGeomVector& p1, const HGeomVector& p2,
                  Int_t cell, Double_t &alpha, Double_t &per);
    Double_t getImpact(Double_t x1,Double_t y1,Double_t z1,
        Double_t x2,Double_t y2,Double_t z2, Int_t cell, Double_t &alphaPerp);
    Bool_t getImpact(Double_t x1,Double_t y1,Double_t z1,
        Double_t x2, Double_t y2, Double_t z2,
        Int_t cell, Double_t &alphaDrDist, Double_t &driftDist);
    Int_t getCellNum(Double_t x, Double_t y):
      calculation the the cell number for the point x,y
      on the wire plane. (x,y - in coor. sys. of layer, z=0)
    Double_t getXSign(Double_t x1, Double_t y1, Double_t z1,
        Double_t x2, Double_t y2, Double_t z2, Int_t cell)
    Float_t getSignPath(Double_t x1,Double_t y1,Double_t z1,
        Double_t x2, Double_t y2, Double_t z2, Int_t cell);
    Float_t getSignPath(Double_t x1,Double_t y1,Double_t z1,
        Double_t x2, Double_t y2, Double_t z2, Int_t cell, Float_t& outside);

  HMdcSizesCellsMod:
    HGeomTransform* getSecTrans();

  HMdcSizesCellsSec:
    HGeomTransform* getLabTrans();

  HMdcSizesCells:
    Bool_t getCellVol(Int_t sec, Int_t mod, Int_t lay,
        Int_t cell, HMdcTrap& volCell);
    Char_t findReadOutSide(Int_t s,Int_t m,Int_t l,Int_t c)


Function Members (Methods)

public:
HMdcSizesCells(const HMdcSizesCells&)
voidTObject::AbstractMethod(const char* method) const
virtual voidTObject::AppendPad(Option_t* option = "")
virtual voidTObject::Browse(TBrowser* b)
static voidcalcMdcSeg(Double_t x1, Double_t y1, Double_t z1, Double_t x2, Double_t y2, Double_t z2, Double_t& zm, Double_t& r0, Double_t& theta, Double_t& phi)
static voidcalcMdcSeg(Double_t x1, Double_t y1, Double_t z1, Double_t x2, Double_t y2, Double_t z2, Double_t eX1, Double_t eY1, Double_t eZ1, Double_t eX2, Double_t eY2, Double_t dZ1dX1, Double_t dZ1dY1, Double_t dZ2dX2, Double_t dZ2dY2, Double_t& zm, Double_t& eZm, Double_t& r0, Double_t& eR0, Double_t& theta, Double_t& eTheta, Double_t& phi, Double_t& ePhi)
static voidcalcRZToLineXY(Double_t x1, Double_t y1, Double_t z1, Double_t x2, Double_t y2, Double_t z2, Double_t xBeam, Double_t yBeam, Double_t& zm, Double_t& r0)
voidcalcRZToTargLine(Double_t x1, Double_t y1, Double_t z1, Double_t x2, Double_t y2, Double_t z2, Double_t& zm, Double_t& r0) const
static TClass*Class()
virtual const char*TObject::ClassName() const
voidclear()
virtual voidTObject::Clear(Option_t* = "")
virtual TObject*TObject::Clone(const char* newname = "") const
virtual Int_tTObject::Compare(const TObject* obj) const
virtual voidTObject::Copy(TObject& object) const
static voidcopyTransfToArr(const HGeomTransform& trans, Double_t* arr)
virtual voidTObject::Delete(Option_t* option = "")MENU
static voiddeleteCont()
virtual Int_tTObject::DistancetoPrimitive(Int_t px, Int_t py)
virtual voidTObject::Draw(Option_t* option = "")
virtual voidTObject::DrawClass() constMENU
virtual TObject*TObject::DrawClone(Option_t* option = "") constMENU
virtual voidTObject::Dump() constMENU
virtual voidTObject::Error(const char* method, const char* msgfmt) const
virtual voidTObject::Execute(const char* method, const char* params, Int_t* error = 0)
virtual voidTObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0)
virtual voidTObject::ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual voidTObject::Fatal(const char* method, const char* msgfmt) const
Bool_tfillModCont(Int_t sec, Int_t mod, Double_t* corr)
Bool_tfillModCont(Int_t sec, Int_t mod, HGeomTransform* alignTrans = 0, Int_t sysOfAlignTrans = 0)
virtual TObject*TObject::FindObject(const char* name) const
virtual TObject*TObject::FindObject(const TObject* obj) const
Char_tfindReadOutSide(Int_t s, Int_t m, Int_t l, Int_t c) const
Bool_tgetCellVol(Int_t sec, Int_t mod, Int_t lay, Int_t cell, HMdcTrap& volCell, Double_t sizeFactor = -1.) const
virtual Option_t*TObject::GetDrawOption() const
static Long_tTObject::GetDtorOnly()
static HMdcSizesCells*getExObject()
virtual const char*TObject::GetIconName() const
virtual const char*TObject::GetName() const
Int_tgetNumOfTargets() const
static HMdcSizesCells*getObject()
virtual char*TObject::GetObjectInfo(Int_t px, Int_t py) const
static Bool_tTObject::GetObjectStat()
virtual Option_t*TObject::GetOption() const
Int_tgetSize() const
const HGeomVector&getTargetFirstPoint() const
const HGeomVector&getTargetLastPoint() const
const HGeomVector&getTargetMiddlePoint() const
HGeomVector&getTargetP(Int_t p)
HGeomVector*getTargets()
virtual const char*TObject::GetTitle() const
virtual UInt_tTObject::GetUniqueID() const
virtual Bool_tTObject::HandleTimer(TTimer* timer)
Bool_thasChanged() const
virtual ULong_tTObject::Hash() const
virtual voidTObject::Info(const char* method, const char* msgfmt) const
virtual Bool_tTObject::InheritsFrom(const char* classname) const
virtual Bool_tTObject::InheritsFrom(const TClass* cl) const
Bool_tinitContainer()
virtual voidTObject::Inspect() constMENU
voidTObject::InvertBit(UInt_t f)
virtual TClass*IsA() const
virtual Bool_tTObject::IsEqual(const TObject* obj) const
virtual Bool_tTObject::IsFolder() const
Bool_tTObject::IsOnHeap() const
virtual Bool_tTObject::IsSortable() const
Bool_tTObject::IsZombie() const
virtual voidTObject::ls(Option_t* option = "") const
voidTObject::MayNotUse(const char* method) const
Bool_tmodStatus(Int_t s, Int_t m) const
Bool_t*modStatusArr(Int_t s)
Int_tnCells(Int_t s, Int_t m, Int_t l) const
Int_tnModInSeg(Int_t s, Int_t seg) const
virtual Bool_tTObject::Notify()
static voidTObject::operator delete(void* ptr)
static voidTObject::operator delete(void* ptr, void* vp)
static voidTObject::operator delete[](void* ptr)
static voidTObject::operator delete[](void* ptr, void* vp)
void*TObject::operator new(size_t sz)
void*TObject::operator new(size_t sz, void* vp)
void*TObject::operator new[](size_t sz)
void*TObject::operator new[](size_t sz, void* vp)
HMdcSizesCells&operator=(const HMdcSizesCells&)
HMdcSizesCellsSec&operator[](Int_t i) const
virtual voidTObject::Paint(Option_t* option = "")
virtual voidTObject::Pop()
virtual voidTObject::Print(Option_t* option = "") const
virtual Int_tTObject::Read(const char* name)
virtual voidTObject::RecursiveRemove(TObject* obj)
voidTObject::ResetBit(UInt_t f)
static voidrotateDir(const HGeomRotation& rot, const HGeomVector& d, Double_t& dy, Double_t& dz)
static voidrotateDir(const HGeomRotation& rot, const HGeomVector& d, Double_t& dx, Double_t& dy, Double_t& dz)
static voidrotateXYZ(const HGeomRotation& rot, Double_t xi, Double_t yi, Double_t zi, Double_t& xo, Double_t& yo, Double_t& zo)
static voidrotateYZ(const HGeomRotation& rot, Double_t xi, Double_t yi, Double_t zi, Double_t& yo, Double_t& zo)
virtual voidTObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU
virtual voidTObject::SavePrimitive(basic_ostream<char,char_traits<char> >& out, Option_t* option = "")
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
virtual voidTObject::SetDrawOption(Option_t* option = "")MENU
static voidTObject::SetDtorOnly(void* obj)
voidsetGeomModifiedFlag()
voidsetNotGeomModified()
static voidTObject::SetObjectStat(Bool_t stat)
static voidsetTransform(Double_t* par, HGeomTransform& trans)
virtual voidTObject::SetUniqueID(UInt_t uid)
virtual voidShowMembers(TMemberInspector& insp, char* parent)
virtual voidStreamer(TBuffer& b)
voidStreamerNVirtual(TBuffer& b)
virtual voidTObject::SysError(const char* method, const char* msgfmt) const
Bool_tTObject::TestBit(UInt_t f) const
Int_tTObject::TestBits(UInt_t f) const
voidtransLineToAnotherSec(HMdcLineParam& ln, Int_t anotherSec)
voidtransLineToOtherSec(const HMdcLineParam& ln, Int_t sec, HGeomVector& p1, HGeomVector& p2)
virtual voidTObject::UseCurrentStyle()
virtual voidTObject::Warning(const char* method, const char* msgfmt) const
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0)
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const
protected:
virtual voidTObject::DoError(int level, const char* location, const char* fmt, va_list va) const
voidTObject::MakeZombie()
private:
HMdcSizesCells()
(unknown)()
Bool_tfillCont(Int_t sec)
Bool_tfillTargetPos(HGeomVector* targetShift = 0)
Bool_tmodOk(Int_t m) const
Bool_tsecOk(Int_t s) const
Bool_tsegOk(Int_t sg) const

Data Members

public:
enum TObject::EStatusBits { kCanDelete
kMustCleanup
kObjInCanvas
kIsReferenced
kHasUUID
kCannotPick
kNoContextMenu
kInvalidObject
};
enum TObject::[unnamed] { kIsOnHeap
kNotDeleted
kZombie
kBitMask
kSingleKey
kOverwrite
kWriteDelete
};
protected:
TObjArray*arrayarray of pointers to HMdcSizesCellsSec
Bool_tchangedkTRUE if SizesCells was recalculated
HMdcGeomPar*fGeomPar
HMdcGetContainers*fGetCont
HMdcLayerCorrPar*fLayerCorrPar
HMdcLayerGeomPar*fLayerGeomPar
HMdcDetector*fMdcDet
HMdcGeomStruct*fMdcGeomStruct
HMdcLookupRaw*fMdcLookupRaw
HMdcRawStruct*fMdcRawStruct
static HMdcSizesCells*fMdcSizesCells
HSpecGeomPar*fSpecGeomPar
Bool_tgeomModifiedkTRUE if mdc geom. was changed by user
Bool_tmdcStatus[6][4]kTRUE - mdc exist
Int_tnModsSeg[6][2]number of mdc per segment
Int_tnumTargetsnumber of targets
HGeomVectortarg3p[3][0] First point of target in lab.sys.
HGeomVector*targetstargets
Int_tverGeomPar[3]
Int_tverLayerGeomPar[3]
Int_tverLookupRaw[3]

Class Charts

Inheritance Inherited Members Includes Libraries
Class Charts

Function documentation

HMdcSizesCells(const HMdcSizesCells& )
 constructor creates an array of pointers of type HMdcSizesCellsSec
Bool_t initContainer(void)
HMdcSizesCells* getObject(void)
void deleteCont(void)
Int_t getSize(void)
 return the size of the pointer array
void clear(void)
 clears the container
Bool_t fillCont(Int_t sec)
 calculation of the container HMdcSizesCells
 with wire's sizes (2-pint) in coordinate system of sector.
Bool_t fillModCont(Int_t sec, Int_t mod, HGeomTransform* alignTrans = 0, Int_t sysOfAlignTrans = 0)
 filling HMdcSizesCellsMod, HMdcSizesCellsLayer, HMdcSizesCellsCell
 objects for MDC module "mod" in sector "sec".
 if alignTrans>0 - correction of mdc position (must be done after
 filling HMdcSizesCells!)
 sysOfAlignTrans =0 transform mdc coor.sys. by "alignTrans" respect
                    coor.sys.of sector
                 =1 transform mdc coor.sys. by "alignTrans" respect
                    coor.sys.of mdc module
                 =2 transform mdc coor.sys. by "alignTrans" respect
                    lab.coor.sys.
Bool_t fillModCont(Int_t sec, Int_t mod, Double_t* corr)
 filling HMdcSizesCellsMod, HMdcSizesCellsLayer, HMdcSizesCellsCell
 objects for MDC module "mod" in sector "sec"
Bool_t getCellVol(Int_t sec, Int_t mod, Int_t lay, Int_t cell, HMdcTrap& volCell, Double_t sizeFactor = -1.) const
 Return the cell volume as HMdcTrap (8 points) in sector(!) coordinate sys..
 Use "sizeFactor" param. for drawing purpose only.
 This parameter increase Y and Z cell size on this factor.
Char_t findReadOutSide(Int_t s, Int_t m, Int_t l, Int_t c) const
 Function to get the side from which the corresponding wire is read out.
 Function return values are 'L' for left, 'R' for right, 'U' for top
 and '0' for GEANT data and not connected wires.
Bool_t fillTargetPos(HGeomVector* targetShift = 0)
 Filling target parameters
void calcMdcSeg(Double_t x1, Double_t y1, Double_t z1, Double_t x2, Double_t y2, Double_t z2, Double_t eX1, Double_t eY1, Double_t eZ1, Double_t eX2, Double_t eY2, Double_t dZ1dX1, Double_t dZ1dY1, Double_t dZ2dX2, Double_t dZ2dY2, Double_t& zm, Double_t& eZm, Double_t& r0, Double_t& eR0, Double_t& theta, Double_t& eTheta, Double_t& phi, Double_t& ePhi)
 Calcul. a HMdcSeg hit.
 Input and output are in sector coor.sys.
 theta=atan(TMath::Sqrt(dX*dX+dY*dY)/dZ);  phi=atan(dY/dX)
 zm= z1 - cos(theta)/sin(theta) * (x1*cos(phi)+y1*sin(phi))
 r0=y1*cos(phi)-x1*sin(phi)

 If (x1,y1,z1)=(x2,y2,z2) dZ will eq.1.!
 Input param:
 x1,y1,z1 - target or point on plane
 x2,y2,z2 - point on plane
 eX1,eY1,eZ1, eX2,eY2 - errors (eZ2=0!)
 dZ2dX2 = -A2  where A2 - plane param. (z2=D2-A2*x2+B2*y2)
 dZ2dY2 = -B2  where B2 - plane param. (z2=D2-A2*x2+B2*y2)
 If P1-on plane
   eZ1=0;
   dZ1dX1 = -A1  where A1 - plane param. (z1=D1-A1*x1+B1*y1)
   dZ1dY1 = -B1  where B1 - plane param. (z1=D1-A1*x1+B1*y1)
 If P1-target:
   dZ1dX1 = dZ1/dY1 = 0;
void calcRZToTargLine(Double_t x1, Double_t y1, Double_t z1, Double_t x2, Double_t y2, Double_t z2, Double_t& zm, Double_t& r0) const
 Input and output are in lab.sys.
void calcRZToLineXY(Double_t x1, Double_t y1, Double_t z1, Double_t x2, Double_t y2, Double_t z2, Double_t xBeam, Double_t yBeam, Double_t& zm, Double_t& r0)
 zm= z1 - cos(theta)/sin(theta) * ((x1-xBeam)*cos(phi)+(y1-yBeam)*sin(phi))
 r0=(y1-yBeam)*cos(phi)-(x1-xBeam)*sin(phi)

 If (x1,y1,z1)=(x2,y2,z2) dZ will eq.1.!
void setTransform(Double_t* par, HGeomTransform& trans)
 Filling  HGeomTransform object by 6 parameters
 par[0] - shift along X
 par[1] - shift along Y
 par[2] - shift along Z
 par[3] - rotation around X (in degree)
 par[4] - rotation around Y (in degree)
 par[5] - rotation around Z (in degree)
void copyTransfToArr(const HGeomTransform& trans, Double_t* arr)
 Copy trans to array
 Array size must be eq. or more 12!
void rotateYZ(const HGeomRotation& rot, Double_t xi, Double_t yi, Double_t zi, Double_t& yo, Double_t& zo)
 Input:  xi,yi,zi - sector coor.sys.
 Output: yo,zo - rotated layer coor.sys.
void rotateXYZ(const HGeomRotation& rot, Double_t xi, Double_t yi, Double_t zi, Double_t& xo, Double_t& yo, Double_t& zo)
 Input:  xi,yi,zi - sector coor.sys.
 Output: x0,yo,zo - rotated layer coor.sys.
void rotateDir(const HGeomRotation& rot, const HGeomVector& d, Double_t& dy, Double_t& dz)
 Input:  rot - rotation matrix; d - vector...
 Output: yo,zo - rotated layer coor.sys.
void rotateDir(const HGeomRotation& rot, const HGeomVector& d, Double_t& dx, Double_t& dy, Double_t& dz)
 Input:  rot - rotation matrix; d - vector...
 Output: x0,yo,zo - rotated layer coor.sys.
void transLineToOtherSec(const HMdcLineParam& ln, Int_t sec, HGeomVector& p1, HGeomVector& p2)
void transLineToAnotherSec(HMdcLineParam& ln, Int_t anotherSec)
 Transformation of track line to another sector coor.system (for cosmic!)
 !!! Error matrix is not transformed !!!
Int_t nCells(Int_t s, Int_t m, Int_t l) const
void calcMdcSeg(Double_t x1, Double_t y1, Double_t z1, Double_t x2, Double_t y2, Double_t z2, Double_t& zm, Double_t& r0, Double_t& theta, Double_t& phi)
 Input and output are in sector coor.sys.
 theta=atan(TMath::Sqrt(dX*dX+dY*dY)/dZ);  phi=atan(dY/dX)
 zm= z1 - cos(theta)/sin(theta) * (x1*cos(phi)+y1*sin(phi))
 r0=y1*cos(phi)-x1*sin(phi)

 If (x1,y1,z1)=(x2,y2,z2) dZ will eq.1.!
HMdcSizesCellsCell& operator[](Int_t i) const
Bool_t modStatus(Int_t m)
const HGeomVector& getTargetFirstPoint(void)
{return targ3p[0];}
const HGeomVector& getTargetMiddlePoint(void)
{return targ3p[1];}
const HGeomVector& getTargetLastPoint(void)
{return targ3p[2];}
Int_t getNumOfTargets(void)
{return numTargets;}
HGeomVector* getTargets(void)
{return targets;}
HMdcSizesCells* getExObject(void)
{return fMdcSizesCells;}
Bool_t hasChanged(void)
{return changed;}
Int_t nModInSeg(Int_t s, Int_t seg) const
void setNotGeomModified(void)
{geomModified=kFALSE;}
void setGeomModifiedFlag(void)
 Next functions are NOT for user:
{geomModified = kTRUE;}
Bool_t* modStatusArr(Int_t s)
{return mdcStatus[s];}
HGeomVector& getTargetP(Int_t p)
{return targ3p[p];}
HMdcSizesCells(const HMdcSizesCells& )
Bool_t secOk(Int_t s) const
{return s>=0 && s<6;}
Bool_t segOk(Int_t sg) const
{return sg>=0 && sg<2;}
Bool_t modOk(Int_t m) const
{return m>=0 && m<4;}

Last change: Sat May 22 13:03:29 2010
Last generated: 2010-05-22 13:03

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.