]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSAlignMille2Module.cxx
remove props
[u/mrichter/AliRoot.git] / ITS / AliITSAlignMille2Module.cxx
index 287c439caea5595c5b13257d0f2e4d25defd2c21..5d967c64b959534e8804453200887948718075fc 100644 (file)
@@ -43,7 +43,7 @@ ClassImp(AliITSAlignMille2Module)
 #define CORHW_\r
 \r
 AliAlignObjParams AliITSAlignMille2Module::fgTempAlignObj;\r
-const Float_t AliITSAlignMille2Module::fgkDummyConstraint = 1.E3;\r
+const Float_t AliITSAlignMille2Module::fgkDummyConstraint = 1e-2;//1.E3;\r
     \r
 //-------------------------------------------------------------\r
 AliITSAlignMille2Module::AliITSAlignMille2Module() : \r
@@ -77,7 +77,8 @@ AliITSAlignMille2Module::AliITSAlignMille2Module() :
 } \r
 \r
 //-------------------------------------------------------------\r
-AliITSAlignMille2Module::AliITSAlignMille2Module(Int_t index,UShort_t volid,char* symname,TGeoHMatrix *m,Int_t nsv,UShort_t *volidsv) : \r
+AliITSAlignMille2Module::AliITSAlignMille2Module(Int_t index, UShort_t volid, const char* symname,\r
+                                                const TGeoHMatrix *m, Int_t nsv, const UShort_t *volidsv) : \r
   TNamed(), \r
   fNSensVol(0), \r
   fIndex(-1),  \r
