-#ifndef ALIITSALIGNMILLE2MODULE_H\r
-#define ALIITSALIGNMILLE2MODULE_H \r
-/* Copyright(c) 2007-2009 , ALICE Experiment at CERN, All rights reserved. * \r
- * See cxx source for full Copyright notice */ \r
- \r
-/// \ingroup rec \r
-/// \class AliITSAlignMille2Module\r
-/// \brief Class for alignment of ITS \r
-// \r
-// Authors: Marcello Lunardon \r
-//\r
-// RS Converted static arrays fSensVolVolumeID and fSensVolIndex\r
-// to TArrays in user transparent way.\r
-//\r
-/* $Id$ */ \r
-//#include <TString.h> \r
-//#include <TObject.h> \r
-#include <TNamed.h> \r
-#include <TArrayI.h> \r
-#include <TArrayS.h> \r
-#include <TObjArray.h> \r
-class AliITSAlignMille2;\r
-\r
-class AliAlignObjParams; \r
-class TGeoHMatrix; \r
-\r
-class AliITSAlignMille2Module : public TNamed \r
-{ \r
-public: \r
- enum {kSPD,kSDD,kSSD};\r
- enum {kMaxParGeom=6,kMaxParTot=9,kSensDefBit=BIT(14),kGlobalGeomBit=BIT(15),kNotInConfBit=BIT(16),kVdSDDSameLRBit=BIT(17)};\r
- enum {kDOFTX,kDOFTY,kDOFTZ,kDOFPS,kDOFTH,kDOFPH,kDOFT0,kDOFDVL,kDOFDVR};\r
- //\r
- AliITSAlignMille2Module(); \r
- AliITSAlignMille2Module(UShort_t volid);\r
- AliITSAlignMille2Module(Int_t index, UShort_t volid, const char* symname, const TGeoHMatrix *m, Int_t nsv=0, const UShort_t *volidsv=NULL);\r
- AliITSAlignMille2Module(const AliITSAlignMille2Module& rhs); // copy constructor\r
- AliITSAlignMille2Module& operator=(const AliITSAlignMille2Module& rhs); \r
- //\r
- virtual ~AliITSAlignMille2Module(); \r
- //\r
- // geometry methods \r
- Int_t GetIndex() const {return fIndex;} \r
- UShort_t GetVolumeID() const {return fVolumeID;} \r
- Int_t GetNSensitiveVolumes() const {return fNSensVol;} \r
- Int_t GetSensVolIndex(Int_t at) const {return fSensVolIndex[at];}\r
- Short_t GetSensVolVolumeID(Int_t at) const {return fSensVolVolumeID[at];}\r
- TGeoHMatrix *GetMatrix() const {return fMatrix;}\r
- void GetLocalMatrix(TGeoHMatrix& mat) const;\r
- UShort_t *GetSensitiveVolumeVolumeID() const {return (UShort_t*)fSensVolVolumeID.GetArray();}\r
- Float_t GetSigmaFactor(Int_t i) const {return fSigmaFactor[i];}\r
- Float_t GetSigmaXFactor() const {return fSigmaFactor[0];}\r
- Float_t GetSigmaYFactor() const {return fSigmaFactor[1];}\r
- Float_t GetSigmaZFactor() const {return fSigmaFactor[2];}\r
- Int_t GetNProcessedPoints() const {return fNProcPoints;}\r
- Bool_t IsFreeDOF(Int_t dof) const {return dof<fNParTot && fParCstr[dof]>0;}\r
- Bool_t AreSensorsProvided() const {return TestBit(kSensDefBit);}\r
- Bool_t GeomParamsGlobal() const {return TestBit(kGlobalGeomBit);}\r
- Bool_t IsNotInConf() const {return TestBit(kNotInConfBit);}\r
- Bool_t IsVDriftLRSame() const {return TestBit(kVdSDDSameLRBit);}\r
- //\r
- Bool_t IsIn(UShort_t volid) const;\r
- Bool_t IsAlignable() const;\r
- Bool_t BelongsTo(AliITSAlignMille2Module* parent) const;\r
- AliITSAlignMille2Module* GetParent() const {return fParent;}\r
- AliITSAlignMille2Module* GetChild(Int_t i) const {return (AliITSAlignMille2Module*)fChildren[i];}\r
- Int_t GetNChildren() const {return fChildren.GetLast()+1;}\r
- //\r
- void Print(Option_t* opt="") const; \r
- //\r
- void EvaluateDOF();\r
- UShort_t GetNParTot() const {return fNParTot;}\r
- UShort_t GetNParFree() const {return fNParFree;}\r
- Float_t *GetParVals() const {return fParVals;}\r
- Double_t GetParVal(int par) const {return par<fNParTot ? fParVals[par] : 0;}\r
- Double_t GetParErr(int par) const {return par<fNParTot ? fParErrs[par] : 0;}\r
- Double_t GetParConstraint(int par) const {return par<fNParTot ? fParCstr[par] : 0;}\r
- Int_t GetParOffset(Int_t par) const {return par<fNParTot ? fParOffs[par] : -1;}\r
- Int_t GetDetType() const {return fDetType;}\r
- Bool_t IsParConstrained(Int_t par) const {return fParCstr[par]>0 && fParCstr[par]<fgkDummyConstraint;}\r
- Bool_t IsSPD() const {return fDetType == kSPD;}\r
- Bool_t IsSDD() const {return fDetType == kSDD;}\r
- Bool_t IsSSD() const {return fDetType == kSSD;}\r
- Bool_t IsSensor() const {return IsSensor(fVolumeID);}\r
- void SetDetType(Int_t tp) {fDetType = tp;}\r
- void SetParOffset(Int_t par,Int_t offs) {fParOffs[par] = offs;}\r
- //\r
- void SetParVals(Double_t *vl,Int_t npar); \r
- void SetParVal(Int_t par,Double_t v=0) {fParVals[par] = v;}\r
- void SetParErr(Int_t par,Double_t e=0) {fParErrs[par] = e;}\r
- void SetParConstraint(Int_t par,Double_t s=1e6) {fParCstr[par] = s>0. ? s:0.0;}\r
- void SetSigmaFactor(Int_t i,Float_t v) {fSigmaFactor[i]=TMath::Max(0.001F,v);}\r
- void SetSigmaXFactor(Float_t v) {SetSigmaFactor(0,v);}\r
- void SetSigmaYFactor(Float_t v) {SetSigmaFactor(1,v);}\r
- void SetSigmaZFactor(Float_t v) {SetSigmaFactor(2,v);}\r
- void IncNProcessedPoints(Int_t step=1) {fNProcPoints += step;}\r
- void SetNProcessedPoints(Int_t v) {fNProcPoints = v;}\r
- void SetParent(AliITSAlignMille2Module* par) {fParent = par;}\r
- void AddChild(AliITSAlignMille2Module* cld) {fChildren.Add(cld);}\r
- void SetFreeDOF(Int_t dof,Double_t cstr);\r
- void SetSensorsProvided(Bool_t v=kTRUE) {SetBit(kSensDefBit,v);}\r
- void SetGeomParamsGlobal(Bool_t v=kTRUE) {SetBit(kGlobalGeomBit,v);}\r
- void SetNotInConf(Bool_t v=kTRUE) {SetBit(kNotInConfBit,v);}\r
- void SetVDriftLRSame(Bool_t v=kTRUE) {SetBit(kVdSDDSameLRBit,v);}\r
- Int_t Set(Int_t index,UShort_t volid, const char* symname, const TGeoHMatrix *m,Int_t nsv=0, const UShort_t *volidsv=0);\r
- //\r
- void AddSensitiveVolume(UShort_t volid);\r
- void DelSensitiveVolume(Int_t at);\r
- void DelSensitiveVolumes() {fNSensVol = 0;}\r
- //\r
- void GetGeomParamsGlo(Double_t *pars);\r
- void GetGeomParamsLoc(Double_t *pars);\r
- //\r
- TGeoHMatrix *GetSensitiveVolumeMatrix(UShort_t voluid);\r
- TGeoHMatrix *GetSensitiveVolumeOrigGlobalMatrix(UShort_t voluid);\r
- TGeoHMatrix *GetSensitiveVolumeModifiedMatrix(UShort_t voluid, const Double_t *delta,Bool_t local=kTRUE); \r
- AliAlignObjParams *GetSensitiveVolumeMisalignment(UShort_t voluid, const AliAlignObjParams *a); \r
- AliAlignObjParams *GetSensitiveVolumeMisalignment(UShort_t voluid, const Double_t *deltalocal); \r
- //\r
- void GetGlobalParams(Double_t *t, Double_t *r) const;\r
- void GetGlobalParams(const Double_t *loct, const Double_t *locr,Double_t *t, Double_t *r);\r
- void GetLocalParams(const Double_t *loct, const Double_t *locr,Double_t *t, Double_t *r);\r
- //\r
- void GetSensVolGlobalParams(UShort_t volid,Double_t *t, Double_t *r);\r
- void GetSensVolLocalParams(UShort_t volid,Double_t *t, Double_t *r);\r
- void GetSensVolGlobalParams(UShort_t volid,const Double_t* loct,const Double_t* locr,Double_t *t, Double_t *r);\r
- void GetSensVolLocalParams(UShort_t volid,const Double_t* loct,const Double_t* locr,Double_t *t, Double_t *r);\r
- //\r
- void CalcDerivLocGlo(Double_t *deriv);\r
- void CalcDerivGloLoc(Int_t idx,Double_t *deriv);\r
- void CalcDerivGloLoc(Int_t sensVol,Int_t paridx,Double_t* derivative);\r
- void CalcDerivCurLoc(Int_t sensVol,Int_t paridx,Double_t* derivative);\r
- void CalcDerivDPosDPar(Int_t sensVol,const Double_t *pl,Double_t *deriv);\r
- //\r
- // forse non serve...\r
- AliAlignObjParams *GetSensitiveVolumeGlobalMisalignment(UShort_t voluid, const Double_t *deltalocal); \r
- // mo' proviamo questo\r
- AliAlignObjParams *GetSensitiveVolumeTotalMisalignment(UShort_t voluid, const Double_t *deltalocal); \r
- //\r
- static Int_t GetIndexFromVolumeID(UShort_t volid);\r
- static UShort_t GetVolumeIDFromSymname(const Char_t *symname);\r
- static UShort_t GetVolumeIDFromIndex(Int_t index);\r
- static Bool_t IsSensor(UShort_t vid);\r
- static Int_t SensVolMatrix(UShort_t volid, TGeoHMatrix *m); \r
- static Int_t SensVolOrigGlobalMatrix(UShort_t volid, TGeoHMatrix *m); \r
-\r
- //\r
-protected:\r
- //\r
- void AssignDetType();\r
- //\r
-protected:\r
- //\r
- Int_t fNSensVol; // number of sensor it refers to\r
- Int_t fIndex; // aliroot index\r
- Int_t fDetType; // Detector type\r
- UShort_t fVolumeID; // aliroot volune ID\r
- UShort_t fNParTot; // total number of parameters\r
- UShort_t fNParFree; // number of free parameters\r
- TArrayS fParOffs; // offsets of free params in the fit results\r
- Int_t fNProcPoints; // number of processed points\r
- Float_t fSigmaFactor[3]; // multiplicative factor for referred sensor X,Y,Z error\r
- Float_t *fParVals; // values of the fitted params\r
- Float_t *fParErrs; // errors of the fitted params\r
- Float_t *fParCstr; // Gaussian type constraint on parameter, 0 means fixed param\r
- //\r
- TArrayI fSensVolIndex; // aliroot indices for sensors\r
- TArrayS fSensVolVolumeID; // aliroot indices for sensors volumes\r
- TGeoHMatrix *fMatrix; // ideal TGeoHMatrix of the supermodule\r
- TGeoHMatrix *fSensVolMatrix; // sensor's ideal matrices\r
- TGeoHMatrix *fSensVolModifMatrix; // sensor's modified matrices\r
- //\r
- AliITSAlignMille2Module* fParent; // optional parent pointer\r
- TObjArray fChildren; // array of optional children\r
- //\r
- static const Float_t fgkDummyConstraint; // dummy (lose) contraint on parameter\r
- //\r
- ClassDef(AliITSAlignMille2Module, 0)\r
-}; \r
-\r
-#endif \r
+#ifndef ALIITSALIGNMILLE2MODULE_H
+#define ALIITSALIGNMILLE2MODULE_H
+/* Copyright(c) 2007-2009 , ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+/// \ingroup rec
+/// \class AliITSAlignMille2Module
+/// \brief Class for alignment of ITS
+//
+// Authors: Marcello Lunardon
+//
+// RS Converted static arrays fSensVolVolumeID and fSensVolIndex
+// to TArrays in user transparent way.
+//
+/* $Id$ */
+//#include <TString.h>
+//#include <TObject.h>
+#include <TNamed.h>
+#include <TArrayI.h>
+#include <TArrayS.h>
+#include <TObjArray.h>
+class AliITSAlignMille2;
+
+class AliAlignObjParams;
+class TGeoHMatrix;
+
+class AliITSAlignMille2Module : public TNamed
+{
+public:
+ enum {kSPD,kSDD,kSSD};
+ enum {kMaxParGeom=6,kMaxParTot=9,kSensDefBit=BIT(14),kGlobalGeomBit=BIT(15),kNotInConfBit=BIT(16),kVdSDDSameLRBit=BIT(17)};
+ enum {kDOFTX,kDOFTY,kDOFTZ,kDOFPS,kDOFTH,kDOFPH,kDOFT0,kDOFDVL,kDOFDVR};
+ //
+ AliITSAlignMille2Module();
+ AliITSAlignMille2Module(UShort_t volid);
+ AliITSAlignMille2Module(Int_t index, UShort_t volid, const char* symname, const TGeoHMatrix *m, Int_t nsv=0, const UShort_t *volidsv=NULL);
+ AliITSAlignMille2Module(const AliITSAlignMille2Module& rhs); // copy constructor
+ AliITSAlignMille2Module& operator=(const AliITSAlignMille2Module& rhs);
+ //
+ virtual ~AliITSAlignMille2Module();
+ //
+ // geometry methods
+ Int_t GetIndex() const {return fIndex;}
+ UShort_t GetVolumeID() const {return fVolumeID;}
+ Int_t GetNSensitiveVolumes() const {return fNSensVol;}
+ Int_t GetSensVolIndex(Int_t at) const {return fSensVolIndex[at];}
+ Short_t GetSensVolVolumeID(Int_t at) const {return fSensVolVolumeID[at];}
+ TGeoHMatrix *GetMatrix() const {return fMatrix;}
+ void GetLocalMatrix(TGeoHMatrix& mat) const;
+ UShort_t *GetSensitiveVolumeVolumeID() const {return (UShort_t*)fSensVolVolumeID.GetArray();}
+ Float_t GetSigmaFactor(Int_t i) const {return fSigmaFactor[i];}
+ Float_t GetSigmaXFactor() const {return fSigmaFactor[0];}
+ Float_t GetSigmaYFactor() const {return fSigmaFactor[1];}
+ Float_t GetSigmaZFactor() const {return fSigmaFactor[2];}
+ Int_t GetNProcessedPoints() const {return fNProcPoints;}
+ Bool_t IsFreeDOF(Int_t dof) const {return dof<fNParTot && fParCstr[dof]>0;}
+ Bool_t AreSensorsProvided() const {return TestBit(kSensDefBit);}
+ Bool_t GeomParamsGlobal() const {return TestBit(kGlobalGeomBit);}
+ Bool_t IsNotInConf() const {return TestBit(kNotInConfBit);}
+ Bool_t IsVDriftLRSame() const {return TestBit(kVdSDDSameLRBit);}
+ //
+ Bool_t IsIn(UShort_t volid) const;
+ Bool_t IsAlignable() const;
+ Bool_t BelongsTo(AliITSAlignMille2Module* parent) const;
+ AliITSAlignMille2Module* GetParent() const {return fParent;}
+ AliITSAlignMille2Module* GetChild(Int_t i) const {return (AliITSAlignMille2Module*)fChildren[i];}
+ Int_t GetNChildren() const {return fChildren.GetLast()+1;}
+ //
+ void Print(Option_t* opt="") const;
+ //
+ void EvaluateDOF();
+ UShort_t GetNParTot() const {return fNParTot;}
+ UShort_t GetNParFree() const {return fNParFree;}
+ Float_t *GetParVals() const {return fParVals;}
+ Double_t GetParVal(int par) const {return par<fNParTot ? fParVals[par] : 0;}
+ Double_t GetParErr(int par) const {return par<fNParTot ? fParErrs[par] : 0;}
+ Double_t GetParConstraint(int par) const {return par<fNParTot ? fParCstr[par] : 0;}
+ Int_t GetParOffset(Int_t par) const {return par<fNParTot ? fParOffs[par] : -1;}
+ Int_t GetDetType() const {return fDetType;}
+ Bool_t IsParConstrained(Int_t par) const {return fParCstr[par]>0 && fParCstr[par]<fgkDummyConstraint;}
+ Bool_t IsSPD() const {return fDetType == kSPD;}
+ Bool_t IsSDD() const {return fDetType == kSDD;}
+ Bool_t IsSSD() const {return fDetType == kSSD;}
+ Bool_t IsSensor() const {return IsSensor(fVolumeID);}
+ void SetDetType(Int_t tp) {fDetType = tp;}
+ void SetParOffset(Int_t par,Int_t offs) {fParOffs[par] = offs;}
+ //
+ void SetParVals(Double_t *vl,Int_t npar);
+ void SetParVal(Int_t par,Double_t v=0) {fParVals[par] = v;}
+ void SetParErr(Int_t par,Double_t e=0) {fParErrs[par] = e;}
+ void SetParConstraint(Int_t par,Double_t s=1e6) {fParCstr[par] = s>0. ? s:0.0;}
+ void SetSigmaFactor(Int_t i,Float_t v) {fSigmaFactor[i]=TMath::Max(0.001F,v);}
+ void SetSigmaXFactor(Float_t v) {SetSigmaFactor(0,v);}
+ void SetSigmaYFactor(Float_t v) {SetSigmaFactor(1,v);}
+ void SetSigmaZFactor(Float_t v) {SetSigmaFactor(2,v);}
+ void IncNProcessedPoints(Int_t step=1) {fNProcPoints += step;}
+ void SetNProcessedPoints(Int_t v) {fNProcPoints = v;}
+ void SetParent(AliITSAlignMille2Module* par) {fParent = par;}
+ void AddChild(AliITSAlignMille2Module* cld) {fChildren.Add(cld);}
+ void SetFreeDOF(Int_t dof,Double_t cstr);
+ void SetSensorsProvided(Bool_t v=kTRUE) {SetBit(kSensDefBit,v);}
+ void SetGeomParamsGlobal(Bool_t v=kTRUE) {SetBit(kGlobalGeomBit,v);}
+ void SetNotInConf(Bool_t v=kTRUE) {SetBit(kNotInConfBit,v);}
+ void SetVDriftLRSame(Bool_t v=kTRUE) {SetBit(kVdSDDSameLRBit,v);}
+ Int_t Set(Int_t index,UShort_t volid, const char* symname, const TGeoHMatrix *m,Int_t nsv=0, const UShort_t *volidsv=0);
+ //
+ void AddSensitiveVolume(UShort_t volid);
+ void DelSensitiveVolume(Int_t at);
+ void DelSensitiveVolumes() {fNSensVol = 0;}
+ //
+ void GetGeomParamsGlo(Double_t *pars);
+ void GetGeomParamsLoc(Double_t *pars);
+ //
+ TGeoHMatrix *GetSensitiveVolumeMatrix(UShort_t voluid);
+ TGeoHMatrix *GetSensitiveVolumeOrigGlobalMatrix(UShort_t voluid);
+ TGeoHMatrix *GetSensitiveVolumeModifiedMatrix(UShort_t voluid, const Double_t *delta,Bool_t local=kTRUE);
+ AliAlignObjParams *GetSensitiveVolumeMisalignment(UShort_t voluid, const AliAlignObjParams *a);
+ AliAlignObjParams *GetSensitiveVolumeMisalignment(UShort_t voluid, const Double_t *deltalocal);
+ //
+ void GetGlobalParams(Double_t *t, Double_t *r) const;
+ void GetGlobalParams(const Double_t *loct, const Double_t *locr,Double_t *t, Double_t *r);
+ void GetLocalParams(const Double_t *loct, const Double_t *locr,Double_t *t, Double_t *r);
+ //
+ void GetSensVolGlobalParams(UShort_t volid,Double_t *t, Double_t *r);
+ void GetSensVolLocalParams(UShort_t volid,Double_t *t, Double_t *r);
+ void GetSensVolGlobalParams(UShort_t volid,const Double_t* loct,const Double_t* locr,Double_t *t, Double_t *r);
+ void GetSensVolLocalParams(UShort_t volid,const Double_t* loct,const Double_t* locr,Double_t *t, Double_t *r);
+ //
+ void CalcDerivLocGlo(Double_t *deriv);
+ void CalcDerivGloLoc(Int_t idx,Double_t *deriv);
+ void CalcDerivGloLoc(Int_t sensVol,Int_t paridx,Double_t* derivative);
+ void CalcDerivCurLoc(Int_t sensVol,Int_t paridx,Double_t* derivative);
+ void CalcDerivDPosDPar(Int_t sensVol,const Double_t *pl,Double_t *deriv);
+ //
+ // forse non serve...
+ AliAlignObjParams *GetSensitiveVolumeGlobalMisalignment(UShort_t voluid, const Double_t *deltalocal);
+ // mo' proviamo questo
+ AliAlignObjParams *GetSensitiveVolumeTotalMisalignment(UShort_t voluid, const Double_t *deltalocal);
+ //
+ static Int_t GetIndexFromVolumeID(UShort_t volid);
+ static UShort_t GetVolumeIDFromSymname(const Char_t *symname);
+ static UShort_t GetVolumeIDFromIndex(Int_t index);
+ static Bool_t IsSensor(UShort_t vid);
+ static Int_t SensVolMatrix(UShort_t volid, TGeoHMatrix *m);
+ static Int_t SensVolOrigGlobalMatrix(UShort_t volid, TGeoHMatrix *m);
+
+ //
+protected:
+ //
+ void AssignDetType();
+ //
+protected:
+ //
+ Int_t fNSensVol; // number of sensor it refers to
+ Int_t fIndex; // aliroot index
+ Int_t fDetType; // Detector type
+ UShort_t fVolumeID; // aliroot volune ID
+ UShort_t fNParTot; // total number of parameters
+ UShort_t fNParFree; // number of free parameters
+ TArrayS fParOffs; // offsets of free params in the fit results
+ Int_t fNProcPoints; // number of processed points
+ Float_t fSigmaFactor[3]; // multiplicative factor for referred sensor X,Y,Z error
+ Float_t *fParVals; // values of the fitted params
+ Float_t *fParErrs; // errors of the fitted params
+ Float_t *fParCstr; // Gaussian type constraint on parameter, 0 means fixed param
+ //
+ TArrayI fSensVolIndex; // aliroot indices for sensors
+ TArrayS fSensVolVolumeID; // aliroot indices for sensors volumes
+ TGeoHMatrix *fMatrix; // ideal TGeoHMatrix of the supermodule
+ TGeoHMatrix *fSensVolMatrix; // sensor's ideal matrices
+ TGeoHMatrix *fSensVolModifMatrix; // sensor's modified matrices
+ //
+ AliITSAlignMille2Module* fParent; // optional parent pointer
+ TObjArray fChildren; // array of optional children
+ //
+ static const Float_t fgkDummyConstraint; // dummy (lose) contraint on parameter
+ //
+ ClassDef(AliITSAlignMille2Module, 0)
+};
+
+#endif