CMS 3D CMS Logo

Public Types | Public Member Functions | Private Attributes

CastorHitCorrection Class Reference

#include <CastorHitCorrection.h>

Inheritance diagram for CastorHitCorrection:
CaloVHitCorrection

List of all members.

Public Types

typedef std::map< DetId, double > ChargeSumsByChannel

Public Member Functions

 CastorHitCorrection (const CaloVSimParameterMap *parameterMap)
double charge (const PCaloHit &hit) const
 how much charge we expect from this hit
void clear ()
virtual void correct (PCaloHit &hit) const
 applies the delay to the hit
double delay (const PCaloHit &hit) const
 how much delay this hit will get
void fillChargeSums (MixCollection< PCaloHit > &hits)
int timeBin (const PCaloHit &hit) const
 which time bin the peak of the signal will fall in
double timeOfFlight (const DetId &id) const
 simple average approximation
virtual ~CastorHitCorrection ()

Private Attributes

ChargeSumsByChannel theChargeSumsForTimeBin [10]
const CaloVSimParameterMaptheParameterMap

Detailed Description

Applies a correction for time slewing Makes bigger signals come at a delayed time

Definition at line 16 of file CastorHitCorrection.h.


Member Typedef Documentation

Definition at line 19 of file CastorHitCorrection.h.


Constructor & Destructor Documentation

CastorHitCorrection::CastorHitCorrection ( const CaloVSimParameterMap parameterMap)

Definition at line 10 of file CastorHitCorrection.cc.

: theParameterMap(parameterMap)
{
}
virtual CastorHitCorrection::~CastorHitCorrection ( ) [inline, virtual]

Definition at line 22 of file CastorHitCorrection.h.

{}

Member Function Documentation

double CastorHitCorrection::charge ( const PCaloHit hit) const

how much charge we expect from this hit

Definition at line 41 of file CastorHitCorrection.cc.

References PCaloHit::energy(), PCaloHit::id(), Parameters::parameters, CaloSimParameters::simHitToPhotoelectrons(), CaloVSimParameterMap::simParameters(), and theParameterMap.

Referenced by delay(), and fillChargeSums().

{
  DetId detId(hit.id());
  const CaloSimParameters & parameters = theParameterMap->simParameters(detId);
  double simHitToCharge = parameters.simHitToPhotoelectrons()
                        * parameters.photoelectronsToAnalog();
  return hit.energy() * simHitToCharge;
}
void CastorHitCorrection::clear ( void  )

Definition at line 33 of file CastorHitCorrection.cc.

References i, and theChargeSumsForTimeBin.

{
  for(int i = 0; i < 10; ++i)
  {
    theChargeSumsForTimeBin[i].clear();
  }
}
void CastorHitCorrection::correct ( PCaloHit hit) const [virtual]

applies the delay to the hit

Implements CaloVHitCorrection.

Definition at line 83 of file CastorHitCorrection.cc.

References PCaloHit::energyEM(), PCaloHit::energyHad(), PCaloHit::geantTrackId(), PCaloHit::id(), and PCaloHit::time().

                                                      {
  // replace the hit with a new one, with a time delay
  hit = PCaloHit(hit.id(), hit.energyEM(), hit.energyHad(), hit.time(), hit.geantTrackId());
}
double CastorHitCorrection::delay ( const PCaloHit hit) const

how much delay this hit will get

Definition at line 50 of file CastorHitCorrection.cc.

References DetId::Calo, charge(), end, Exception, HcalForward, HcalOuter, PCaloHit::id(), LogDebug, CastorTimeSlew::Medium, CastorTimeSlew::Slow, HcalCastorDetId::SubdetectorId, theChargeSumsForTimeBin, and timeBin().

{
  // HO goes slow, HF shouldn't be used at all
  //Castor not used for the moment

  DetId detId(hit.id());
  if(detId.det()==DetId::Calo && (detId.subdetId()==HcalCastorDetId::SubdetectorId)) return 0;

  HcalDetId hcalDetId(hit.id());
  if(hcalDetId.subdet() == HcalForward) return 0;  
  CastorTimeSlew::BiasSetting biasSetting = (hcalDetId.subdet() == HcalOuter) ?
                                          CastorTimeSlew::Slow :
                                          CastorTimeSlew::Medium;
  double delay = 0.;
  int tbin = timeBin(hit);
  if(tbin >= 0 && tbin < 10)
  {
    ChargeSumsByChannel::const_iterator totalChargeItr = theChargeSumsForTimeBin[tbin].find(detId);
    if(totalChargeItr == theChargeSumsForTimeBin[tbin].end())
    {
      throw cms::Exception("CastorHitCorrection") << "Cannot find HCAL/CASTOR charge sum for hit " << hit;
    }
    double totalCharge = totalChargeItr->second;
    delay = CastorTimeSlew::delay(totalCharge, biasSetting);
    LogDebug("CastorHitCorrection") << "TIMESLEWcharge " << charge(hit) 
                                  << "  totalcharge " << totalCharge 
                                  << " olddelay "  << CastorTimeSlew::delay(charge(hit), biasSetting) 
                                  << " newdelay " << delay;
  }

  return delay;
}
void CastorHitCorrection::fillChargeSums ( MixCollection< PCaloHit > &  hits)

Definition at line 16 of file CastorHitCorrection.cc.

References MixCollection< T >::begin(), charge(), MixCollection< T >::end(), LogDebug, theChargeSumsForTimeBin, and timeBin().

Referenced by CastorDigiProducer::produce().

{
  //  clear();
  for(MixCollection<PCaloHit>::MixItr hitItr = hits.begin();
      hitItr != hits.end(); ++hitItr)
  {
    LogDebug("CastorHitCorrection") << "CastorHitCorrection::Hit 0x" << std::hex << hitItr->id() << std::dec;
    int tbin = timeBin(*hitItr);
    LogDebug("CastorHitCorrection") << "CastorHitCorrection::Hit tbin" << tbin;
    if(tbin >= 0 && tbin < 10) 
    {  
      theChargeSumsForTimeBin[tbin][DetId(hitItr->id())] += charge(*hitItr);
    }
  }
}
int CastorHitCorrection::timeBin ( const PCaloHit hit) const

which time bin the peak of the signal will fall in

Definition at line 89 of file CastorHitCorrection.cc.

References CaloSimParameters::binOfMaximum(), PCaloHit::id(), Parameters::parameters, CaloVSimParameterMap::simParameters(), lumiQTWidget::t, theParameterMap, PCaloHit::time(), timeOfFlight(), and CaloSimParameters::timePhase().

Referenced by delay(), and fillChargeSums().

{
  const CaloSimParameters & parameters = theParameterMap->simParameters(DetId(hit.id()));
  double t = hit.time() - timeOfFlight(DetId(hit.id())) + parameters.timePhase();
  return static_cast<int> (t / 25) + parameters.binOfMaximum() - 1;
}
double CastorHitCorrection::timeOfFlight ( const DetId id) const

simple average approximation

Definition at line 97 of file CastorHitCorrection.cc.

References DetId::Calo, DetId::det(), Exception, HcalCastorDetId::SubdetectorId, and DetId::subdetId().

Referenced by timeBin().

{
    if(detId.det()==DetId::Calo && detId.subdetId()==HcalCastorDetId::SubdetectorId)
        return 37.666;
    else
        throw cms::Exception("not HcalCastorDetId"); 
}

Member Data Documentation

Definition at line 47 of file CastorHitCorrection.h.

Referenced by clear(), delay(), and fillChargeSums().

Definition at line 45 of file CastorHitCorrection.h.

Referenced by charge(), and timeBin().