Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

DataFT.h

Go to the documentation of this file.
00001 #ifndef DataFT_H
00002 #define DataFT_H
00003 /*************************************************************************
00004                           DataFT.h  -  description
00005   Class encapsulates the track measurement - coordinates measured in each
00006   plane; used by the least squares track fitter.
00007                              -------------------
00008     begin                : Thu Jun 26 2003
00009     author               : Sergei Avvakumov
00010     email                : avva@dunk
00011  *****************************************************************************/
00012 
00013 #include <vector>
00014 #include <map>
00015 #include <algorithm>
00016 
00017 #include "TVectorD.h"
00018 #include "TMatrixD.h"
00019 
00020 #include "Algorithm/AlgConfig.h"
00021 #include "RecoBase/CandStripHandle.h"
00022 #include "Swimmer/SwimSwimmer.h"
00023 
00024 #include "GeometryHelper.h"
00025 #include "ConstFT.h"
00026 #include "PlaneData.h"
00027 #include "TrackContext.h"
00028 
00029 //class CandStripHandle;
00030 
00031 class DataFT {
00032 
00033 public:
00034 
00035     typedef Int_t                       Count_t;
00036     typedef UShort_t                    Mask_t;
00037     typedef std::vector<Mask_t>         ViewMask_t;
00038 
00039 private:
00040 
00041     typedef std::vector<PlaneData>      PlaneDataVec_t;
00042 
00043     typedef PlaneDataVec_t::iterator                PlaneDataItr;
00044     typedef PlaneDataVec_t::const_iterator          PlaneDataCItr;
00045     typedef PlaneDataVec_t::const_reverse_iterator  PlaneDataCRItr;
00046 
00047     typedef PlaneData::Data_t (DataFT::*FGETTER)(Int_t) const;
00048     typedef void  (DataFT::*FSETTER)(Int_t, PlaneData::Data_t);
00049     typedef bool  (DataFT::*BGETTER)(Int_t) const;
00050 
00051     typedef const CandStripHandle CSH;
00052     typedef CSH* CSHPtr;
00053     typedef std::vector<CSHPtr>::iterator CSHItr;
00054 
00055     typedef std::multimap<Int_t, Reco::Strip_t> StripMap;
00056     typedef StripMap::iterator StripMapItr;
00057 
00058 
00059 public:
00060    //DataFT();
00061    DataFT(const AlgConfig& ac, const TrackContext& tc);
00062    
00063    ~DataFT();
00064 
00065    Bool_t       Init(const TrackContext& );
00066    Bool_t       Fill(const TrackContext& );
00067 
00068 
00069    PlaneData& at(PlaneDataVec_t::size_type index) {
00070 #ifdef DEBUG
00071         return fPlanes.at(index);
00072 #else
00073         return fPlanes[index];
00074 #endif
00075     };
00076 
00077    const PlaneData& at(PlaneDataVec_t::size_type index) const {
00078 #ifdef DEBUG
00079         return fPlanes.at(index);
00080 #else
00081         return fPlanes[index];
00082 #endif
00083     };
00084 
00085    // accessors
00086    Count_t        GetNPlanes() const { return fPlanes.size();};
00087    Count_t        GetNUPlanes() const ;
00088    Count_t        GetNVPlanes() const ;
00089    Count_t        GetNPlanesUsed() const { return fNPlanesUsed;};
00090    Count_t        GetNPlanesMin(Count_t nhitsperview) const ;
00091 
00092    PlaneData::Data_t      GetU(Count_t i) const {return at(i).u;};
00093    PlaneData::Data_t      GetSigmaU(Count_t i) const {return at(i).eu;};
00094    PlaneData::Data_t      GetV(Count_t i) const {return at(i).v;};
00095    PlaneData::Data_t      GetSigmaV(Count_t i) const {return at(i).ev;};
00096 
00097    PlaneData::Data_t      GetUMean() const;
00098    PlaneData::Data_t      GetVMean() const;
00099 
00100    Bool_t       IsHitU(Count_t i) const { return at(i).uhit; };
00101    Bool_t       IsHitV(Count_t i) const { return at(i).vhit; };
00102 //    Bool_t       UHitUse(Count_t i) const { return at(i).uhituse; };
00103 //    Bool_t       VHitUse(Count_t i) const { return at(i).vhituse; };
00104 
00105 //    Bool_t       IsHitU(Count_t i) const { return fUHit[i]; };
00106 //    Bool_t       IsHitV(Count_t i) const { return fVHit[i]; };
00107 
00108    Bool_t       UHitUse(Count_t i) const { return fUHitUse[i]; };
00109    Bool_t       VHitUse(Count_t i) const { return fVHitUse[i]; };
00110 
00111    const ViewMask_t& GetUHitUse() const { return fUHitUse; };
00112    const ViewMask_t& GetVHitUse() const { return fVHitUse; };
00113    
00114    void SetUHitUse(const ViewMask_t&  usehitu) {fUHitUse = usehitu;};
00115    void SetVHitUse(const ViewMask_t&  usehitv) {fVHitUse = usehitv;};
00116    
00117    Int_t        GetZdir() const { return fDir; };
00118    
00119    PlaneData::Data_t      GetZVtx() const { return fZVtx; };
00120    PlaneData::Data_t      GetZ(Count_t i) const { return at(i).z;};
00121    PlaneData::Data_t      GetdZSteel(Count_t i) const { return at(i).dz;};
00122    PlaneData::Data_t      GetX0(Count_t i) const { return at(i).x0;};
00123 
00124    Count_t        GetNUHits() const ;
00125    Count_t        GetNVHits() const ;
00126    Count_t        GetNHits() const ;
00127    Count_t        GetNUHitsUsed() const ;
00128    Count_t        GetNVHitsUsed() const ;
00129    Count_t        GetNHitsUsed()  const ;
00130 
00131    PlexPlaneId  GetBegPlaneId() const { return fPlanes.begin()->plane; };
00132    PlexPlaneId  GetEndPlaneId() const { return fPlanes.rbegin()->plane; };
00133    PlexPlaneId  GetPlaneId(Count_t i) const { return at(i).plane;};
00134    Count_t        GetPlane(Count_t i) const { return at(i).plane.GetPlane();};
00135    
00136    Count_t        GetBegHit() const ;
00137    Count_t        GetEndHit() const ;
00138    Count_t        GetBegHitUsed() const ;
00139    Count_t        GetEndHitUsed() const ;
00140 
00141    // setters
00142    void         SetNPlanesUsed(Count_t n);
00143 
00144    void         SetU(Count_t i, PlaneData::Data_t u) { at(i).u = u; };
00145    void         SetSigmaU(Count_t i, PlaneData::Data_t eu) { at(i).eu = eu; };
00146    void         SetV(Count_t i, PlaneData::Data_t v) { at(i).v = v; };
00147    void         SetSigmaV(Count_t i, PlaneData::Data_t ev) { at(i).ev = ev; };
00148 
00149    void         SetUHit(Count_t i) { at(i).uhit = 1; };
00150    void         SetVHit(Count_t i) { at(i).vhit = 1; };
00151    void         UnsetUHit(Count_t i) { at(i).uhit = 0; };
00152    void         UnsetVHit(Count_t i) { at(i).vhit = 0; };
00153 //    void         SetUHitUse(Count_t i) { at(i).uhituse = 1; };
00154 //    void         SetVHitUse(Count_t i) { at(i).vhituse = 1; };
00155 //    void         UnsetUHitUse(Count_t i) { at(i).uhituse = 0; };
00156 //    void         UnsetVHitUse(Count_t i) { at(i).vhituse = 0; };
00157 
00158 //    void         SetUHit(Count_t i) { fUHit[i] = kTRUE; };
00159 //    void         SetVHit(Count_t i) { fVHit[i] = kTRUE; };
00160 //    void         UnsetUHit(Count_t i) { fUHit[i] = kFALSE; };
00161 //    void         UnsetVHit(Count_t i) { fVHit[i] = kFALSE; };
00162    void         SetUHitUse(Count_t i) { fUHitUse[i] = kTRUE; };
00163    void         SetVHitUse(Count_t i) { fVHitUse[i] = kTRUE; };
00164    void         UnsetUHitUse(Count_t i) { fUHitUse[i] = kFALSE; };
00165    void         UnsetVHitUse(Count_t i) { fVHitUse[i] = kFALSE; };
00166    
00167    
00168    void         SetZ(Count_t i, PlaneData::Data_t z) { at(i).z = z; };
00169    void         SetdZSteel(Count_t i, PlaneData::Data_t dz) { at(i).dz = dz; };
00170    void         SetX0(Count_t i, PlaneData::Data_t x0) { at(i).x0 = x0; };
00171    void         SetPlane(Count_t i, PlexPlaneId plane) { at(i).plane = plane; };
00172 
00173 
00174    // from trackFT
00175    PlaneData::Data_t      GetUf(Count_t i) const { return at(i).uf; };
00176    PlaneData::Data_t      GetDudz(Count_t i) const { return at(i).dudz; };
00177    PlaneData::Data_t      GetVf(Count_t i) const { return at(i).vf; };
00178    PlaneData::Data_t      GetDvdz(Count_t i) const { return at(i).dvdz; };
00179 
00180    PlaneData::Data_t      GetUlin(Count_t i) const {return at(i).ulin;};
00181    PlaneData::Data_t      GetVlin(Count_t i) const {return at(i).vlin;};
00182    PlaneData::Data_t      GetDudzlin(Count_t i) const {return at(i).dudzlin;};
00183    PlaneData::Data_t      GetDvdzlin(Count_t i) const {return at(i).dvdzlin;};
00184 
00185    PlaneData::Data_t      GetInvP(Count_t i) const { return at(i).invp; };
00186    PlaneData::Data_t      GetP(Count_t i) const { return 1./GetInvP(i); };
00187    PlaneData::Data_t      GetS(Count_t i) const { return at(i).s; };
00188    PlaneData::Data_t      GetR(Count_t i) const { return at(i).r; };
00189    PlaneData::Data_t      GetCos(Count_t i) const { return at(i).cos;};
00190 
00191    Int_t        GetEMCharge() const;
00192    
00193    TVectorD     GetTrack() const { return fInitialTrack; };
00194 
00195    void         SetUf(Count_t i, PlaneData::Data_t uf) { at(i).uf = uf; };
00196    void         SetDudz(Count_t i, PlaneData::Data_t dudz) { at(i).dudz = dudz; };
00197    void         SetVf(Count_t i, PlaneData::Data_t vf) { at(i).vf = vf; };
00198    void         SetDvdz(Count_t i, PlaneData::Data_t dvdz) { at(i).dvdz = dvdz; };
00199    void         SetInvP(Count_t i, PlaneData::Data_t invp) { at(i).invp = invp; };
00200    void         SetS(Count_t i, PlaneData::Data_t s) { at(i).s = s; };
00201    void         SetR(Count_t i, PlaneData::Data_t r) { at(i).r = r; };
00202    void         SetCos(Count_t i, PlaneData::Data_t cos) { at(i).cos = cos;};
00203 
00204    void         SetUlin(Count_t i, PlaneData::Data_t ulin) { at(i).ulin = ulin; };
00205    void         SetVlin(Count_t i, PlaneData::Data_t vlin) { at(i).vlin = vlin; };
00206    void         SetDudzlin(Count_t i, PlaneData::Data_t dudzlin) 
00207                                              { at(i).dudzlin = dudzlin; };
00208    void         SetDvdzlin(Count_t i, PlaneData::Data_t dvdzlin) 
00209                                              { at(i).dvdzlin = dvdzlin; };
00210 
00211    void         SetInitial(const TVectorD& inittrack);
00212    
00213    Count_t        SetInitial(const TVectorD& inittrack, Count_t nplanesuse,
00214                                                     SwimSwimmer& swimmer);
00215 
00216    // methods
00217 //    Bool_t       LinearFitEstimate(Count_t initp, TVectorD& inittrack) const;
00218 
00219    void         FillVectorC(TMatrixD& vC) const;
00220 
00221 //    Bool_t       Filter(Count_t nHitsSegment, Count_t nPolynomParams,
00222 //                                                         PlaneData::Data_t chi2cut);
00223 
00224    Bool_t       FillUArrays(Double_t zu[], Double_t u[], Int_t n);
00225    
00226    Bool_t       FillVArrays(Double_t zv[], Double_t v[], Int_t n);
00227    
00228    Bool_t       FillLinWithSpline();
00229 
00230 //    Bool_t       FillLin(Count_t nHitsSegment, Count_t nPolynomParams);
00231 
00232    void         PrintData() const ;
00233 
00234    // methods from trackFT
00235    void         FillVectorCF(TMatrixD& vC) const;
00236    void         FillVectorRes(TMatrixD& vRes, PlaneData::Data_t cdata=1.,
00237                                                 PlaneData::Data_t ctrack=-1.) const;
00238 
00239    Count_t        GetNPlanesPCut(PlaneData::Data_t pcut) const ;
00240 
00241    Count_t        SwimAsSwimmer(SwimSwimmer& swimmer);
00242    Count_t        SwimAsSwimmer(Count_t nplanes, SwimSwimmer& swimmer);
00243 
00244 //    Count_t        SwimAsData(SwimSwimmer& swimmer);
00245 //    Count_t        SwimAsData(Count_t nplanes, SwimSwimmer& swimmer);
00246 
00247    PlaneData::Data_t       ThetaMCS(Count_t i) const ;
00248    PlaneData::Data_t       T(Count_t i, Count_t n) const ;
00249 
00250    void         DumpTrack() const ;
00251    void         PrintMomenta() const;
00252    
00253    void         Reset();
00254 
00258     void        Config(const AlgConfig& );
00259     
00260     void        SetHitCoords(Count_t planeIndex, PlaneData::Data_t tpos, PlaneData::Data_t error);
00261     
00262     void        OneStripPlane(Count_t i, StripMapItr it, 
00263                                             const CandTrackHandle* cth);
00264     void        TwoStripPlane(Count_t i, StripMapItr lower, 
00265                             StripMapItr upper, const CandTrackHandle* cth);
00266 
00267 private:
00268 
00269 //    Count_t        FilterStep(Count_t nHitsSegment, Count_t nPolynomParams, 
00270 //                         PlaneData::Data_t filterChi2Cut,
00271 //                         FGETTER pfC, FGETTER pfSigmaC, BGETTER pfHit);
00272 //                         
00273 //    void         SetSegment(Count_t i, Count_t nHitsSegment, 
00274 //                         std::map<Count_t, Count_t>& segment, BGETTER pfHit) const ;
00275 //    
00276 //    Count_t        PolynomialFit(Count_t n, Count_t zdir,
00277 //                            FGETTER pfZ, FGETTER pfC, BGETTER pfChit, 
00278 //                            Count_t npar, PlaneData::Data_t* a) const ;
00279 //                            
00280 //    void         SetSegmentLin(Count_t i, Count_t nHitsSegment, 
00281 //                            std::map<Count_t, Count_t>& segment, BGETTER pfHit) const ;
00282 //    
00283 //    Bool_t       FillLinView(Count_t nHitsSegment, Count_t nPolynomParams,
00284 //                            FGETTER pfC, BGETTER pfHit, 
00285 //                            FSETTER pfCset, FSETTER pfdCdZset);
00286 
00287 
00291    Short_t      fNPlanesUsed;              
00292    
00296    Short_t      fDir;
00297                          
00301    TVectorD     fInitialTrack;             
00302 
00306    PlaneData::Data_t      fZVtx;
00307    
00311    PlaneDataVec_t fPlanes;
00312     
00316    ViewMask_t  fUHitUse;
00317     
00321    ViewMask_t  fVHitUse;
00322     
00326    GeometryHelper fGeo;
00327 
00328    // configurable parameters
00329 
00333    PlaneData::Data_t fMinStripCharge;
00334    
00339    Bool_t fSetLPos;
00340    
00344    Int_t  fNHitsInViewMin;
00345 
00346    bool  fUseGeoSwimmer;
00347 
00348 };
00349 
00353 struct ByPlane :  public std::binary_function<const CandStripHandle*,
00354                                                 const CandStripHandle*, Bool_t>
00355 {
00356     Bool_t operator()(const CandStripHandle* a, const CandStripHandle* b) {
00357         return (a->GetPlane() < b->GetPlane());
00358     }
00359 };
00360 
00361 #endif

Generated on Mon Feb 15 11:06:33 2010 for loon by  doxygen 1.3.9.1