class AliESDVertex;
class AliMultiplicity;
class AliRefArray;
+class AliITSRecPoint;
class AliITSMultReconstructor : public AliTrackleter
{
void Reconstruct(AliESDEvent* esd, TTree* treeRP);
void Reconstruct(TTree* tree, Float_t* vtx, Float_t* vtxRes=0); // old reconstructor invocation
- void ReconstructMix(TTree* clusterTree, TTree* clusterTreeMix, Float_t* vtx, Float_t* vtrRes=0);
+ void ReconstructMix(TTree* clusterTree, TTree* clusterTreeMix, const Float_t* vtx, Float_t* vtrRes=0);
void FindTracklets(const Float_t* vtx);
void LoadClusterFiredChips(TTree* tree);
void FlagClustersInOverlapRegions(Int_t ic1,Int_t ic2);
Int_t GetNClustersLayer(Int_t i) const {return fNClustersLay[i];}
Int_t GetNTracklets() const {return fNTracklets;}
Int_t GetNSingleClusters() const {return fNSingleCluster;}
+ Int_t GetNSingleClustersLr(int lr) const {return lr==0 ? fNSingleCluster-fNSingleClusterSPD2:(GetStoreSPD2SingleCl() ? fNSingleClusterSPD2 : -1) ;}
Short_t GetNFiredChips(Int_t layer) const {return fNFiredChips[layer];}
- Float_t* GetClusterLayer1(Int_t n) {return &fClustersLay[0][n*kClNPar];}
- Float_t* GetClusterLayer2(Int_t n) {return &fClustersLay[1][n*kClNPar];}
- Float_t* GetClusterOfLayer(Int_t lr,Int_t n) {return &fClustersLay[lr][n*kClNPar];}
+ Float_t* GetClusterLayer1(Int_t n) const {return &fClustersLay[0][n*kClNPar];}
+ Float_t* GetClusterLayer2(Int_t n) const {return &fClustersLay[1][n*kClNPar];}
+ Float_t* GetClusterOfLayer(Int_t lr,Int_t n) const {return &fClustersLay[lr][n*kClNPar];}
+ Int_t GetClusterCopyIndex(Int_t lr,Int_t n) const {return fClusterCopyIndex[lr] ? fClusterCopyIndex[lr][n] : -1;}
+ AliITSRecPoint* GetRecPoint(Int_t lr, Int_t n) const;
- Float_t* GetTracklet(Int_t n) {return fTracklets[n];}
- Float_t* GetCluster(Int_t n) {return fSClusters[n];}
+ Float_t* GetTracklet(Int_t n) const {return fTracklets[n];}
+ Float_t* GetCluster(Int_t n) const {return fSClusters[n];}
void SetScaleDThetaBySin2T(Bool_t v=kTRUE) {fScaleDTBySin2T = v;}
Bool_t GetScaleDThetaBySin2T() const {return fScaleDTBySin2T;}
//
void SetHistOn(Bool_t b=kFALSE) {fHistOn=b;}
void SaveHists();
-
+ //
+ void SetBuildRefs(Bool_t v=kTRUE) {fBuildRefs = v;}
+ Bool_t GetBuildRefs() const {return fBuildRefs;}
+ //
+ void SetStoreSPD2SingleCl(Bool_t v) {fStoreSPD2SingleCl = v;}
+ Bool_t GetStoreSPD2SingleCl() const {return fStoreSPD2SingleCl;}
+ //
AliITSDetTypeRec *GetDetTypeRec() const {return fDetTypeRec;}
void SetDetTypeRec(AliITSDetTypeRec *ptr){fDetTypeRec = ptr;}
//
//
void InitAux();
void ClusterPos2Angles(const Float_t *vtx);
- void ClusterPos2Angles(Float_t *clPar, const Float_t *vtx);
+ void ClusterPos2Angles(Float_t *clPar, const Float_t *vtx) const;
Int_t AssociateClusterOfL1(Int_t iC1);
Int_t StoreTrackletForL2Cluster(Int_t iC2);
void StoreL1Singles();
//
Float_t* fClustersLay[2]; //! clusters in the SPD layers of ITS
Int_t* fDetectorIndexClustersLay[2]; //! module index for clusters in ITS layers
+ Int_t* fClusterCopyIndex[2]; //! when clusters copy is requested, store here the reference on the index
Bool_t* fOverlapFlagClustersLay[2]; //! flag for clusters in the overlap regions in ITS layers
Float_t** fTracklets; //! tracklets
Int_t fNClustersLay[2]; // Number of clusters on each layer
Int_t fNTracklets; // Number of tracklets
Int_t fNSingleCluster; // Number of unassociated clusters
+ Int_t fNSingleClusterSPD2; // Number of unassociated clusters on 2nd lr
Short_t fNFiredChips[2]; // Number of fired chips in the two SPD layers
//
// Following members are set via AliITSRecoParam
Bool_t fCreateClustersCopy; // read and clone clusters directly from the tree
Bool_t fClustersLoaded; // flag of clusters loaded
Bool_t fRecoDone; // flag that reconstruction is done
+ Bool_t fBuildRefs; // build cluster to tracks references
+ Bool_t fStoreSPD2SingleCl; // do we store SPD2 singles
//
AliITSsegmentationSPD fSPDSeg; // SPD segmentation model
//
void LoadClusterArrays(TTree* tree, TTree* treeMix=0);
void LoadClusterArrays(TTree* tree,int il);
- ClassDef(AliITSMultReconstructor,10)
+ ClassDef(AliITSMultReconstructor,11)
};
//____________________________________________________________________
-inline void AliITSMultReconstructor::ClusterPos2Angles(Float_t *clPar, const Float_t *vtx)
+inline void AliITSMultReconstructor::ClusterPos2Angles(Float_t *clPar, const Float_t *vtx) const
{
// convert cluster coordinates to angles wrt vertex
Float_t x = clPar[kClTh] - vtx[0];