@@ -218,6 +219,7 @@ AliITSAlignMille2Module& AliITSAlignMille2Module::operator=(const AliITSAlignMil
   if (fNParTot) {\r
     fParVals = new Float_t[fNParTot];\r
     fParErrs = new Float_t[fNParTot];\r
+    fParCstr = new Float_t[fNParTot];\r
     for (int i=m.GetNParTot();i--;) {\r
       fParVals[i] = m.fParVals[i];\r
       fParErrs[i] = m.fParErrs[i];\r
@@ -252,7 +254,8 @@ AliITSAlignMille2Module::~AliITSAlignMille2Module() {
 } \r
 \r
 //-------------------------------------------------------------\r
-Int_t AliITSAlignMille2Module::Set(Int_t index, UShort_t volid, char* symname, TGeoHMatrix *m, Int_t nsv, UShort_t *volidsv) \r
+Int_t AliITSAlignMille2Module::Set(Int_t index, UShort_t volid, const char* symname, \r
+                                  const TGeoHMatrix *m, Int_t nsv, const UShort_t *volidsv) \r
 {\r
   // initialize a custom supermodule\r
   // index, volid, symname and matrix must be given\r
@@ -296,9 +299,9 @@ Int_t AliITSAlignMille2Module::Set(Int_t index, UShort_t volid, char* symname, T
 //-------------------------------------------------------------\r
 void AliITSAlignMille2Module::SetFreeDOF(Int_t dof,Double_t cstr)\r
 {\r
-  if (cstr>0)      fParCstr[dof] = fgkDummyConstraint+1.; // the parameter is free and unconstrained\r
-  else if (cstr<0) fParCstr[dof] = -cstr;                 // the parameter is free but constrained\r
-  else             fParCstr[dof] = 0;                     // fixed parameter\r
+  if (AliITSAlignMille2::IsZero(cstr)) fParCstr[dof] = 0;  // fixed parameter\r
+  else if (cstr>0)                     fParCstr[dof] = fgkDummyConstraint+1.; // the parameter is free and unconstrained\r
+  else                                 fParCstr[dof] = -cstr;                 // the parameter is free but constrained\r
 }\r
 \r
 //-------------------------------------------------------------\r
@@ -332,7 +335,7 @@ void AliITSAlignMille2Module::AddSensitiveVolume(UShort_t voluid)
   if (GetIndexFromVolumeID(voluid)<0) return; // bad volid\r
   //\r
   // in principle, the correct size of fSensVol... arrays was set outside but check anyway\r
-  if (fSensVolVolumeID.GetSize()<fNSensVol) {\r
+  if (fSensVolVolumeID.GetSize()<fNSensVol+1) {\r
     fSensVolVolumeID.Set(fNSensVol+1);\r
     fSensVolIndex.Set(fNSensVol+1);\r
   }\r
@@ -757,11 +760,14 @@ void AliITSAlignMille2Module::Print(Option_t*) const
   printf("Factors  : X=%.2f Y=%.2f Z=%.2f\n"\r
         "DOF: %cTx:%5d| %cTy:%5d| %cTz:%5d| %cPsi:%5d| %cTheta:%5d| %cPhi:%5d|",\r
         fSigmaFactor[0],fSigmaFactor[1],fSigmaFactor[2],\r
-        IsFreeDOF(kDOFTX) ? '+':'-',fParOffs[kDOFTX],IsFreeDOF(kDOFTY) ? '+':'-',fParOffs[kDOFTY],\r
-        IsFreeDOF(kDOFTZ) ? '+':'-',fParOffs[kDOFTZ],IsFreeDOF(kDOFPS) ? '+':'-',fParOffs[kDOFPS],\r
-        IsFreeDOF(kDOFTH) ? '+':'-',fParOffs[kDOFTH],IsFreeDOF(kDOFPH) ? '+':'-',fParOffs[kDOFPH]);\r
-  if (IsSDD()) printf("%cT0:%5d| %cDV:%5d|",IsFreeDOF(kDOFT0)?'+':'-',fParOffs[kDOFT0],\r
-                     IsFreeDOF(kDOFDV)?'+':'-',fParOffs[kDOFDV]);\r
+        IsFreeDOF(kDOFTX) ? '+':'-',GetParOffset(kDOFTX),IsFreeDOF(kDOFTY) ? '+':'-',GetParOffset(kDOFTY),\r
+        IsFreeDOF(kDOFTZ) ? '+':'-',GetParOffset(kDOFTZ),IsFreeDOF(kDOFPS) ? '+':'-',GetParOffset(kDOFPS),\r
+        IsFreeDOF(kDOFTH) ? '+':'-',GetParOffset(kDOFTH),IsFreeDOF(kDOFPH) ? '+':'-',GetParOffset(kDOFPH));\r
+  if (IsSDD()) {\r
+    printf("%cT0:%5d| %cDVl:%5d| %cDVr:%5d|",IsFreeDOF(kDOFT0)?'+':'-',GetParOffset(kDOFT0),\r
+          IsFreeDOF(kDOFDVL)?'+':'-',GetParOffset(kDOFDVL),IsFreeDOF(kDOFDVR)?'+':'-',GetParOffset(kDOFDVR));\r
+    if (IsVDriftLRSame()) printf("(dVL=dVR)");\r
+  }\r
   printf("\n");\r
   fMatrix->Print();\r
   printf("%4d Sensitive volumes | %6d Processed Points\n",fNSensVol,fNProcPoints);\r
@@ -795,7 +801,7 @@ void AliITSAlignMille2Module::AssignDetType()
   else if (tp.Contains("SDD",TString::kIgnoreCase)) fDetType = kSDD;\r
   else if (tp.Contains("SSD",TString::kIgnoreCase)) fDetType = kSSD;\r
   else fDetType = -1;\r
-  fNParTot = IsSDD() ? 8:6;\r
+  fNParTot = IsSDD() ? kMaxParTot:kMaxParGeom;\r
   fNParFree = 0;\r
   fParVals = new Float_t[fNParTot];\r
   fParErrs = new Float_t[fNParTot];  \r
@@ -962,6 +968,36 @@ void AliITSAlignMille2Module::GetGeomParamsLoc(Double_t *pars)
   //\r
 }\r
 \r
+\r
+//-------------------------------------------------------------\r
+void AliITSAlignMille2Module::CalcDerivDPosDPar(Int_t sensVol,const Double_t* pl, Double_t *deriv)\r
+{\r
+  // calculate jacobian of the global position vs Parameters (dPos/dParam) \r
+  // for the point in the sensor sensVol\r
+  const double kDel = 0.01;\r
+  double pos0[3],pos1[3],pos2[3],pos3[3];\r
+  double delta[kMaxParGeom];\r
+  //\r
+  for (int ip=kMaxParGeom;ip--;) delta[ip] = 0;\r
+  //\r
+  for (int ip=kMaxParGeom;ip--;) {\r
+    //\r
+    delta[ip] -= kDel;\r
+    GetSensitiveVolumeModifiedMatrix(sensVol,delta,!GeomParamsGlobal())->LocalToMaster(pl,pos0);    \r
+    delta[ip] += kDel/2;\r
+    GetSensitiveVolumeModifiedMatrix(sensVol,delta,!GeomParamsGlobal())->LocalToMaster(pl,pos1);    \r
+    delta[ip] += kDel;\r
+    GetSensitiveVolumeModifiedMatrix(sensVol,delta,!GeomParamsGlobal())->LocalToMaster(pl,pos2);    \r
+    delta[ip] += kDel/2;\r
+    GetSensitiveVolumeModifiedMatrix(sensVol,delta,!GeomParamsGlobal())->LocalToMaster(pl,pos3);    \r
+    //\r
+    delta[ip] = 0;\r
+    double *curd = deriv + ip*3;\r
+    for (int i=3;i--;) curd[i] = (8.*(pos2[i]-pos1[i]) - (pos3[i]-pos0[i]))/6./kDel;\r
+  }\r
+  //\r
+}\r
+\r
 //-------------------------------------------------------------\r
 void AliITSAlignMille2Module::CalcDerivGloLoc(Int_t idx,Double_t *deriv)\r
 {\r
@@ -1161,4 +1197,3 @@ void AliITSAlignMille2Module::GetLocalParams(const Double_t* glot, const Double_
   fgTempAlignObj.SetMatrix(*fSensVolMatrix);\r
   fgTempAlignObj.GetPars(t,r);\r
 }\r
-\r