Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:25:58

0001 #ifndef CSCRecHitD_CSCRecHitDBuilder_h
0002 #define CSCRecHitD_CSCRecHitDBuilder_h
0003 
0004 /** \class CSCRecHitDBuilder 
0005  *
0006  * Algorithm to build 2-D RecHit from wire and strip digis
0007  * in endcap muon CSCs by implementing a 'build' function 
0008  * required by CSCRecHitDProducer.
0009  *
0010  * The builder goes through many stages before building 2-D hits:
0011  * 1) It finds wire clusters and form wire hits which it stores in CSCWireHit.
0012  * 2) From these wire hits, it builds pseudo-wire segments to clean up
0013  *    the wire hit collection from noisy hits.  Only the hits falling on
0014  *    the segment or far away from existing segments are retained.
0015  * 1) It then finds strip cluster and hits which it stores in CSCStripHit.
0016  * 2) Similary to the wire hits, segments are build using the strip hits.
0017  *    Because of the trapezoidal geometry of the strips, all strip hits falling
0018  *    close to the pseudo-strip segments are retained.
0019  *
0020  * \author Stoyan Stoynev - NU
0021  *
0022  */
0023 
0024 #include <DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h>
0025 #include <DataFormats/CSCDigi/interface/CSCStripDigiCollection.h>
0026 #include <DataFormats/CSCDigi/interface/CSCWireDigiCollection.h>
0027 
0028 #include <FWCore/ParameterSet/interface/ParameterSet.h>
0029 
0030 class CSCLayer;
0031 class CSCGeometry;
0032 class CSCDetId;
0033 class CSCHitFromStripOnly;
0034 class CSCHitFromWireOnly;
0035 class CSCMake2DRecHit;
0036 class CSCRecoConditions;
0037 
0038 class CSCRecHitDBuilder {
0039 public:
0040   /** Configure the algorithm via ctor.
0041    * Receives ParameterSet percolated down from EDProducer
0042    * which owns this Builder.
0043    */
0044   explicit CSCRecHitDBuilder(const edm::ParameterSet& ps);
0045 
0046   ~CSCRecHitDBuilder();
0047 
0048   /** Find digis in each CSCLayer, build strip and wire proto-hits in 
0049    *  each layer from which pseudo-segments are build to select hits.
0050    *  Then, strip/wire hits are combined to form 2-D hits, whereas
0051    *  remaining "good" strip and wire only hits are also stored  
0052    *  into output collection.
0053    *
0054    */
0055 
0056   void build(const CSCStripDigiCollection* stripds, const CSCWireDigiCollection* wireds, CSCRecHit2DCollection& oc);
0057 
0058   /**
0059    * Cache pointer to geometry so it can be passed downstream
0060    */
0061   void setGeometry(const CSCGeometry* geom) { geom_ = geom; }
0062 
0063   /**
0064    * Pass conditions downstream
0065    */
0066   void setConditions(CSCRecoConditions* reco);
0067 
0068   const CSCLayer* getLayer(const CSCDetId& detId);
0069 
0070 private:
0071   bool useCalib;
0072   int stripWireDeltaT;
0073   bool makePseudo2DHits;
0074 
0075   /**
0076    *  The Program first constructs proto wire/strip hits which
0077    *  it stores in a special collection.  Proto strip/wire segments
0078    *  are then build from these hits and allow to clean up up the list of hits.
0079    */
0080   CSCHitFromStripOnly* hitsFromStripOnly_;
0081   CSCHitFromWireOnly* hitsFromWireOnly_;
0082 
0083   CSCMake2DRecHit* make2DHits_;
0084 
0085   /*
0086    * Cache geometry for current event
0087    */
0088   const CSCGeometry* geom_;
0089   /* 
0090    * Cache conditions data for current event - cannot be const because we need to update bad channels words
0091    */
0092   CSCRecoConditions* recoConditions_;
0093 };
0094 
0095 #endif