CMS 3D CMS Logo

Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes

CSCChamberSpecs Class Reference

#include <CSCChamberSpecs.h>

Inheritance diagram for CSCChamberSpecs:
GeomDetType

List of all members.

Public Types

typedef std::vector< float > CSCSpecsParcel

Public Member Functions

float anodeCathodeSpacing () const
float calibrationError () const
int chamberType () const
std::string chamberTypeName () const
float chargePerCount () const
float constantNoise () const
 CSCChamberSpecs (const CSCGeometry *geom, int iChamberType, const TrapezoidalPlaneBounds &mediaShape, const CSCSpecsParcel &fupar, const CSCWireGroupPackage &wg)
 Usual ctor from supplied params.
 CSCChamberSpecs ()
 Default ctor.
float ctiOffset () const
float e_pF () const
float efficiency () const
float electronAttraction () const
const CSCLayerGeometryevenLayerGeometry (int iendcap) const
float fractionQS () const
bool gangedStrips () const
float gasGain () const
float neutronRate () const
int nFloatingStrips () const
int nNodes () const
int nStrips () const
int nWiresPerGroup () const
const CSCLayerGeometryoddLayerGeometry (int iendcap) const
 Accessors for LayerGeometry's.
bool operator!= (const CSCChamberSpecs &specs) const
 Allow comparison of Specs objects.
bool operator== (const CSCChamberSpecs &specs) const
float shaperPeakingTime () const
float stripNoise (float timeInterval) const
float stripPhiPitch () const
float stripResolution () const
float timeWindow () const
virtual const Topologytopology () const
 Returns StripTopology of the odd-layer, positive-z geometry.
float voltage () const
float wireNoise (float timeInterval) const
float wireRadius () const
float wireResolution () const
float wireSpacing () const
 ~CSCChamberSpecs ()
 Destructor.

Static Public Member Functions

static int whatChamberType (int istation, int iring)

Private Member Functions

float specsValue (int index) const
 Accessor to chamber specs values.

Private Attributes

float centreToIntersectionOffset
bool gangedStrips_
CSCLayerGeometrynegzEvenLayerGeometry
CSCLayerGeometrynegzOddLayerGeometry
int nstrips
CSCLayerGeometryposzEvenLayerGeometry
CSCLayerGeometryposzOddLayerGeometry
float stripDeltaPhi
int theChamberType
CSCSpecsParcel theSpecsValues

Static Private Attributes

static const std::string myName = "CSCChamberSpecs"
static const std::string theName [10]

Detailed Description

Each endcap muon CSCChamberSpecs object is a set of parameters for one of several types of chamber.

Author:
Tim Cox

There are only a small finite number (9, or 10 incl. ME1A as separate) of distinct chamber types in the hardware, according to physical dimensions and properties. The individual types currently correspond to each (Station,Ring) pair.

RESPONSIBILITIES:
Supply chamber type-dependent parameters on demand. Geometrical size is not a responsibility of the Specs class.

COLLABORATORS:
A Chamber knows its associated Specs.

Warning:
Disclaimer: The mess of methods was supposed to be a temporary hack until it was decided how to handle such spec pars... but there's still nothing better.

Definition at line 39 of file CSCChamberSpecs.h.


Member Typedef Documentation

typedef std::vector<float> CSCChamberSpecs::CSCSpecsParcel

Definition at line 43 of file CSCChamberSpecs.h.


Constructor & Destructor Documentation

CSCChamberSpecs::CSCChamberSpecs ( )

Default ctor.

CSCChamberSpecs::CSCChamberSpecs ( const CSCGeometry geom,
int  iChamberType,
const TrapezoidalPlaneBounds mediaShape,
const CSCSpecsParcel fupar,
const CSCWireGroupPackage wg 
)

Usual ctor from supplied params.

Definition at line 10 of file CSCChamberSpecs.cc.

