CSCHaloData

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
#ifndef DATAFORMATS_METRECO_CSCHALODATA_H
#define DATAFORMATS_METRECO_CSCHALODATA_H
#include "TMath.h"
#include <vector>

#include "DataFormats/TrackReco/interface/TrackFwd.h"
#include "DataFormats/TrackReco/interface/Track.h"
#include "DataFormats/GeometryVector/interface/GlobalPoint.h"

#include "DataFormats/METReco/interface/HaloData.h"

#include "DataFormats/Common/interface/RefVector.h"
#include <vector>

/*
  [class]:  CSCHaloData
  [authors]: R. Remington, The University of Florida
  [description]: Container class to store beam halo data specific to the CSC subdetector
  [date]: October 15, 2009
*/

namespace reco {

  class CSCHaloData {
  public:
    // Default constructor
    CSCHaloData();

    virtual ~CSCHaloData() {}

    // Number of HaloTriggers in +/- endcap
    int NumberOfHaloTriggers(HaloData::Endcap z = HaloData::both) const;
    int NumberOfHaloTriggers_TrkMuUnVeto(HaloData::Endcap z = HaloData::both) const;
    int NHaloTriggers(HaloData::Endcap z = HaloData::both) const { return NumberOfHaloTriggers(z); }

    // Number of Halo Tracks in +/-  endcap
    int NumberOfHaloTracks(HaloData::Endcap z = HaloData::both) const;
    int NHaloTracks(HaloData::Endcap z = HaloData::both) const { return NumberOfHaloTracks(z); }

    // Halo trigger bit from the HLT
    bool CSCHaloHLTAccept() const { return HLTAccept; }

    // Number of chamber-level triggers with non-collision timing
    short int NumberOfOutOfTimeTriggers(HaloData::Endcap z = HaloData::both) const;
    short int NOutOfTimeTriggers(HaloData::Endcap z = HaloData::both) const { return NumberOfOutOfTimeTriggers(z); }
    // Number of CSCRecHits with non-collision timing
    short int NumberOfOutTimeHits() const { return nOutOfTimeHits; }
    short int NOutOfTimeHits() const { return nOutOfTimeHits; }
    // Look at number of muons with timing consistent with incoming particles
    short int NTracksSmalldT() const { return nTracks_Small_dT; }
    short int NTracksSmallBeta() const { return nTracks_Small_beta; }
    short int NTracksSmallBetaAndSmalldT() const { return nTracks_Small_dT_Small_beta; }

    // MLR
    short int NFlatHaloSegments() const { return nFlatHaloSegments; }
    bool GetSegmentsInBothEndcaps() const { return segments_in_both_endcaps; }
    bool GetSegmentIsCaloMatched() const { return segmentiscalomatched; }
    bool GetSegmentIsHCaloMatched() const { return segmentisHcalomatched; }
    bool GetSegmentIsEBCaloMatched() const { return segmentisEBcalomatched; }
    bool GetSegmentIsEECaloMatched() const { return segmentisEEcalomatched; }
    // End MLR
    short int NFlatHaloSegments_TrkMuUnVeto() const { return nFlatHaloSegments_TrkMuUnVeto; }
    bool GetSegmentsInBothEndcaps_Loose_TrkMuUnVeto() const { return segments_in_both_endcaps_loose_TrkMuUnVeto; }
    bool GetSegmentsInBothEndcaps_Loose_dTcut_TrkMuUnVeto() const {
      return segments_in_both_endcaps_loose_dtcut_TrkMuUnVeto;
    }

    // Get Reference to the Tracks
    edm::RefVector<reco::TrackCollection>& GetTracks() { return TheTrackRefs; }
    const edm::RefVector<reco::TrackCollection>& GetTracks() const { return TheTrackRefs; }

    // Set Number of Halo Triggers
    void SetNumberOfHaloTriggers(int PlusZ, int MinusZ) {
      nTriggers_PlusZ = PlusZ;
      nTriggers_MinusZ = MinusZ;
    }
    void SetNumberOfHaloTriggers_TrkMuUnVeto(int PlusZ, int MinusZ) {
      nTriggers_PlusZ_TrkMuUnVeto = PlusZ;
      nTriggers_MinusZ_TrkMuUnVeto = MinusZ;
    }
    // Set number of chamber-level triggers with non-collision timing
    void SetNOutOfTimeTriggers(short int PlusZ, short int MinusZ) {
      nOutOfTimeTriggers_PlusZ = PlusZ;
      nOutOfTimeTriggers_MinusZ = MinusZ;
    }
    // Set number of CSCRecHits with non-collision timing
    void SetNOutOfTimeHits(short int num) { nOutOfTimeHits = num; }
    // Set number of tracks with timing consistent with incoming particles
    void SetNIncomingTracks(short int n_small_dT, short int n_small_beta, short int n_small_both) {
      nTracks_Small_dT = n_small_dT;
      nTracks_Small_beta = n_small_beta;
      nTracks_Small_dT_Small_beta = n_small_both;
    }

