#include "AliITSAlignMille2ConstrArray.h"
#include "AliITSAlignMille2Module.h"
ClassImp(AliITSAlignMille2ConstrArray)
AliITSAlignMille2ConstrArray::AliITSAlignMille2ConstrArray() :
AliITSAlignMille2Constraint(),
fModuleIDs(0),
fModulePatt(0),
fCoeffs(0),
fError(0)
{}
AliITSAlignMille2ConstrArray::AliITSAlignMille2ConstrArray(const Char_t* name,Double_t *parcf,Int_t npar,Double_t val,Double_t err) :
AliITSAlignMille2Constraint(name,kTypeGaussian,-100,val,0),
fModuleIDs(0),
fModulePatt(0),
fCoeffs(npar),
fError(err)
{
for (int i=0;i<npar;i++) {fCoeffs[i] = parcf[i]; if (parcf[i]!=0) SetBit(0x1<<i);}
}
AliITSAlignMille2ConstrArray::AliITSAlignMille2ConstrArray(const AliITSAlignMille2ConstrArray& src) :
AliITSAlignMille2Constraint(src),
fModuleIDs(0),
fModulePatt(0),
fCoeffs(0),
fError(0)
{}
void AliITSAlignMille2ConstrArray::AddModule(AliITSAlignMille2Module* mod, Bool_t needGeom)
{
int nmd = GetNModules();
for (int im=nmd;im--;) {if (mod->GetUniqueID() == (UInt_t)fModuleIDs[im]) return; }
fModuleIDs.Set(nmd+1);
fModulePatt.Set(nmd+1);
fModuleIDs[nmd] = mod->GetUniqueID();
if (needGeom) {
double jacobian[AliITSAlignMille2Module::kMaxParGeom][AliITSAlignMille2Module::kMaxParGeom];
if (mod->GeomParamsGlobal()) mod->CalcDerivLocGlo(&jacobian[0][0]);
Short_t patt = GetPattern();
if (mod->GeomParamsGlobal()) {
for (int i=AliITSAlignMille2Module::kMaxParGeom;i--;) patt &= ~BIT(i);
for (int i=0;i<AliITSAlignMille2Module::kMaxParGeom;i++) {
if (!IncludesParam(i)) continue;
for (int j=0;j<AliITSAlignMille2Module::kMaxParGeom;j++) if (jacobian[i][j]!=0) patt |= BIT(j);
}
}
fModulePatt[nmd] = patt;
}
}
Bool_t AliITSAlignMille2ConstrArray::IncludesModule(Int_t id) const
{
int nmd = GetNModules();
for (int i=nmd;i--;) if (fModuleIDs[i]==id) return kTRUE;
return kFALSE;
}
Bool_t AliITSAlignMille2ConstrArray::IncludesModPar(Int_t id,Int_t par) const
{
int nmd = GetNModules();
for (int i=nmd;i--;) {
if (fModuleIDs[i]!=id) continue;
if (fModulePatt[i] & (0x1<<par)) return kTRUE;
}
return kFALSE;
}
Bool_t AliITSAlignMille2ConstrArray::IncludesModPar(const AliITSAlignMille2Module* mod, Int_t par) const
{
return IncludesModPar(mod->GetUniqueID(), par);
}
void AliITSAlignMille2ConstrArray::Print(Option_t* ) const
{
printf("#%3d Constraint %s of type %d | Value=%+e Error=%+e\n",GetConstraintID(),GetName(),GetType(),GetValue(),GetError());
printf("Weights on params: "); for (int i=0;i<GetNCoeffs();i++) printf("%+.3e ",GetCoeff(i));
printf("\nModules involved: \n");
int nmd = GetNModules();
for (int i=0;i<nmd;i++) {printf("%4d |",GetModuleID(i)); if ( ((i+1)%14)==0 ) printf("\n");}
if ( nmd%14 ) printf("\n");
}
AliITSAlignMille2ConstrArray.cxx:1 AliITSAlignMille2ConstrArray.cxx:2 AliITSAlignMille2ConstrArray.cxx:3 AliITSAlignMille2ConstrArray.cxx:4 AliITSAlignMille2ConstrArray.cxx:5 AliITSAlignMille2ConstrArray.cxx:6 AliITSAlignMille2ConstrArray.cxx:7 AliITSAlignMille2ConstrArray.cxx:8 AliITSAlignMille2ConstrArray.cxx:9 AliITSAlignMille2ConstrArray.cxx:10 AliITSAlignMille2ConstrArray.cxx:11 AliITSAlignMille2ConstrArray.cxx:12 AliITSAlignMille2ConstrArray.cxx:13 AliITSAlignMille2ConstrArray.cxx:14 AliITSAlignMille2ConstrArray.cxx:15 AliITSAlignMille2ConstrArray.cxx:16 AliITSAlignMille2ConstrArray.cxx:17 AliITSAlignMille2ConstrArray.cxx:18 AliITSAlignMille2ConstrArray.cxx:19 AliITSAlignMille2ConstrArray.cxx:20 AliITSAlignMille2ConstrArray.cxx:21 AliITSAlignMille2ConstrArray.cxx:22 AliITSAlignMille2ConstrArray.cxx:23 AliITSAlignMille2ConstrArray.cxx:24 AliITSAlignMille2ConstrArray.cxx:25 AliITSAlignMille2ConstrArray.cxx:26 AliITSAlignMille2ConstrArray.cxx:27 AliITSAlignMille2ConstrArray.cxx:28 AliITSAlignMille2ConstrArray.cxx:29 AliITSAlignMille2ConstrArray.cxx:30 AliITSAlignMille2ConstrArray.cxx:31 AliITSAlignMille2ConstrArray.cxx:32 AliITSAlignMille2ConstrArray.cxx:33 AliITSAlignMille2ConstrArray.cxx:34 AliITSAlignMille2ConstrArray.cxx:35 AliITSAlignMille2ConstrArray.cxx:36 AliITSAlignMille2ConstrArray.cxx:37 AliITSAlignMille2ConstrArray.cxx:38 AliITSAlignMille2ConstrArray.cxx:39 AliITSAlignMille2ConstrArray.cxx:40 AliITSAlignMille2ConstrArray.cxx:41 AliITSAlignMille2ConstrArray.cxx:42 AliITSAlignMille2ConstrArray.cxx:43 AliITSAlignMille2ConstrArray.cxx:44 AliITSAlignMille2ConstrArray.cxx:45 AliITSAlignMille2ConstrArray.cxx:46 AliITSAlignMille2ConstrArray.cxx:47 AliITSAlignMille2ConstrArray.cxx:48 AliITSAlignMille2ConstrArray.cxx:49 AliITSAlignMille2ConstrArray.cxx:50 AliITSAlignMille2ConstrArray.cxx:51 AliITSAlignMille2ConstrArray.cxx:52 AliITSAlignMille2ConstrArray.cxx:53 AliITSAlignMille2ConstrArray.cxx:54 AliITSAlignMille2ConstrArray.cxx:55 AliITSAlignMille2ConstrArray.cxx:56 AliITSAlignMille2ConstrArray.cxx:57 AliITSAlignMille2ConstrArray.cxx:58 AliITSAlignMille2ConstrArray.cxx:59 AliITSAlignMille2ConstrArray.cxx:60 AliITSAlignMille2ConstrArray.cxx:61 AliITSAlignMille2ConstrArray.cxx:62 AliITSAlignMille2ConstrArray.cxx:63 AliITSAlignMille2ConstrArray.cxx:64 AliITSAlignMille2ConstrArray.cxx:65 AliITSAlignMille2ConstrArray.cxx:66 AliITSAlignMille2ConstrArray.cxx:67 AliITSAlignMille2ConstrArray.cxx:68 AliITSAlignMille2ConstrArray.cxx:69 AliITSAlignMille2ConstrArray.cxx:70 AliITSAlignMille2ConstrArray.cxx:71 AliITSAlignMille2ConstrArray.cxx:72 AliITSAlignMille2ConstrArray.cxx:73 AliITSAlignMille2ConstrArray.cxx:74 AliITSAlignMille2ConstrArray.cxx:75 AliITSAlignMille2ConstrArray.cxx:76 AliITSAlignMille2ConstrArray.cxx:77 AliITSAlignMille2ConstrArray.cxx:78 AliITSAlignMille2ConstrArray.cxx:79 AliITSAlignMille2ConstrArray.cxx:80 AliITSAlignMille2ConstrArray.cxx:81 AliITSAlignMille2ConstrArray.cxx:82 AliITSAlignMille2ConstrArray.cxx:83 AliITSAlignMille2ConstrArray.cxx:84 AliITSAlignMille2ConstrArray.cxx:85 AliITSAlignMille2ConstrArray.cxx:86 AliITSAlignMille2ConstrArray.cxx:87 AliITSAlignMille2ConstrArray.cxx:88 AliITSAlignMille2ConstrArray.cxx:89 AliITSAlignMille2ConstrArray.cxx:90 AliITSAlignMille2ConstrArray.cxx:91 AliITSAlignMille2ConstrArray.cxx:92 AliITSAlignMille2ConstrArray.cxx:93 AliITSAlignMille2ConstrArray.cxx:94 AliITSAlignMille2ConstrArray.cxx:95 AliITSAlignMille2ConstrArray.cxx:96 AliITSAlignMille2ConstrArray.cxx:97 AliITSAlignMille2ConstrArray.cxx:98 AliITSAlignMille2ConstrArray.cxx:99 AliITSAlignMille2ConstrArray.cxx:100 AliITSAlignMille2ConstrArray.cxx:101 AliITSAlignMille2ConstrArray.cxx:102 AliITSAlignMille2ConstrArray.cxx:103 AliITSAlignMille2ConstrArray.cxx:104 AliITSAlignMille2ConstrArray.cxx:105 AliITSAlignMille2ConstrArray.cxx:106