References CSCWireGroupPackage::alignmentPinToFirstWire, centreToIntersectionOffset, CSCGeometry::gangedStrips(), gangedStrips_, LogTrace, myName, negzEvenLayerGeometry, negzOddLayerGeometry, nstrips, poszEvenLayerGeometry, poszOddLayerGeometry, specsValue(), stripPhiPitch(), and theName.

  : GeomDetType( "CSC", CSC ), theChamberType( iChamberType ), theSpecsValues( fupar ),
    nstrips( static_cast<int>(specsValue(5)) ), stripDeltaPhi( specsValue(29) ), 
    centreToIntersectionOffset( specsValue(30) ), gangedStrips_( false )
  {
   LogTrace("CSCChamberSpecs|CSC") << myName << ": constructing specs for chamber " << 
    theName[iChamberType - 1] << ", type=" << iChamberType << ", this =" << this;
  
  // Reset gangedStrips_ for ME1A from config parameter
  if ( iChamberType == 1 ) gangedStrips_ = geom->gangedStrips(); 

  // Most wire info now comes from wire group section of DDD, but this doesn't...
  float wireAngleInDegrees = specsValue(12);
  
  // Related to strip geometry...
  float stripOffset1                       = specsValue(20);
  float stripOffset2                       = specsValue(21);
  float globalRadialPositionOfAlignmentPin = specsValue(24);
  float distanceFrameToAlignmentPin        = specsValue(25);
  float lengthOfChamber                    = specsValue(26);
  float distanceEndOfStripToAlignmentPin   = specsValue(27);
  float extentOfStripPlane                 = specsValue(28);

  // local y of alignment pin 
  float yAlignmentPin = -lengthOfChamber/2. + distanceFrameToAlignmentPin;

  // distance from alignment pin to symmetry centre of strip plane
  float alignmentPinToCentreOfStripPlane = distanceEndOfStripToAlignmentPin + extentOfStripPlane/2. ;

  // local y of symmetry centre of strip plane
  float yCentreOfStripPlane = yAlignmentPin  + alignmentPinToCentreOfStripPlane ;

  // distance from intersection of strips to symmetry centre of strip plane
  float whereStripsMeet = globalRadialPositionOfAlignmentPin + alignmentPinToCentreOfStripPlane ;

  // Possibly 'correct' distance to strip intersection
  //  if ( useCentreTIOffsets ) {
  //    float ctiOffset = this->ctiOffset();
  //    whereStripsMeet += ctiOffset; 
  //  }
  whereStripsMeet += centreToIntersectionOffset; // will have been reset to zero if not active

  // local y value of 1st wire in wire plane
  double yOfFirstWire = yAlignmentPin + wg.alignmentPinToFirstWire/10.; //@@ in cm

  // Build the unique LayerGeometry objects we require for each chamber type.
  // - There are 2 endcaps
  // - Alternate layers of strips are offset w.r.t. each other
  // - In ME11 the wire tilt angle needs to be a constant
  // global value; in the CMS local coordinates this is positive in +z
  // and negative in -z (magnitude 29 degrees as of 2002)

  // Thus we need 4 LGs differing in strip offset and wire angle

  float phiPitch = this->stripPhiPitch();

  // Layer thickness can come from specs too
  float hThickness = specsValue(32)/10./2.; // mm->cm, and then want half the thickness

  poszOddLayerGeometry = new CSCLayerGeometry( geom, iChamberType, bounds,
     nstrips, -stripOffset1, phiPitch, whereStripsMeet, extentOfStripPlane, yCentreOfStripPlane,
     wg, wireAngleInDegrees, yOfFirstWire, hThickness );

  poszEvenLayerGeometry = new CSCLayerGeometry( geom, iChamberType, bounds,
     nstrips, -stripOffset2, phiPitch, whereStripsMeet, extentOfStripPlane, yCentreOfStripPlane,
     wg, wireAngleInDegrees, yOfFirstWire, hThickness );

  negzOddLayerGeometry = new CSCLayerGeometry( geom, iChamberType, bounds,
     nstrips, -stripOffset1, phiPitch, whereStripsMeet, extentOfStripPlane, yCentreOfStripPlane,
     wg, -wireAngleInDegrees, yOfFirstWire, hThickness );

  negzEvenLayerGeometry = new CSCLayerGeometry( geom, iChamberType, bounds,
     nstrips, -stripOffset2, phiPitch, whereStripsMeet, extentOfStripPlane, yCentreOfStripPlane,
     wg, -wireAngleInDegrees, yOfFirstWire, hThickness );

}
CSCChamberSpecs::~CSCChamberSpecs ( )

Destructor.

Definition at line 92 of file CSCChamberSpecs.cc.

References LogTrace, myName, negzEvenLayerGeometry, negzOddLayerGeometry, poszEvenLayerGeometry, and poszOddLayerGeometry.

{
  LogTrace("CSCChamberSpecs|CSC") << myName << " destroying this=" << this;

  delete poszOddLayerGeometry;
  delete poszEvenLayerGeometry;
  delete negzOddLayerGeometry;
  delete negzEvenLayerGeometry;
}

Member Function Documentation

float CSCChamberSpecs::anodeCathodeSpacing ( ) const [inline]