    // Set HLT Bit
    void SetHLTBit(bool status) { HLTAccept = status; }

    // Get GlobalPoints of CSC tracking rechits nearest to the calorimeters
    //std::vector<const GlobalPoint>& GetCSCTrackImpactPositions() const {return TheGlobalPositions;}
    const std::vector<GlobalPoint>& GetCSCTrackImpactPositions() const { return TheGlobalPositions; }
    std::vector<GlobalPoint>& GetCSCTrackImpactPositions() { return TheGlobalPositions; }

    // MLR
    // Set # of CSCSegments that appear to be part of a halo muon
    // If there is more than 1 muon, this is the number of segments in the halo muon
    // with the largest number of segments that pass the cut.
    void SetNFlatHaloSegments(short int nSegments) { nFlatHaloSegments = nSegments; }
    void SetSegmentsBothEndcaps(bool b) { segments_in_both_endcaps = b; }
    // End MLR
    void SetNFlatHaloSegments_TrkMuUnVeto(short int nSegments) { nFlatHaloSegments_TrkMuUnVeto = nSegments; }
    void SetSegmentsBothEndcaps_Loose_TrkMuUnVeto(bool b) { segments_in_both_endcaps_loose_TrkMuUnVeto = b; }
    void SetSegmentsBothEndcaps_Loose_dTcut_TrkMuUnVeto(bool b) {
      segments_in_both_endcaps_loose_dtcut_TrkMuUnVeto = b;
    }
    void SetSegmentIsCaloMatched(bool b) { segmentiscalomatched = b; }
    void SetSegmentIsHCaloMatched(bool b) { segmentisHcalomatched = b; }
    void SetSegmentIsEBCaloMatched(bool b) { segmentisEBcalomatched = b; }
    void SetSegmentIsEECaloMatched(bool b) { segmentisEEcalomatched = b; }

  private:
    edm::RefVector<reco::TrackCollection> TheTrackRefs;

    // The GlobalPoints from constituent rechits nearest to the calorimeter of CSC tracks
    std::vector<GlobalPoint> TheGlobalPositions;
    int nTriggers_PlusZ;
    int nTriggers_MinusZ;
    int nTriggers_PlusZ_TrkMuUnVeto;
    int nTriggers_MinusZ_TrkMuUnVeto;
    // CSC halo trigger reported by the HLT
    bool HLTAccept;

    int nTracks_PlusZ;
    int nTracks_MinusZ;

    // number of  out-of-time chamber-level triggers (assumes the event triggered at the bx of the beam crossing)
    short int nOutOfTimeTriggers_PlusZ;
    short int nOutOfTimeTriggers_MinusZ;
    // number of out-of-time CSCRecHit2Ds (assumes the event triggered at the bx of the beam crossing)
    short int nOutOfTimeHits;
    // number of cosmic muon outer (CSC) tracks with (T_segment_outer - T_segment_inner) < max_dt_muon_segment
    short int nTracks_Small_dT;
    // number of cosmic muon outer (CSC) tracks with free inverse beta < max_free_inverse_beta
    short int nTracks_Small_beta;
    // number of cosmic muon outer (CSC) tracks with both
    // (T_segment_outer - T_segment_inner) <  max_dt_muon_segment and free inverse beta < max_free_inverse_beta
    short int nTracks_Small_dT_Small_beta;

    // MLR
    // number of CSCSegments that are flat and have the same (r,phi)
    short int nFlatHaloSegments;
    bool segments_in_both_endcaps;
    // end MLR
    short int nFlatHaloSegments_TrkMuUnVeto;
    bool segments_in_both_endcaps_loose_TrkMuUnVeto;
    bool segments_in_both_endcaps_loose_dtcut_TrkMuUnVeto;
    bool segmentiscalomatched;
    bool segmentisHcalomatched;
    bool segmentisEBcalomatched;
    bool segmentisEEcalomatched;
  };

}  // namespace reco

#endif