![]() |
AliRoot Core
99e027a (99e027a)
|
The reconstruction is a multistage process, driven by the AliMUONTracker and AliMUONReconstructor classes via the AliReconstruction class, which is divided into three parts:
All the adjustable options and parameters used to tune the different part of the reconstruction are handled by the class AliMUONRecoParam.
Several versions of pre-clustering are available, all inheriting from AliMUONVClusterFinder, with different ways to loop over pads to form pre-clusters:
Several version of clustering are available, all inheriting from AliMUONVClusterFinder, with different degrees of complexity:
The cluster recontruction is driven by the class AliMUONSimpleClusterServer, inheriting from AliMUONVClusterServer. It can be performed either before or during the tracking. In the first case, all the chambers are fully clusterized and the clusters (objects inheriting from AliMUONVCluster stored into containers inheriting from AliMUONVClusterStore) are saved to TreeR in Muon.RecPoints.root file. We use the class AliMUONLegacyClusterServer (also inheriting from AliMUONVClusterServer) read back the TreeR and provide clusters to the tracking. In the second case, we clusterize the chambers only in the region where we are looking for new clusters to be attached to the track candidates. This makes the clustering faster but the clusters cannot be saved to the TreeR.
The MUON code provides two different algorithms to reconstruct the muon trajectory. In both cases the general tracking procedure is the same, the only difference being the way the track parameters are computed from the cluster positions. The "Original" algorithm perform a fit of the track parameters using the MINUIT package of Root, while the "Kalman" algorithm compute them using analytical formulae. The classes driving the tracking are AliMUONTrackReconstructor and AliMUONTrackReconstructorK for the "Original" and the "Kalman" algorithms respectively, both inheriting from AliMUONVTrackReconstructor. The reconstructed muon tracks are objects of the class AliMUONTrack.
The general tracking procedure is as follow:
The new clusters to be attached to the track are selected according to their local chi2 (i.e. their transverse position relatively to the track, normalized by the convolution of the cluster resolution with the resolution of the track extrapolated to the cluster location). If several compatible clusters are found on the same chamber, the track candidate is duplicated to consider all the possibilities.
The last part of the tracking is the extrapolation of the reconstructed tracks to the vertex of the collision. The vertex position is measured by the SPD (the Silicon Pixel layers of the ITS Detector). In order to be able to perform any kind of muon analysis, we need to compute the track parameters assuming the muon has been produced in the initial collision as well as the track parameters in the vertex plane. The first set of parameters is obtained by correcting for energy loss and multiple Coulomb scattering in the front absorber (we force the track to come from the exact vertex position (x,y,z) by using the Branson correction), while the second one is obtained by correcting for energy loss only.
The final results of the reconstruction - from which we will perform the physical analyses, compute detector efficiencies and perform calibration checks - are stored in objects of the class AliESDMuonTrack and saved in AliESD.root file. Three kinds of track can be saved: a tracker track matched with a trigger track, a tracker track alone and a trigger track alone (unused data members are set to default in the last two cases). The complete list of MUON data saved into ESD is given in section ESD content.
Several options and adjustable parameters allow to tune the entire reconstruction. They are stored in the OCDB in the directory MUON/Calib/RecoParam. However, it is possible to customize the parameters by adding the following lines in the reconstruction macro (runReconstruction.C):
AliMUONRecoParam *muonRecoParam = AliMUONRecoParam::Get...Param(); muonRecoParam->Use...(); muonRecoParam->Set...(); ... MuonRec->SetRecoParam("MUON",muonRecoParam);
Three sets of default parameters are available:
GetLowFluxParam()
: parameters for p-p collisionsGetHighFluxParam()
: parameters for Pb-Pb collisionsGetCosmicParam()
: parameters for cosmic runsGetCalibrationParam()
: parameters for cosmic runsThe latter is a dummy set which allows to avoid any reconstruction in case a software trigger event is taken. Software triggers are sent to trigger electronics during physics run in order to read the scalers: no action from the MUON tracker is required during such events whose reconstruction has to be skipped.
Every option/parameter can be set one by one. Here is the complete list of available setters:
SetClusteringMode("mode")
: set the clustering (pre-clustering) mode: NOCLUSTERING, PRECLUSTER, PRECLUSTERV2, PRECLUSTERV3, COG, SIMPLEFIT, SIMPLEFITV3, MLEM:DRAW, MLEM, MLEMV2, MLEMV3.SetTrackingMode("mode")
: Set the tracking mode: ORIGINAL, KALMAN.CombineClusterTrackReco(flag)
: switch on/off the combined cluster/track reconstructionSaveFullClusterInESD(flag, % of event)
: save all cluster info (including pads) in ESD, for the given percentage of events (100% by default)SelectOnTrackSlope(flag)
: switch to select tracks on their slope instead of impact parameter at vertex and/or bending momentum.SetMinBendingMomentum(value)
: set the minimum acceptable value (GeV/c) of track momentum in bending planeSetMaxBendingMomentum(value)
: set the maximum acceptable value (GeV/c) of track momentum in bending planeSetMaxNonBendingSlope(value)
: set the maximum value of the track slope in non bending plane (used when selecting on track slope).SetMaxBendingSlope(value)
: set the maximum value of the track slope in non bending plane (used when selecting on track slope).SetNonBendingVertexDispersion(value)
: set the vertex dispersion (cm) in non bending plane (used for the original tracking and to select track on their non-bending impact parameter at vertex).SetBendingVertexDispersion(value)
: set the vertex dispersion (cm) in bending plane (used for the original tracking, to compute the error on the estimated bending momentum at the very begining and to select track on their bending impact parameter at vertex (used when B=0)).SetMaxNonBendingDistanceToTrack(value)
: set the maximum distance to the track to search for compatible cluster(s) in non bending direction. This value is convoluted with both the track and the cluster resolutions to define the region of interest.SetMaxBendingDistanceToTrack(value)
: set the maximum distance to the track to search for compatible cluster(s) in bending direction This value is convoluted with both the track and the cluster resolutions to define the region of interest.SetSigmaCutForTracking(value)
: set the cut in sigma to apply on cluster (local chi2) and track (global chi2) during trackingImproveTracks(flag, sigma cut)
: recompute the local chi2 of each cluster with the final track parameters and removed the ones that do not pass a new quality cut. The track is removed if we do not end with at least one good cluster per requested station and two clusters in station 4 and 5 together whatever they are requested or not.ImproveTracks(flag)
: same as above using the default quality cutSetSigmaCutForTrigger(value)
: set the cut in sigma to apply on track during trigger hit pattern searchSetStripCutForTrigger(value)
: set the cut in strips to apply on trigger track during trigger chamber efficiencySetMaxStripAreaForTrigger(value)
: set the maximum search area in strips to apply on trigger track during trigger chamber efficiencySetMaxNormChi2MatchTrigger(value)
: set the maximum normalized chi2 for tracker/trigger track matchingTrackAllTracks(flag)
: consider all the clusters passing the sigma cut (duplicate the track) or only the best oneRecoverTracks(flag)
: during the tracking procedure, if no cluster is found in station 1 or 2, we try it again after having removed (if possible with respect to the condition to keep at least 1 cluster per requested station) the worst cluster attached in the previous station (assuming it was a cluster from background).MakeTrackCandidatesFast(flag)
: make the primary track candidates formed by cluster on stations 4 and 5 assuming there is no magnetic field in that region to speed up the reconstruction.MakeMoreTrackCandidates(Bool_t flag)
: make the primary track candidate using 1 cluster on station 4 and 1 cluster on station 5 instead of starting from 2 clusters in the same station.ComplementTracks(Bool_t flag)
: look for potentially missing cluster to be attached to the track (a track may contain up to 2 clusters per chamber do to the superimposition of DE, while the tracking procedure is done in such a way that only 1 can be attached).RemoveConnectedTracksInSt12(Bool_t flag)
: extend the definition of connected tracks to be removed at the end of the tracking procedure to the ones sharing one cluster on more in any station, including stations 1 and 2.UseSmoother(Bool_t flag)
: use or not the smoother to recompute the track parameters at each attached cluster (used for Kalman tracking only)UseChamber(Int_t iCh, Bool_t flag)
: set the chambers to be used (disable the clustering if the chamber is not used).RequestStation(Int_t iSt, Bool_t flag)
: impose/release the condition "at least 1 cluster per station" for that station.BypassSt45(Bool_t st4, Bool_t st5)
: make the primary track candidate from the trigger track instead of using stations 4 and/or 5.SetHVSt12Limits(float low, float high)
: Set Low and High threshold for St12 HVSetHVSt345Limits(float low, float high)
: Set Low and High threshold for St345 HVSetPedMeanLimits(float low, float high)
: Set Low and High threshold for pedestal meanSetPedSigmaLimits(float low, float high)
: Set Low and High threshold for pedestal sigmaSetPadGoodnessMask(UInt_t mask)
: Set the goodness mask (see AliMUONPadStatusMapMaker)ChargeSigmaCut(Double_t value)
: Number of sigma cut we must apply when cutting on adc-pedSetDefaultNonBendingReso(Int_t iCh, Double_t val)
: Set the default non bending resolution of chamber iChSetDefaultBendingReso(Int_t iCh, Double_t val)
: Set the default bending resolution of chamber iChSetMaxTriggerTracks(Int_t val)
: Set the maximum number of trigger tracks above which the tracking is cancelledSetMaxTrackCandidates(Int_t val)
: Set the maximum number of track candidates above which the tracking abortSetManuOccupancyLimits(float low, float high)
: Set the limits for the acceptable manu occupancySetBuspatchOccupancyLimits(float low, float high)
: Set the limits for the acceptable bp occupancySetDEOccupancyLimits(float low, float high)
: Set the limits for the acceptable DE occupancyWe can use the method Print("FULL") to printout all the parameters and options set in the class AliMUONRecoParam.
RecoParams can be put into OCDB using the MakeMUONSingleRecoParam.C or MakeMUONRecoParamArray.C macros. The first stores only one (default) RecoParam. The latter allows to store either:
for real data with bunch crossing or
for cosmic runs.
Three kinds of track can be saved in ESD: a tracker track matched with a trigger track, a tracker track alone and a trigger track alone (unused data members are set to default values in the last two cases). These tracks are stored in objects of the class AliESDMuonTrack. Two methods can be used to know the content of an ESD track:
ContainTrackerData()
: Return kTRUE if the track contain tracker dataContainTriggerData()
: Return kTRUE if the track contain trigger dataThe AliESDMuonTrack objects contain:
The AliESDMuonCluster objects contain:
The AliESDMuonPad objects contain:
Every conversion between MUON objects (AliMUONVDigit/AliMUONVCluster/AliMUONTrack) and ESD objects (AliESDMuonPad/AliESDMuonCluster/AliESDMuonTrack) is done by the class AliMUONESDInterface.
WARNING: some of these conversions require input from outside, namely the magnetic field map, the geometry, the reconstruction parameters and/or the mapping segmentation. In particular:
There are 2 ways of using this class:
1) Using the static methods to convert the objects one by one (and possibly put them into the provided store):
... AliESDMuonTrack* esdTrack = esd->GetMuonTrack(iTrack); AliMUONTrackParam param; AliMUONESDInterface::GetParamAtVertex(*esdTrack, param);
... AliMUONVDigit *digit = ...; AliESDMuonPad esdPad; AliMUONESDInterface::MUONToESD(*digit, esdPad);
... AliMUONLocalTrigger* locTrg = ...; AliMUONTriggerTrack* triggerTrack = ...; AliESDMuonTrack esdTrack; AliMUONESDInterface::MUONToESD(*locTrg, esdTrack, trackId, triggerTrack);
... AliESDMuonTrack* esdTrack = esd->GetMuonTrack(iTrack); AliMUONTrack track; AliMUONESDInterface::ESDToMUON(*esdTrack, track, refit);
... AliESDMuonTrack* esdTrack = esd->GetMuonTrack(iTrack); AliMUONVTrackStore *trackStore = AliMUONESDInteface::NewTrackStore(); AliMUONTrack* trackInStore = AliMUONESDInterface::Add(*esdTrack, *trackStore, refit);
2) Loading an entire ESDEvent and using the finders and/or the iterators to access the corresponding MUON objects:
AliMUONESDInterface esdInterface; esdInterface.LoadEvent(*esd);
AliMUONVTrackStore* trackStore = esdInterface.GetTracks();
Int_t nDigits = esdInterface.GetNDigitsInCluster(clusterId);
AliMUONVDigit *digit = esdInterface.FindDigit(digitId);
AliMUONVCluster* cluster = esdInterface.FindCluster(trackId, clusterId);
TIterator* nextCluster = esdInterface.CreateClusterIterator(trackId); while ((cluster = static_cast<AliMUONVCluster*>(nextCluster()))) {...}
Note: You can change (via static method) the type of the store this class is using:
AliMUONESDInterface::UseTrackStore("name"); AliMUONESDInterface::UseClusterStore("name"); AliMUONESDInterface::UseDigitStore("name"); AliMUONESDInterface::UseTriggerStore("name");
We can re-clusterize and re-track the clusters/tracks stored into the ESD by using the class AliMUONRefitter. This class gets the MUON objects to be refitted from an instance of AliMUONESDInterface (see section Conversion between MUON/ESD objects), then uses the reconstruction framework to refit them. The new reconstruction parameters are still set via the class AliMUONRecoParam (see section How to tune the muon reconstruction) and passed to refitter through its constructor. The old reconstruction parameters, the mapping, the magnetic field and/or the geometry may also be needed to convert the ESD objects to MUON ones and/or to refit them. The initial data are not changed. Results are stored into new MUON objects. The aim of the refitting is to be able to study effects of changing the reconstruction parameter, the calibration parameters or the alignment without re-running the entire reconstruction.
To use this class we first have to connect it to the ESD interface containing MUON objects:
AliMUONRefitter refitter; refitter.Connect(&esdInterface);
We can then:
AliMUONVClusterStore* clusterStore = refitter.ReClusterize(iTrack, iCluster); AliMUONVClusterStore* clusterStore = refitter.ReClusterize(clusterId);
AliMUONTrack* track = refitter.RetrackFromClusters(iTrack); AliMUONVTrackStore* trackStore = refitter.ReconstructFromClusters();
AliMUONTrack* track = refitter.RetrackFromDigits(iTrack); AliMUONVTrackStore* trackStore = refitter.ReconstructFromDigits();
The macro MUONRefit.C is an example of using this class. The results are stored in a new AliESDs.root file.
This chapter is defined in the READMErec.txt file.