Interface to AliMillePede2 alignment class for the ALICE ITS detector ITS specific alignment class which interface to AliMillepede. For each track ProcessTrack calculates the local and global derivatives at each hit and fill the corresponding local equations. Provide methods for fixing or constraning detection elements for best results. author M. Lunardon (thanks to J. Castillo), ruben.shahoyan@cern.ch
enum { | kX | |
kY | ||
kZ | ||
kCosmics | ||
kCollision | ||
kNDataType | ||
kNLocal | ||
kMaxPoints | ||
kNParChGeom | ||
kNParCh | ||
kMaxITSSensID | ||
kVtxSensID | ||
kMaxITSSensVID | ||
kVtxSensVID | ||
kMinITSSupeModuleID | ||
kSDDoffsID | ||
kNSDDmod | ||
kCovIScaleBit | ||
kSameInitDeltasBit | ||
kSameInitSDDRespBit | ||
kSameInitSDDVDriftBit | ||
kSameDiamondBit | ||
kSameInitSDDCorrMapBit | ||
kSameInitGeomBit | ||
kDiamondIgnore | ||
kDiamondCheckIfPrompt | ||
kDiamondUse | ||
kOCDBDefaultPath | ||
kOCDBSpecificPath | ||
kGeomFile | ||
kSuperModileFile | ||
kConstrRefFile | ||
kPreDeltaFile | ||
kPreCalSDDFile | ||
kPreVDriftSDDFile | ||
kPreCorrMapSDDFile | ||
kInitCorrMapSDDFile | ||
kInitCalSDDFile | ||
kInitVDriftSDDFile | ||
kInitDeltaFile | ||
kInitGeomFile | ||
kGlobalDeltas | ||
kConstrLocal | ||
kModVolID | ||
kModIndex | ||
kPseudoParents | ||
kTrackFitMethod | ||
kMinPntTrack | ||
kNStDev | ||
kResCutInit | ||
kResCutOther | ||
kLocalSigFactor | ||
kStartFactor | ||
kFinalFactor | ||
kBField | ||
kSparseMatrix | ||
kRequirePoint | ||
kConstrOrphans | ||
kConstrSubunits | ||
kApplyConstr | ||
kExtraClustersMode | ||
kTPAFitter | ||
kUseLocalYErr | ||
kMinPointsSens | ||
kSDDVDCorrMult | ||
kWeightPt | ||
kUseDiamond | ||
kCorrectDiamond | ||
kUseVertex | ||
kSameSDDT0 | ||
kNKeyWords | ||
}; | ||
enum TObject::EStatusBits { | kCanDelete | |
kMustCleanup | ||
kObjInCanvas | ||
kIsReferenced | ||
kHasUUID | ||
kCannotPick | ||
kNoContextMenu | ||
kInvalidObject | ||
}; | ||
enum TObject::[unnamed] { | kIsOnHeap | |
kNotDeleted | ||
kZombie | ||
kBitMask | ||
kSingleKey | ||
kOverwrite | ||
kWriteDelete | ||
}; |
Bool_t | fAllowPseudoParents | For simple constraints don't involve parents into the fit |
Double_t | fBField | value of magnetic field |
Bool_t | fBOn | magentic field ON |
Int_t | fBug | / tag for temporary bug correction |
TObjArray | fCacheMatrixCurr | cach for prealigned geom matrices |
TObjArray | fCacheMatrixOrig | cach for original geom matrices |
Int_t | fCheckDiamondPoint | kDiamondIgnore: ignore in this event, kDiamondCheckIfPrompt: verify if track is prompt, kDiamondUse: use w/o verification |
TArrayD | fClusGlo | global coordinates of the clusters |
TArrayD | fClusLoc | local coordinates of the clusters |
TArrayD | fClusSigLoc | local cov matrix of the clusters |
AliTrackPoint | fCluster | current cluster |
Int_t | fConstrCharge | optional constraint on charge of Helix track (0 - no constraint) |
Double_t | fConstrPT | optional PT constraint for helix (abs value) |
Double_t | fConstrPTErr | error on this constraint (0 - exact) |
TClonesArray* | fConstrRef | array of refererence deltas with respect to which the constraint are defined (survey?) |
TString | fConstrRefPath | file with prealigned objects wrt which constraints are defined |
TObjArray | fConstraints | list of constraints |
TObjArray | fConvAlgMatOld | array to keep matrices of alignables for deltas conversion |
Bool_t | fConvertPreDeltas | when the prealignment deltas come from UserInfo, convert them from UserInfo geometry to target one |
Double_t | fCorrDiamond[3] | diamond correction |
Float_t | fCovIScale[20] | optional scaling for inv.cov matrix (debiasing). MANAGED BY THE USER EXTERNALLY |
AliITSAlignMille2Module* | fCurrentModule | Current SuperModule index |
Int_t | fCurrentSensID | sensor index for current cluster |
Bool_t | fCurvFitWasConstrained | flag that the last fit had constrained curvature |
Int_t | fDataType | is this cosmics or collision processing? |
Double_t | fDerivativeGlo[9][3] | XYZ deriv. over global params |
Double_t | fDerivativeLoc[5][3] | XYZ deriv. over local params |
AliTrackPoint | fDiamond | optional constraint on the vertex |
AliTrackPoint | fDiamondI | constraint on the vertex with inverted error matrix |
Int_t | fDiamondModID | id of the fake diamond module |
TString | fDiamondPath | file with diamond constraint |
Int_t | fDiamondPointID | ID of the diamond point in the track |
Double_t | fDriftSpeed[50] | temporary array for corrected drift speed of SDD alitrackpoints |
Double_t | fDriftSpeed0[50] | temporary array for original drift speed of SDD alitrackpoints |
Double_t | fDriftTime0[50] | temporary array for drift time 0's used for SDD alitrackpoints |
Double_t | fExtClusterPar[9] | array to store the parameters of the externally imposed cluster |
Int_t | fExtraClustersMode | / 1=remove random / 2=remove internal / 10=use only tracks with xcl |
Double_t | fFinalFac | Final factor for chi2 cut |
Bool_t | fFixCurvIfConstraned | when fit curv. was constrained, don't pass it as a free param to MP2 |
TGeoManager* | fGeoManager | pointer to Alice geomanager |
TString | fGeometryPath | Geometry file name |
Double_t* | fGlobalDerivatives | Array of global derivatives |
AliITSCorrectSDDPoints* | fIniCorrMapSDD | SDD initial correction map |
TString | fIniDeltaPath | where to take the deltas used to produce the points |
TString | fIniGeomPath | where to take the ideal geometry used to produce the points |
AliITSresponseSDD* | fIniRespSDD | array of SDD t0/vdrift calib params used to create the track points |
TString | fIniSDDCorrMapPath | initial SDD corr.map file name |
TString | fIniSDDRespPath | where to take the initial SDD response used to produce the points |
TString | fIniSDDVDriftPath | initial SDD vdrift file name |
Int_t | fIniTrackParamsMeth | method for track fit |
TList* | fIniUserInfo | initial user info (validity is not guaranteed after initialization) |
TObjArray* | fIniVDriftSDD | array of AliITSDriftSpeedArraySDD objects used for original reco |
Bool_t | fIsConfigured | flag for loaded config file |
Bool_t | fIsMilleInit | Flag for initialization |
Bool_t | fIsSDDVDriftMult | use multiplicative correction for SDD vdrift |
Double_t | fLocalDerivatives[5] | Array of local deriv. |
Double_t | fLocalInitParEr[5][5] | Array with inital values for local parameters for current track |
Double_t | fLocalInitParam[5] | Array with inital values for local parameters for current track |
Double_t* | fMeasGlo | current point glob. coord (AliTrackPoint) |
Double_t* | fMeasLoc | current point local coordinates (the original ones) |
TObjArray | fMilleModule | / array of super modules to be aligned |
Int_t | fMilleVersion | / tag for backward compatibility |
AliMillePede2* | fMillepede | Detector independent alignment class |
Int_t | fMinNPtsPerTrack | min number of points per track to accept it |
Int_t | fMinPntPerSens | min number of points per module to vary it |
Double_t | fModuleInitParam[9] | Array with inital values for current module parameters (init geometry) |
Int_t | fNGlobal | Number of global parameters |
Int_t | fNLocal | Number of local parameters |
Int_t | fNModules | number of defined modules from config file |
Int_t | fNReqDet[2][3] | number of points required in Detector[n] |
Int_t | fNReqDetDown[2][3] | number of points required in Detector[n] with Y<0 |
Int_t | fNReqDetUp[2][3] | number of points required in Detector[n] with Y>0 |
Int_t | fNReqLay[2][6] | number of points required in layer[n] |
Int_t | fNReqLayDown[2][6] | number of points required in layer[n] with Y<0 |
Int_t | fNReqLayUp[2][6] | number of points required in layer[n] with Y>0 |
Int_t | fNStdDev | Number of standard deviations for chi2 cut |
Int_t | fNSuperModules | / number of custom supermodules in SM file |
Double_t | fPintGlo[3] | track/module intersection point in global coordinates |
Double_t | fPintLoc[3] | track/module intersection point in local coordinates |
Double_t | fPintLoc0[3] | track/module intersection point in local coordinates (before variation) |
TArrayS | fPreAlignQF | prealignment flags (not used?) |
TString | fPreCalSDDRespPath | precalibration SDD response file name |
AliITSCorrectSDDPoints* | fPreCorrMapSDD | SDD precalibration correction map |
TString | fPreDeltaPath | file with prealigned objects |
AliITSresponseSDD* | fPreRespSDD | array of SDD t0/vdrift calib params |
TString | fPreSDDCorrMapPath | precalibration SDD corr.map file name |
TString | fPreSDDVDriftPath | precalibration SDD vdrift file name |
TObjArray* | fPreVDriftSDD | array of AliITSDriftSpeedArraySDD objects to be used as a starting point instead of fIniVDriftSDD |
TClonesArray* | fPrealignment | array of prealignment global deltas |
Bool_t | fRequirePoints[2] | required points in specific layers |
Double_t | fResCut | Cut on residual for other iterations |
Double_t | fResCutInitial | Cut on residual for first iteration |
AliTrackFitterRieman* | fRieman | riemann fitter for helices |
Int_t | fRunID | current runID |
AliITSsegmentationSDD* | fSegmentationSDD | extraction of SDD segmentation params |
Double_t | fSigmaFactor[3] | multiplicative factor for cluster sigmaX,Y,Z |
Double_t* | fSigmaLoc | stdev current point |
Double_t | fStartFac | Initial factor for chi2 cut |
TObjArray | fSuperModule | / array of super modules defined in supermodule file |
AliITSTPArrayFit* | fTPAFitter | TPArrayFitter |
Int_t | fTempExcludedModule | / single module temporary excluded from initial fit |
Int_t | fTotBadLocEqPoints | total number of reject points because of bad EqLoc |
AliTrackPointArray* | fTrack | pointer to current track |
TObjArray | fTrackBuff | buffer for tracks of min length |
Double_t | fTrackWeight | weight given by the user to current track |
Bool_t | fUseDiamond | use diamond as a vertex constraint |
Bool_t | fUseGlobalDelta | intetpret deltas as global |
Bool_t | fUseLocalYErr | use local Yerror due to the sensor thickness |
Bool_t | fUsePreAlignment | start from prealigned setup |
Bool_t | fUseVertex | use vertex for constraint |
UInt_t | fUserProvided | settings which user provided: not to update from the UserUnfo |
Bool_t | fVertexSet | vertex is set for current track |
Double_t | fWeightPt | weight track equations by pT in this power |
static AliITSAlignMille2* | fgInstance | global pointer on itself |
static Int_t | fgInstanceID | global counter of the instances |
static const Char_t* | fgkRecKeys[2147483647] | keywords for config file records |
static const Char_t | fgkXYZ[2147483647] | XYZ labels |
Inheritance Chart: | ||||||||
|
main constructor that takes input from configuration file
read new record from config file
return 0 if success 1 if error in module index or voluid
set minimum number of points in specific detector or layer where = LAYER or DETECTOR ndet = detector number: 1-6 for LAYER and 1-3 for DETECTOR (SPD=1, SDD=2, SSD=3) updw = 1 for Y>0, -1 for Y<0, 0 if not specified nreqpts = minimum number of points of that type
volume ID from symname works for sensitive volumes only
Load the global deltas from this file. The local gaussian constraints on some modules will be defined with respect to the deltas from this reference file, converted to local delta format. Note: conversion to local format requires reloading the geometry!
Constrain equation defined by par to value
Parameter iPar is encourage to vary in [-value;value]. If value == 0, parameter is fixed
create a new AliTrackPointArray keeping only defined modules move points according to a given prealignment, if any sort alitrackpoints w.r.t. global Y direction, if cosmics
sort alitrackpoints w.r.t. global Y direction
initialize geometry parameters for a given detector for current cluster (fCluster) fGlobalInitParam[] is set as: [tx,ty,tz,psi,theta,phi] (old was [tx,ty,tz,theta,psi,phi] ROOT's angles...) *** At the moment: using Raffalele's angles definition *** return 0 if success If module is found but has no parameters to vary, return 1
return pointer to a defined supermodule return NULL if error
return pointer to a defined supermodule return NULL if error
return pointer to a defined/contained supermodule return NULL otherwise
get delta from prealignment for given volume
get delta with respect to which the constraint is declared
initialize local parameters with different methods for current track (fTrack)
checks if supermodule with this symname is defined and return the internal index return -1 if not.
checks if module with this symname is defined and return the internal index return -1 if not.
checks if supermodule 'voluid' is defined and return the internal index return -1 if not.
checks if the sensitive module 'voluid' is contained inside a supermodule and return the internal index of the last identified supermodule return -1 if error IMPORTANT: always start from the end to start from the sensors
checks if the sensitive module 'voluid' is contained inside a supermodule and return the internal index of the last identified supermodule return -1 if error IMPORTANT: always start from the end to start from the sensors
checks if AliTrackPoints belongs to defined modules return number of good poins return 0 if not enough points
Process track; Loop over hits and set local equations here 'track' is a AliTrackPointArray return 0 if success;
calculate track intersection point in local coordinates according with a given set of parameters (local(4) and global(6)) and fill fPintLoc/Glo local are: pgx0, pgz0, ugx, ugz OR riemann fitters pars global are: tx,ty,tz,psi,theta,phi (Raff's delta angles in deg.) return 0 if success
Define local equation for current cluster in X and Z coor. and store them to memory return -1 in case of failure to build some equation 0 if no free global parameters were found but local eq is built 1 if both local and global eqs are built store first intersection point
Define local equation for current cluster in X Y and Z coor. and store them to memory return -1 in case of failure to build some equation 0 if no free global parameters were found but local eq is built 1 if both local and global eqs are built
Set local equations with data stored in m return 0 if success
load definitions of supermodules from a root file return 0 if success
require that sum of modifications for the childs of this module is = val, i.e. the internal corrections moves the module as a whole by fixed value (0 by default). pattern is the bit pattern for the parameters to constrain
require that median of the modifications for the childs of this module is = val, i.e. the internal corrections moves the module as a whole by fixed value (0 by default) module the outliers. pattern is the bit pattern for the parameters to constrain The difference between the mean and the median will be transfered to the parent
require that median of the modifications for the supermodules which have no parents is = val, i.e. the corrections moves the whole setup by fixed value (0 by default) modulo the outliers. pattern is the bit pattern for the parameters to constrain
require that median of the modifications for the supermodules which have no parents is = val, i.e. the corrections moves the whole setup by fixed value (0 by default) modulo the outliers. pattern is the bit pattern for the parameters to constrain
apply constraint on parameters in the local frame
apply the constraint on the local corrections of a list of modules
require that sum of modifications for the childs of this module is = val, i.e. the internal corrections moves the module as a whole by fixed value (0 by default). pattern is the bit pattern for the parameters to constrain
require that median of the modifications for the supermodules which have no parents is = val, i.e. the corrections moves the whole setup by fixed value (0 by default) modulo the outliers. pattern is the bit pattern for the parameters to constrain
require that median or mean of the modifications for the childs of this module is = val, i.e. the internal corrections moves the module as a whole by fixed value (0 by default) module the outliers. pattern is the bit pattern for the parameters to constrain The difference between the mean and the median will be transfered to the parent
require that median or mean of modifications for the supermodules which have no parents is = val, i.e. the corrections moves the whole setup by fixed value (0 by default). pattern is the bit pattern for the parameters to constrain
check if par of the module participates in some constraint, and set the flag for their types
check if parameter par is varied for this module or its children up to the level depth
check if parameter par is varied and is not subjected to gaussian constraint for the children up to the level depth
are there fixed modules with no parent (normally in such a case the constraints on the orphans should not be applied
extract calibration information used for TrackPointArray creation from run info
extract the path for specific CDB path from user info. If it is the same as already loaded, set corresponing bit
build arrays for the fast access to sensor original matrices (used for production)
constrain q and pT of the helical fit of the track (should be set before process.track)
constrain charge and curvature of the helical fit of the track (should be set before process.track)
Create \Deltas for every explicitly or implicitly (via non-alignable volumes) varied or prealigned module. If the module has inded J in the hierarchy of alignable volumes (0 - the top, most coarse level), then its Delta is expressed via MP2 \deltas (in global frame) and prealignment \DeltaP's as: \Delta_J = Y X Y^-1 where X = \delta_J * \DeltaP_J Y = Prod_{K=0,J-1} \delta_K Note that \delta_L accounts not only for its own correction but also of all non-alignable modules in the hierarchy chain from L up to the closest alignable: while (parent && !parent->IsAlignable()) { \delta_L->MultiplyLeft( \delta_parent ); parent = parent->GetParent(); }
create object with SDD repsonse (t0 and vdrift corrections) accounting for eventual precalibration if there was a precalibration provided, copy it to new arrray
Use provided UserInfo to load the initial calib parameters (geometry, SDD response...) Can be used if set of data was processed with different calibration
Load the initial calib parameters (geometry, SDD response...) Can be used if set of data was processed with different calibration
calculate the locid row of the jacobian for transformation of the local coordinate to global at current point
impose equality of Left/Right sides VDrift correction for SDD
extract the drift information from SDD track point
convert prealignment deltas from old geometry to new one NOTE: the target geometry must be loaded at time this method is called NOTE: This method can be ONLY used when as a prealignment deltas those used for the production of trackpoints (e.g. extracted from the UserInfo). The prealignment deltas provided by user via config file must be already converted to target geometry: this can be done externally using the macro ConvertDeltas.C delta_j_new = delta_j_old * Xj_old * Xj_new^-1 where X = Prod{delta_i,i=j-1:0} M_j with j - the level of the alignable volume in the hierarchy, M - corresponding ideal matrix Note that delta_j * Xj is equal to final (misaligned) matrix of corresponding geometry, G_j. Since this method is used ONLY in the case where the prealignment deltas are equal to production deltas, we have already loaded G_j_old in the fConvAlgMatOld (filled in the CacheMatricesOrig) Hence, delta_j_new = G_j_old * Xj_new^-1
Used only for the deltas conversion from one geometry to another Sort the matrices according to hiearachy (coarse -> fine)
Used only for the deltas conversion from one geometry to another True if matJ is higher in hierarchy than
find the delta for given module
{return (AliITSAlignMille2Module*)fMilleModule[id];}
{return (AliITSAlignMille2Module*)fSuperModule[id];}
{return fCurrentModule ? fCurrentModule->GetMatrix():0;}
{return fCurrentModule ? fCurrentModule->GetMatrix()->GetTranslation():0;}
{return fCurrentModule ? Int_t(fCurrentModule->GetUniqueID()):-1;}
methods for point unbiasing (via scaling its inverted cov.matrix)
{fFixCurvIfConstraned = v;}
{if (ip<kMaxPoints) fCovIScale[ip] = v; TouchCovIScale();}
{for (int i=TMath::Min(np,kMaxPoints);i--;) fCovIScale[i]=v[i]; TouchCovIScale();}
{return (AliITSAlignMille2Constraint*)fConstraints.At(i);}
debug stuffs
{return (AliITSAlignMille2Constraint*)fConstraints.FindObject(name);}
moved from private to public
{return IsVIDContained(voluid);}
{return IsZero(fLocalDerivatives[index]=value);}
millepede methods
{return IsZero(fGlobalDerivatives[index]=value);}