LCOV - code coverage report
Current view: top level - ITS/ITSrec - AliITSAlignMille2Module.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 52 1.9 %
Date: 2016-06-14 17:26:59 Functions: 1 56 1.8 %

          Line data    Source code
       1             : #ifndef ALIITSALIGNMILLE2MODULE_H
       2             : #define ALIITSALIGNMILLE2MODULE_H 
       3             : /* Copyright(c) 2007-2009 , ALICE Experiment at CERN, All rights reserved. * 
       4             :  * See cxx source for full Copyright notice                               */  
       5             :  
       6             : /// \ingroup rec 
       7             : /// \class AliITSAlignMille2Module
       8             : /// \brief Class for alignment of ITS 
       9             : // 
      10             : // Authors: Marcello Lunardon 
      11             : //
      12             : // RS Converted static arrays fSensVolVolumeID and fSensVolIndex
      13             : // to TArrays in user transparent way.
      14             : //
      15             : /* $Id$  */ 
      16             : //#include <TString.h> 
      17             : //#include <TObject.h> 
      18             : #include <TNamed.h> 
      19             : #include <TArrayI.h> 
      20             : #include <TArrayS.h> 
      21             : #include <TObjArray.h> 
      22             : class AliITSAlignMille2;
      23             : 
      24             : class AliAlignObjParams; 
      25             : class TGeoHMatrix; 
      26             : 
      27             : class AliITSAlignMille2Module : public TNamed 
      28             : { 
      29             : public: 
      30             :   enum {kSPD,kSDD,kSSD};
      31             :   enum {kMaxParGeom=6,kMaxParTot=9,kSensDefBit=BIT(14),kGlobalGeomBit=BIT(15),kNotInConfBit=BIT(16),kVdSDDSameLRBit=BIT(17)};
      32             :   enum {kDOFTX,kDOFTY,kDOFTZ,kDOFPS,kDOFTH,kDOFPH,kDOFT0,kDOFDVL,kDOFDVR};
      33             :   //
      34             :   AliITSAlignMille2Module(); 
      35             :   AliITSAlignMille2Module(UShort_t volid);
      36             :   AliITSAlignMille2Module(Int_t index, UShort_t volid, const char* symname, const TGeoHMatrix *m, Int_t nsv=0, const UShort_t *volidsv=NULL);
      37             :   AliITSAlignMille2Module(const AliITSAlignMille2Module& rhs); // copy constructor
      38             :   AliITSAlignMille2Module& operator=(const AliITSAlignMille2Module& rhs);  
      39             :   //
      40             :   virtual ~AliITSAlignMille2Module(); 
      41             :   //
      42             :   // geometry methods  
      43           0 :   Int_t        GetIndex()                             const {return fIndex;} 
      44           0 :   UShort_t     GetVolumeID()                          const {return fVolumeID;}  
      45           0 :   Int_t        GetNSensitiveVolumes()                 const {return fNSensVol;} 
      46           0 :   Int_t        GetSensVolIndex(Int_t at)              const {return fSensVolIndex[at];}
      47           0 :   Short_t      GetSensVolVolumeID(Int_t at)           const {return fSensVolVolumeID[at];}
      48           0 :   TGeoHMatrix *GetMatrix()                            const {return fMatrix;}
      49             :   void         GetLocalMatrix(TGeoHMatrix& mat)       const;
      50           0 :   UShort_t    *GetSensitiveVolumeVolumeID()           const {return (UShort_t*)fSensVolVolumeID.GetArray();}
      51           0 :   Float_t      GetSigmaFactor(Int_t i)                const {return fSigmaFactor[i];}
      52           0 :   Float_t      GetSigmaXFactor()                      const {return fSigmaFactor[0];}
      53           0 :   Float_t      GetSigmaYFactor()                      const {return fSigmaFactor[1];}
      54           0 :   Float_t      GetSigmaZFactor()                      const {return fSigmaFactor[2];}
      55           0 :   Int_t        GetNProcessedPoints()                  const {return fNProcPoints;}
      56           0 :   Bool_t       IsFreeDOF(Int_t dof)                   const {return dof<fNParTot && fParCstr[dof]>0;}
      57           0 :   Bool_t       AreSensorsProvided()                   const {return TestBit(kSensDefBit);}
      58           0 :   Bool_t       GeomParamsGlobal()                     const {return TestBit(kGlobalGeomBit);}
      59           0 :   Bool_t       IsNotInConf()                          const {return TestBit(kNotInConfBit);}
      60           0 :   Bool_t       IsVDriftLRSame()                       const {return TestBit(kVdSDDSameLRBit);}
      61             :   //
      62             :   Bool_t       IsIn(UShort_t volid)                   const;
      63             :   Bool_t       IsAlignable()                          const;
      64             :   Bool_t       BelongsTo(AliITSAlignMille2Module* parent) const;
      65           0 :   AliITSAlignMille2Module* GetParent()                const {return fParent;}
      66           0 :   AliITSAlignMille2Module* GetChild(Int_t i)          const {return (AliITSAlignMille2Module*)fChildren[i];}
      67           0 :   Int_t        GetNChildren()                         const {return fChildren.GetLast()+1;}
      68             :   //
      69             :   void         Print(Option_t* opt="")                const; 
      70             :   //
      71             :   void         EvaluateDOF();
      72           0 :   UShort_t     GetNParTot()                           const {return fNParTot;}
      73           0 :   UShort_t     GetNParFree()                          const {return fNParFree;}
      74           0 :   Float_t     *GetParVals()                           const {return fParVals;}
      75           0 :   Double_t     GetParVal(int par)                     const {return par<fNParTot ? fParVals[par] : 0;}
      76           0 :   Double_t     GetParErr(int par)                     const {return par<fNParTot ? fParErrs[par] : 0;}
      77           0 :   Double_t     GetParConstraint(int par)              const {return par<fNParTot ? fParCstr[par] : 0;}
      78           0 :   Int_t        GetParOffset(Int_t par)                const {return par<fNParTot ? fParOffs[par] : -1;}
      79           0 :   Int_t        GetDetType()                           const {return fDetType;}
      80           0 :   Bool_t       IsParConstrained(Int_t par)            const {return fParCstr[par]>0 && fParCstr[par]<fgkDummyConstraint;}
      81           0 :   Bool_t       IsSPD()                                const {return fDetType == kSPD;}
      82           0 :   Bool_t       IsSDD()                                const {return fDetType == kSDD;}
      83           0 :   Bool_t       IsSSD()                                const {return fDetType == kSSD;}
      84           0 :   Bool_t       IsSensor()                             const {return IsSensor(fVolumeID);}
      85           0 :   void         SetDetType(Int_t tp)                         {fDetType = tp;}
      86           0 :   void         SetParOffset(Int_t par,Int_t offs)           {fParOffs[par] = offs;}
      87             :   //
      88             :   void         SetParVals(Double_t *vl,Int_t npar);          
      89           0 :   void         SetParVal(Int_t par,Double_t v=0)            {fParVals[par] = v;}
      90           0 :   void         SetParErr(Int_t par,Double_t e=0)            {fParErrs[par] = e;}
      91           0 :   void         SetParConstraint(Int_t par,Double_t s=1e6)   {fParCstr[par] = s>0. ? s:0.0;}
      92           0 :   void         SetSigmaFactor(Int_t i,Float_t v)            {fSigmaFactor[i]=TMath::Max(0.001F,v);}
      93           0 :   void         SetSigmaXFactor(Float_t v)                   {SetSigmaFactor(0,v);}
      94           0 :   void         SetSigmaYFactor(Float_t v)                   {SetSigmaFactor(1,v);}
      95           0 :   void         SetSigmaZFactor(Float_t v)                   {SetSigmaFactor(2,v);}
      96           0 :   void         IncNProcessedPoints(Int_t step=1)            {fNProcPoints += step;}
      97           0 :   void         SetNProcessedPoints(Int_t v)                 {fNProcPoints = v;}
      98           0 :   void         SetParent(AliITSAlignMille2Module* par)      {fParent = par;}
      99           0 :   void         AddChild(AliITSAlignMille2Module* cld)       {fChildren.Add(cld);}
     100             :   void         SetFreeDOF(Int_t dof,Double_t cstr);
     101           0 :   void         SetSensorsProvided(Bool_t v=kTRUE)           {SetBit(kSensDefBit,v);}
     102           0 :   void         SetGeomParamsGlobal(Bool_t v=kTRUE)          {SetBit(kGlobalGeomBit,v);}
     103           0 :   void         SetNotInConf(Bool_t v=kTRUE)                 {SetBit(kNotInConfBit,v);}
     104           0 :   void         SetVDriftLRSame(Bool_t v=kTRUE)              {SetBit(kVdSDDSameLRBit,v);}
     105             :   Int_t        Set(Int_t index,UShort_t volid, const char* symname, const TGeoHMatrix *m,Int_t nsv=0, const UShort_t *volidsv=0);
     106             :   //
     107             :   void         AddSensitiveVolume(UShort_t volid);
     108             :   void         DelSensitiveVolume(Int_t at);
     109           0 :   void         DelSensitiveVolumes()                        {fNSensVol = 0;}
     110             :   //
     111             :   void         GetGeomParamsGlo(Double_t *pars);
     112             :   void         GetGeomParamsLoc(Double_t *pars);
     113             :   //
     114             :   TGeoHMatrix *GetSensitiveVolumeMatrix(UShort_t voluid);
     115             :   TGeoHMatrix *GetSensitiveVolumeOrigGlobalMatrix(UShort_t voluid);
     116             :   TGeoHMatrix *GetSensitiveVolumeModifiedMatrix(UShort_t voluid, const Double_t *delta,Bool_t local=kTRUE); 
     117             :   AliAlignObjParams *GetSensitiveVolumeMisalignment(UShort_t voluid, const AliAlignObjParams *a); 
     118             :   AliAlignObjParams *GetSensitiveVolumeMisalignment(UShort_t voluid, const Double_t *deltalocal); 
     119             :   //
     120             :   void         GetGlobalParams(Double_t *t, Double_t *r) const;
     121             :   void         GetGlobalParams(const Double_t *loct, const Double_t *locr,Double_t *t, Double_t *r);
     122             :   void         GetLocalParams(const Double_t *loct, const Double_t *locr,Double_t *t, Double_t *r);
     123             :   //
     124             :   void         GetSensVolGlobalParams(UShort_t volid,Double_t *t, Double_t *r);
     125             :   void         GetSensVolLocalParams(UShort_t volid,Double_t *t, Double_t *r);
     126             :   void         GetSensVolGlobalParams(UShort_t volid,const Double_t* loct,const Double_t* locr,Double_t *t, Double_t *r);
     127             :   void         GetSensVolLocalParams(UShort_t volid,const Double_t* loct,const Double_t* locr,Double_t *t, Double_t *r);
     128             :   //
     129             :   void         CalcDerivLocGlo(Double_t *deriv);
     130             :   void         CalcDerivGloLoc(Int_t idx,Double_t *deriv);
     131             :   void         CalcDerivGloLoc(Int_t sensVol,Int_t paridx,Double_t* derivative);
     132             :   void         CalcDerivCurLoc(Int_t sensVol,Int_t paridx,Double_t* derivative);
     133             :   void         CalcDerivDPosDPar(Int_t sensVol,const Double_t *pl,Double_t *deriv);
     134             :   //
     135             :   // forse non serve...
     136             :   AliAlignObjParams *GetSensitiveVolumeGlobalMisalignment(UShort_t voluid, const Double_t *deltalocal); 
     137             :   // mo' proviamo questo
     138             :   AliAlignObjParams *GetSensitiveVolumeTotalMisalignment(UShort_t voluid, const Double_t *deltalocal); 
     139             :   //
     140             :   static Int_t    GetIndexFromVolumeID(UShort_t volid);
     141             :   static UShort_t GetVolumeIDFromSymname(const Char_t *symname);
     142             :   static UShort_t GetVolumeIDFromIndex(Int_t index);
     143             :   static Bool_t   IsSensor(UShort_t vid);
     144             :   static Int_t    SensVolMatrix(UShort_t volid, TGeoHMatrix *m); 
     145             :   static Int_t    SensVolOrigGlobalMatrix(UShort_t volid, TGeoHMatrix *m); 
     146             : 
     147             :   //
     148             : protected:
     149             :   //
     150             :   void         AssignDetType();
     151             :   //
     152             : protected:
     153             :   //
     154             :   Int_t          fNSensVol;                       // number of sensor it refers to
     155             :   Int_t          fIndex;                          // aliroot index
     156             :   Int_t          fDetType;                        // Detector type
     157             :   UShort_t       fVolumeID;                       // aliroot volune ID
     158             :   UShort_t       fNParTot;                        // total number of parameters
     159             :   UShort_t       fNParFree;                       // number of free parameters
     160             :   TArrayS        fParOffs;                        // offsets of free params in the fit results
     161             :   Int_t          fNProcPoints;                    // number of processed points
     162             :   Float_t        fSigmaFactor[3];                 // multiplicative factor for referred sensor X,Y,Z error
     163             :   Float_t       *fParVals;                        // values of the fitted params
     164             :   Float_t       *fParErrs;                        // errors of the fitted params
     165             :   Float_t       *fParCstr;                        // Gaussian type constraint on parameter, 0 means fixed param
     166             :   //
     167             :   TArrayI        fSensVolIndex;                   // aliroot indices for sensors
     168             :   TArrayS        fSensVolVolumeID;                // aliroot indices for sensors volumes
     169             :   TGeoHMatrix   *fMatrix;                         // ideal TGeoHMatrix of the supermodule
     170             :   TGeoHMatrix   *fSensVolMatrix;                  // sensor's ideal matrices
     171             :   TGeoHMatrix   *fSensVolModifMatrix;             // sensor's modified matrices
     172             :   //
     173             :   AliITSAlignMille2Module* fParent;               // optional parent pointer
     174             :   TObjArray      fChildren;                       // array of optional children
     175             :   //
     176             :   static const Float_t fgkDummyConstraint;        // dummy (lose) contraint on parameter
     177             :   //
     178         116 :   ClassDef(AliITSAlignMille2Module, 0)
     179             : }; 
     180             : 
     181             : #endif 

Generated by: LCOV version 1.11