distance from anode to cathode, in cm.

Definition at line 137 of file CSCChamberSpecs.h.

References specsValue().

Referenced by CSCDriftSim::getWireHit(), CSCXonStrip_MatchGatti::initChamberSpecs(), and CSCGattiFunction::initChamberSpecs().

{return specsValue(9);}
float CSCChamberSpecs::calibrationError ( ) const [inline]

Definition at line 143 of file CSCChamberSpecs.h.

References specsValue().

{return specsValue(13);}
int CSCChamberSpecs::chamberType ( ) const

The 'type' of the chamber associated with this ChamberSpecs.
The chamber type is a unique integer 1-10 for a station, ring pair MEs/r. The type value is defined as
1 for S = 1 and R=A=4 split strips in ME1/1
2,3,4 = R+1 for S = 1 and R = 1,2,3
5-10 = 2*S+R for S = 2,3,4 and R = 1,2
It is conventional usage in the Endcap Muon community/

Definition at line 121 of file CSCChamberSpecs.cc.

References theChamberType.

Referenced by CSCComparatorDigiValidation::analyze(), CSCWireDigiValidation::analyze(), CSCRecHit2DValidation::analyze(), chamberTypeName(), CSCStripElectronicsSim::createDigi(), CSCWireElectronicsSim::fillDigis(), GlobalRecHitsProducer::fillMuon(), GlobalRecHitsAnalyzer::fillMuon(), CSCStripElectronicsSim::initParameters(), and CSCBaseElectronicsSim::signalDelay().

                                       {
  return theChamberType;
}
std::string CSCChamberSpecs::chamberTypeName ( ) const

The (hardware) name for the chamber type associated with this ChamberSpecs.
It is a string "MEs/r" where integer s = station, r = ring.

Definition at line 125 of file CSCChamberSpecs.cc.

References chamberType(), and theName.

Referenced by CSCSegmentBuilder::build(), CSCSegAlgoTC::buildSegments(), CSCSegAlgoSK::buildSegments(), CSCSegAlgoST::chainHits(), CSCOfflineMonitor::doEfficiencies(), CSCValidation::doEfficiencies(), CSCXonStrip_MatchGatti::findXOnStrip(), and CSCSegAlgoST::run().

                                                 {
  return theName[chamberType() - 1];
}
float CSCChamberSpecs::chargePerCount ( ) const

ADC calibration, in fC.

Definition at line 164 of file CSCChamberSpecs.cc.

References theChamberType.

                                            {
  if(theChamberType <= 2) {
    return 0.25;
  } else {
    return 0.5;
  }
}
float CSCChamberSpecs::constantNoise ( ) const [inline]

the constant term in the electronics noise, in # of electrons.

Definition at line 170 of file CSCChamberSpecs.h.

References specsValue().

Referenced by stripNoise(), and wireNoise().

{return specsValue(22);}
float CSCChamberSpecs::ctiOffset ( ) const [inline]

offset to centreToIntersection, in cm (the backed-out corrections for positioning the strips)

Definition at line 127 of file CSCChamberSpecs.h.

References centreToIntersectionOffset.

float CSCChamberSpecs::e_pF ( ) const [inline]

the # of noise electrons per picofarad of capacitance.

Definition at line 175 of file CSCChamberSpecs.h.

References specsValue().

Referenced by stripNoise().

{return specsValue(23);}
float CSCChamberSpecs::efficiency ( ) const [inline]

Definition at line 98 of file CSCChamberSpecs.h.

References specsValue().

{return specsValue(2);}
float CSCChamberSpecs::electronAttraction ( ) const [inline]

Definition at line 145 of file CSCChamberSpecs.h.

References specsValue().

{return specsValue(14);}
const CSCLayerGeometry* CSCChamberSpecs::evenLayerGeometry ( int  iendcap) const [inline]

Definition at line 71 of file CSCChamberSpecs.h.

References negzEvenLayerGeometry, and poszEvenLayerGeometry.

Referenced by CSCGeometryBuilder::buildChamber().

   { return (iendcap==1? poszEvenLayerGeometry:negzEvenLayerGeometry);}
float CSCChamberSpecs::fractionQS ( ) const [inline]

the fraction of the charge that survives to reach the cathode.

Definition at line 150 of file CSCChamberSpecs.h.

References specsValue().

{return specsValue(15);}
bool CSCChamberSpecs::gangedStrips ( ) const [inline]

Are strips ganged?

Definition at line 197 of file CSCChamberSpecs.h.

