X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TOF%2FAliTOFGeometry.h;h=64ffa7a8f13480fe25642daabd669191130e14d0;hb=79814c1e51997c90f0b92b32e39b841d13f71ab5;hp=51c12e802ef91373ab8b02d19c29efcf625a99b2;hpb=a6a9820c8f584e802b97418cb4c0573396a0013a;p=u%2Fmrichter%2FAliRoot.git diff --git a/TOF/AliTOFGeometry.h b/TOF/AliTOFGeometry.h index 51c12e802ef..64ffa7a8f13 100644 --- a/TOF/AliTOFGeometry.h +++ b/TOF/AliTOFGeometry.h @@ -1,5 +1,6 @@ #ifndef ALITOFGEOMETRY_H #define ALITOFGEOMETRY_H + /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * See cxx source for full Copyright notice */ @@ -11,9 +12,10 @@ // // /////////////////////////////////////////////////////////////////////////////// - +#include "TGeoMatrix.h" #include "TObject.h" -#include "TGeoManager.h" + +//class TGeoMatrix; class AliTOFGeometry: public TObject{ @@ -23,38 +25,44 @@ class AliTOFGeometry: public TObject{ static Int_t NStripA() { return kNStripA;}; static Int_t NStripB() { return kNStripB;}; - virtual Int_t NStripC() { return kNStripC;}; + static Int_t NStripC() { return kNStripC;}; + static Int_t NStrip(Int_t nPlate); static Int_t NMaxNstrip() { return kMaxNstrip;}; static Int_t NpadX() { return kNpadX;}; static Int_t NpadZ() { return kNpadZ;}; static Int_t NpadXStrip() { return kNpadX*kNpadZ;}; static Int_t NSectors() { return kNSectors;}; static Int_t NPlates() { return kNPlates;}; - virtual Int_t NPadXSector() { return (kNStripA + 2*kNStripB + + static Int_t NStripXSector() { return (kNStripA + 2*kNStripB + + 2*kNStripC);}; + static Int_t NPadXSector() { return (kNStripA + 2*kNStripB + 2*kNStripC)*kNpadX*kNpadZ;}; - virtual Float_t RinTOF() { return fgkxTOF;}; - virtual Float_t Rmin() { return fgkRmin;}; - virtual Float_t Rmax() { return fgkRmax;}; + static Float_t RinTOF() { return fgkxTOF;}; + static Float_t Rmin() { return fgkRmin;}; + static Float_t Rmax() { return fgkRmax;}; - static Float_t XPad() { return fgkXPad;}; - static Float_t ZPad() { return fgkZPad;}; + static Float_t XPad() { return fgkXPad;}; + static Float_t ZPad() { return fgkZPad;}; static Float_t StripLength() { return fgkStripLength;}; - static Int_t TimeDiff() { return fgkTimeDiff;}; + static Float_t DeadTime() { return fgkDeadTime;}; + static Float_t MatchingWindow() { return fgkMatchingWindow;}; + static Int_t MaxTOFTree() { return kMaxTOFTree;}; static Int_t NDDL() { return kNDDL;}; static Int_t NTRM() { return kNTRM;} static Int_t NTdc() { return kNTdc;}; + static Int_t NChain() { return kNChain;}; static Int_t NCh() { return kNCh;}; - static Int_t NPadXTRM() { return kNCh*kNTdc;}; + static Int_t NPadXTRM() { return kNCh*kNTdc*kNChain;}; - virtual Float_t ZlenA() { return kZlenA;}; - virtual Float_t ZlenB() { return kZlenB;}; - virtual Float_t ZlenC() { return kZlenC;}; - virtual Float_t MaxhZtof() { return kMaxhZtof;}; + static Float_t ZlenA() { return fgkZlenA;}; + static Float_t ZlenB() { return fgkZlenB;}; + static Float_t ZlenC() { return fgkZlenC;}; + static Float_t MaxhZtof() { return fgkMaxhZtof;}; static Float_t SigmaForTail1() { return fgkSigmaForTail1;}; static Float_t SigmaForTail2() { return fgkSigmaForTail2;}; @@ -62,39 +70,57 @@ class AliTOFGeometry: public TObject{ static Double_t GetAlpha() { return 2 * 3.14159265358979323846 / kNSectors; }; static Float_t TdcBinWidth() {return fgkTdcBin;}; + static Float_t ToTBinWidth() {return fgkToTBin;}; - - virtual void Init(); - virtual void ImportGeometry() {}; + virtual void ImportGeometry(); virtual void SetHoles(Bool_t holes) {fHoles = holes;}; virtual Bool_t GetHoles() const {return fHoles;}; - virtual Bool_t IsInsideThePadPar(Int_t */*det*/, Float_t */*pos*/) {return kFALSE;}; - virtual Float_t DistanceToPadPar(Int_t */*det*/, Float_t */*pos*/, Float_t *dist3d=0) {return dist3d[0];}; - virtual Bool_t IsInsideThePad(Int_t */*det*/,TGeoHMatrix /*mat*/, Float_t */*pos*/){return kFALSE;}; - virtual Float_t DistanceToPad(Int_t */*det*/,TGeoHMatrix /*mat*/, Float_t */*pos*/, Float_t *dist3d=0){return dist3d[0];}; - virtual void GetVolumePath(Int_t */*ind*/, Char_t */*path*/ ){}; - virtual void GetPos(Int_t */*det*/,Float_t */*pos*/){}; - virtual void GetPosPar(Int_t */*det*/,Float_t */*pos*/); - virtual void GetDetID(Float_t */*pos*/,Int_t */*det*/); - virtual Int_t GetPlate(Float_t */*pos*/) {return -1;}; - virtual Int_t GetStrip(Float_t */*pos*/) {return -1;}; - virtual Int_t GetSector(Float_t */*pos*/) {return -1;}; - virtual Int_t GetPadX(Float_t */*pos*/) {return -1;}; - virtual Int_t GetPadZ(Float_t */*pos*/) {return -1;}; - virtual Float_t GetX(Int_t */*det*/) {return -500.;}; - virtual Float_t GetY(Int_t */*det*/) {return -500.;}; - virtual Float_t GetZ(Int_t */*det*/) {return -500.;}; - - Float_t GetAngles(Int_t iplate, Int_t istrip) const {return fAngles[iplate][istrip];}; - Float_t GetHeights(Int_t iplate, Int_t istrip) const {return fHeights[iplate][istrip];}; - Float_t GetDistances(Int_t iplate, Int_t istrip) const {return fDistances[iplate][istrip];}; - - //private: - protected: + virtual Float_t DistanceToPadPar(Int_t *det, Float_t *pos, Float_t *dist3d=0) const; + virtual Bool_t IsInsideThePadPar(Int_t *det, Float_t *pos) const; + virtual Bool_t IsInsideThePad(TGeoHMatrix mat, Float_t *pos, Float_t *dist3d=0) const; + virtual void GetVolumePath(Int_t *ind, Char_t *path ); + virtual void GetVolumePath(Int_t sector, Char_t *path ); + virtual void GetVolumePath(Int_t sector, Int_t plate, Int_t strip, Char_t *path ); + virtual void GetPos(Int_t *det,Float_t *pos); + virtual void GetPosPar(Int_t *det,Float_t *pos) const; + virtual void GetDetID(Float_t *pos,Int_t *det) const; + virtual Int_t GetPlate(Float_t *pos) const; + virtual Int_t GetStrip(Float_t *pos) const; + virtual Int_t GetSector(Float_t *pos) const; + virtual Int_t GetPadX(Float_t *pos) const; + virtual Int_t GetPadZ(Float_t *pos) const; + virtual Float_t GetX(Int_t *det) const ; + virtual Float_t GetY(Int_t *det) const ; + virtual Float_t GetZ(Int_t *det) const ; + virtual void DetToStripRF(Int_t nPadX, Int_t nPadZ, + Float_t &x, Float_t &z) const; + virtual void DetToSectorRF(Int_t vol[5], Double_t ** coord); + virtual Float_t GetPadDx(Float_t *pos); + virtual Float_t GetPadDy(Float_t *pos); + virtual Float_t GetPadDz(Float_t *pos); + virtual void Translation(Float_t *xyz, Float_t translationVector[3]) const; + virtual void Rotation(Float_t *xyz, Double_t rotationAngles[6]) const; + virtual void InverseRotation(Float_t *xyz, Double_t rotationAngles[6]) const; + + static Float_t GetAngles(Int_t iplate, Int_t istrip) {return fgkAngles[iplate][istrip];}; + static Float_t GetHeights(Int_t iplate, Int_t istrip) {return fgkHeights[iplate][istrip];}; + static Float_t GetDistances(Int_t iplate, Int_t istrip) {return fgkDistances[iplate][istrip];}; + + static Int_t GetIndex(Int_t *detId); // Get channel index from det Id (for calibration mainly) + static void GetVolumeIndices(Int_t index, Int_t *detId); // Get volume index from channel index + + UShort_t GetAliSensVolIndex(Int_t sec, Int_t pla, Int_t str) const; // Get the index of the TOF alignable volume in the AliGeomManager order + static Int_t GetStripNumber(Int_t isector, Int_t iplate, Int_t istrip); // Get the serial number of the TOF alignable volume, i.e. the TOF strip + static Int_t GetStripNumberPerSM(Int_t iplate, Int_t istrip); // Get the serial number of the TOF strip in a TOF SM + void PadRF2TrackingRF(Float_t *ctrackPos, Float_t *differenceT); + + + private: enum { kNStripA = 15, // number of strips in A type module kNStripB = 19, // number of strips in B type module + kNStripC = 19, // number of strips in C type module kNpadX = 48, // Number of pads along X kNpadZ = 2, // Number of pads along Z kNSectors = 18, // Number of Sectors @@ -108,23 +134,23 @@ class AliTOFGeometry: public TObject{ // TARODA : TOF-ALICE Read Out and Data Acquisition system enum { kNDDL = 4, // Number of DDL (Detector Data Link) per sector - kNTRM = 10, // Number of TRM ( Readout Module) per DDL - kNTdc = 30, // Number of Tdc (Time to Digital Converter) per TRM + kNTRM = 12, // Number of TRM ( Readout Module) per DDL + kNTdc = 15, // Number of Tdc (Time to Digital Converter) per TRM + kNChain = 2, // Number of chains per TRM kNCh = 8 // Number of channels per Tdc }; - static const Int_t fgkTimeDiff; // Min signal separation (ps) - - mutable Int_t kNStripC; // number of strips in C type module + static const Float_t fgkDeadTime; // Single channel dead time (ps) + static const Float_t fgkMatchingWindow; // Matching window (ps) - mutable Float_t kZlenA; // length (cm) of the A module - mutable Float_t kZlenB; // length (cm) of the B module - mutable Float_t kZlenC; // length (cm) of the C module - mutable Float_t kMaxhZtof; // Max half z-size of TOF (cm) + static const Float_t fgkZlenA; // length (cm) of the A module + static const Float_t fgkZlenB; // length (cm) of the B module + static const Float_t fgkZlenC; // length (cm) of the C module + static const Float_t fgkMaxhZtof; // Max half z-size of TOF (cm) - mutable Float_t fgkRmin; // Inner radius of the TOF (cm) - mutable Float_t fgkRmax; // Outer radius of the TOF (cm) - mutable Float_t fgkxTOF; // Inner TOF Radius used in Reconstruction (cm) + static const Float_t fgkRmin; // Inner radius of the TOF (cm) + static const Float_t fgkRmax; // Outer radius of the TOF (cm) + static const Float_t fgkxTOF; // Inner TOF Radius used in Reconstruction (cm) static const Float_t fgkStripLength; // Strip Length (rho X phi direction) (cm) @@ -134,17 +160,19 @@ class AliTOFGeometry: public TObject{ static const Float_t fgkSigmaForTail1;//Sig1 for simulation of TDC tails static const Float_t fgkSigmaForTail2;//Sig2 for simulation of TDC tails + static const Float_t fgkPhiSec; //sector Phi width (deg) + Bool_t fHoles; //logical for geometry version (w/wo holes) - Float_t fAngles[kNPlates][kMaxNstrip]; //Strip Tilt Angles - Float_t fHeights[kNPlates][kMaxNstrip]; //Strip heights - Float_t fDistances[kNPlates][kMaxNstrip];//Strip distances + static const Float_t fgkAngles[kNPlates][kMaxNstrip]; //Strip Tilt Angles + static const Float_t fgkHeights[kNPlates][kMaxNstrip]; //Strip heights + static const Float_t fgkDistances[kNPlates][kMaxNstrip];//Strip distances - Float_t fPhiSec; //sector Phi width (deg) - static const Float_t fgkTdcBin; // time-window for the TDC bins [ps] + static const Float_t fgkTdcBin; // time-of-flight bin width [ps] + static const Float_t fgkToTBin; // time-over-threshold bin width [ps] - ClassDef(AliTOFGeometry,3) // TOF Geometry base class + ClassDef(AliTOFGeometry,8) // TOF Geometry base class }; #endif