References gangedStrips_.

Referenced by CSCSegAlgoST::chainHits(), CSCSegAlgoST::run(), and CSCHitFromStripOnly::runStrip().

{ return gangedStrips_; }
float CSCChamberSpecs::gasGain ( ) const

Definition at line 158 of file CSCChamberSpecs.cc.

                                     {
  // ME1/1 makes up for its small gap by a big electronics gain
  // so use one gas gain value for all chambers (=300000)
  return 3.0e05;
}
float CSCChamberSpecs::neutronRate ( ) const [inline]

neutron hit rate per CSC layer per event.

Definition at line 104 of file CSCChamberSpecs.h.

References specsValue().

{return specsValue(4);}
int CSCChamberSpecs::nFloatingStrips ( ) const [inline]

Definition at line 116 of file CSCChamberSpecs.h.

References specsValue().

{return int( specsValue(8) );}
int CSCChamberSpecs::nNodes ( ) const [inline]

number of strips 2*nnodes+1 around hit.

Definition at line 114 of file CSCChamberSpecs.h.

References specsValue().

Referenced by CSCStripHitSim::simulate().

{return int( specsValue(6) );}
int CSCChamberSpecs::nStrips ( ) const [inline]

number of strips in one chamber.

Definition at line 109 of file CSCChamberSpecs.h.

References nstrips.

Referenced by CSCMake2DRecHit::hitFromStripAndWire(), and CSCHitFromStripOnly::runStrip().

{return nstrips;}
int CSCChamberSpecs::nWiresPerGroup ( ) const [inline]

Definition at line 115 of file CSCChamberSpecs.h.

References specsValue().

Referenced by wireNoise().

{return int( specsValue(7) );}
const CSCLayerGeometry* CSCChamberSpecs::oddLayerGeometry ( int  iendcap) const [inline]

Accessors for LayerGeometry's.

Definition at line 69 of file CSCChamberSpecs.h.

References negzOddLayerGeometry, and poszOddLayerGeometry.

Referenced by CSCGeometryBuilder::buildChamber(), and TrackDetectorAssociator::getTAMuonChamberMatches().

   { return (iendcap==1? poszOddLayerGeometry:negzOddLayerGeometry);}
bool CSCChamberSpecs::operator!= ( const CSCChamberSpecs specs) const

Allow comparison of Specs objects.

Definition at line 103 of file CSCChamberSpecs.cc.

References theChamberType.

Referenced by operator==().

{
   if ( ( theChamberType != specs.theChamberType ) )
      return true;
    else
      return false;
}
bool CSCChamberSpecs::operator== ( const CSCChamberSpecs specs) const

Definition at line 111 of file CSCChamberSpecs.cc.

References operator!=().

{
   return !( operator!=(specs) );
}
float CSCChamberSpecs::shaperPeakingTime ( ) const [inline]

Fast shaper peaking time (ns).

Definition at line 165 of file CSCChamberSpecs.h.

References specsValue().

{return specsValue(18);}
float CSCChamberSpecs::specsValue ( int  index) const [inline, private]
float CSCChamberSpecs::stripNoise ( float  timeInterval) const

Definition at line 152 of file CSCChamberSpecs.cc.

References constantNoise(), e_pF(), TrapezoidalPlaneBounds::length(), poszOddLayerGeometry, and mathSSE::sqrt().

                                                          {
  const float pF_cm = 0.75;
  return (constantNoise() + e_pF() * pF_cm * poszOddLayerGeometry->length() )
         / sqrt(timeInterval/100.);
}
float CSCChamberSpecs::stripPhiPitch ( ) const [inline]

strip pitch in phi, in radians (the strips are fan-shaped)

Definition at line 121 of file CSCChamberSpecs.h.

References stripDeltaPhi.

Referenced by CSCChamberSpecs().

{return 1.E-03 * stripDeltaPhi;}
float CSCChamberSpecs::stripResolution ( ) const [inline]

Definition at line 96 of file CSCChamberSpecs.h.

References specsValue().

{return specsValue(0);}
float CSCChamberSpecs::timeWindow ( ) const [inline]

Definition at line 99 of file CSCChamberSpecs.h.

References specsValue().

{return specsValue(3);}
const Topology & CSCChamberSpecs::topology ( ) const [virtual]

Returns StripTopology of the odd-layer, positive-z geometry.

Implements GeomDetType.

Definition at line 116 of file CSCChamberSpecs.cc.

References poszOddLayerGeometry, and CSCLayerGeometry::topology().

                                                {
  return *(poszOddLayerGeometry->topology());
}
float CSCChamberSpecs::voltage ( ) const [inline]

Definition at line 141 of file CSCChamberSpecs.h.

References specsValue().

{return specsValue(11);}
int CSCChamberSpecs::whatChamberType ( int  istation,
int  iring 
) [static]

The usual integer label for 'chamber type' of this ring and station

Definition at line 135 of file CSCChamberSpecs.cc.

References i.

Referenced by CSCGeometryParsFromDD::build(), CSCGeometryBuilder::build(), CSCGeometryBuilder::buildChamber(), CSCNeutronWriter::chamberType(), CSCNeutronReader::chamberType(), and CSCConfigurableStripConditions::fetchNoisifier().

                                                              {
   int i = 2 * istation + iring; // i=2S+R
   if ( istation == 1 )
   {
      --i;             // ring 1R -> i=1+R (2S+R-1=1+R for S=1)
      if ( i > 4 )
      {
          i = 1;       // But ring 1A (R=4) -> i=1
      }
   }   
   return i;
}
float CSCChamberSpecs::wireNoise ( float  timeInterval) const [inline]

the number of noise electrons. the time interval is in ns we show the noise for 100 ns, then scale as 1/sqrt(time)

Definition at line 183 of file CSCChamberSpecs.h.

References constantNoise(), nWiresPerGroup(), and mathSSE::sqrt().

Referenced by CSCWireElectronicsSim::initParameters().

                                            {
    const float WIRE_CAPACITANCE = 8.; // in pF
    return (constantNoise() + nWiresPerGroup()*WIRE_CAPACITANCE)
           / sqrt(timeInterval/100.);
  }
float CSCChamberSpecs::wireRadius ( ) const [inline]

anode wire radius, in cm.

Definition at line 160 of file CSCChamberSpecs.h.

References specsValue().

Referenced by CSCXonStrip_MatchGatti::initChamberSpecs(), and CSCGattiFunction::initChamberSpecs().

{return specsValue(17);}
float CSCChamberSpecs::wireResolution ( ) const [inline]

Definition at line 97 of file CSCChamberSpecs.h.

References specsValue().

{return specsValue(1);}
float CSCChamberSpecs::wireSpacing ( ) const

wire spacing, in cm. All layers in a chamber have the same spacing.

Definition at line 148 of file CSCChamberSpecs.cc.

References poszOddLayerGeometry, and CSCLayerGeometry::wirePitch().

Referenced by CSCDriftSim::getWireHit(), CSCXonStrip_MatchGatti::initChamberSpecs(), and CSCGattiFunction::initChamberSpecs().


Member Data Documentation

Definition at line 236 of file CSCChamberSpecs.h.

Referenced by CSCChamberSpecs(), and ctiOffset().

Definition at line 238 of file CSCChamberSpecs.h.

Referenced by CSCChamberSpecs(), and gangedStrips().

const std::string CSCChamberSpecs::myName = "CSCChamberSpecs" [static, private]

Definition at line 244 of file CSCChamberSpecs.h.

Referenced by CSCChamberSpecs(), and ~CSCChamberSpecs().

Definition at line 217 of file CSCChamberSpecs.h.

Referenced by CSCChamberSpecs(), evenLayerGeometry(), and ~CSCChamberSpecs().

Definition at line 216 of file CSCChamberSpecs.h.

Referenced by CSCChamberSpecs(), oddLayerGeometry(), and ~CSCChamberSpecs().

int CSCChamberSpecs::nstrips [private]

Definition at line 234 of file CSCChamberSpecs.h.

Referenced by CSCChamberSpecs(), and nStrips().

Definition at line 215 of file CSCChamberSpecs.h.

Referenced by CSCChamberSpecs(), evenLayerGeometry(), and ~CSCChamberSpecs().

Definition at line 235 of file CSCChamberSpecs.h.

Referenced by stripPhiPitch().

Definition at line 226 of file CSCChamberSpecs.h.

Referenced by chamberType(), chargePerCount(), and operator!=().

const std::string CSCChamberSpecs::theName [static, private]
Initial value:
  {"ME1/a", "ME1/b", "ME1/2", "ME1/3", "ME2/1", "ME2/2", "ME3/1", "ME3/2",
   "ME4/1", "ME4/2" }

Reimplemented from GeomDetType.

Definition at line 241 of file CSCChamberSpecs.h.

Referenced by chamberTypeName(), and CSCChamberSpecs().

Definition at line 232 of file CSCChamberSpecs.h.

Referenced by specsValue().