CMS 3D CMS Logo

Public Member Functions | Protected Member Functions | Private Attributes

HFChamberSD Class Reference

#include <HFChamberSD.h>

Inheritance diagram for HFChamberSD:
SensitiveCaloDetector SensitiveDetector

List of all members.

Public Member Functions

virtual void clear ()
virtual void DrawAll ()
virtual void EndOfEvent (G4HCofThisEvent *HCE)
 HFChamberSD (std::string, const DDCompactView &, SensitiveDetectorCatalog &, edm::ParameterSet const &, const SimTrackManager *)
virtual void Initialize (G4HCofThisEvent *HCE)
virtual void PrintAll ()
virtual G4bool ProcessHits (G4Step *aStep, G4TouchableHistory *ROhist)
virtual ~HFChamberSD ()

Protected Member Functions

virtual void clearHits ()
virtual void fillHits (edm::PCaloHitContainer &, std::string)
virtual uint32_t setDetUnitId (G4Step *)

Private Attributes

const SimTrackManagerm_trackManager
HFShowerG4HitsCollectiontheHC
G4int theHCID
std::string theName
int theNSteps

Detailed Description

Definition at line 19 of file HFChamberSD.h.


Constructor & Destructor Documentation

HFChamberSD::HFChamberSD ( std::string  name,
const DDCompactView cpv,
SensitiveDetectorCatalog clg,
edm::ParameterSet const &  p,
const SimTrackManager manager 
)

Definition at line 16 of file HFChamberSD.cc.

References SensitiveDetector::AssignSD(), ecaldqm::collectionName, LogDebug, SensitiveDetectorCatalog::logicalNames(), and SensitiveDetector::Register().

                                                 :
  SensitiveCaloDetector(name, cpv, clg, p), theName(name),
  m_trackManager(manager), theHCID(-1), theHC(0), theNSteps(0) {

  collectionName.insert(name);
  LogDebug("FiberSim") << "***************************************************"
                       << "\n"
                       << "*                                                 *"
                       << "\n"
                       << "* Constructing a HFChamberSD  with name " << GetName()
                       << "\n"
                       << "*                                                 *"
                       << "\n"
                       << "***************************************************";
  //
  // Now attach the right detectors (LogicalVolumes) to me
  //
  std::vector<std::string> lvNames = clg.logicalNames(name);
  this->Register();
  for (std::vector<std::string>::iterator it=lvNames.begin();
       it !=lvNames.end(); it++){
    this->AssignSD(*it);
    LogDebug("FiberSim") << "HFChamberSD : Assigns SD to LV " << (*it);
  }
}
HFChamberSD::~HFChamberSD ( ) [virtual]

Definition at line 44 of file HFChamberSD.cc.

References theHC.

                          {
  if (theHC)    delete theHC;
}

Member Function Documentation

void HFChamberSD::clear ( void  ) [virtual]

Definition at line 101 of file HFChamberSD.cc.

References theNSteps.

Referenced by EndOfEvent().

                        {
  theNSteps = 0;
}
void HFChamberSD::clearHits ( ) [protected, virtual]

Implements SensitiveDetector.

Definition at line 109 of file HFChamberSD.cc.

{}
void HFChamberSD::DrawAll ( ) [virtual]

Definition at line 105 of file HFChamberSD.cc.

{}
void HFChamberSD::EndOfEvent ( G4HCofThisEvent *  HCE) [virtual]

Reimplemented from SensitiveDetector.

Definition at line 95 of file HFChamberSD.cc.

References clear(), LogDebug, and theHC.

                                                  {

  LogDebug("FiberSim") << "HFChamberSD: Sees" << theHC->entries() << " hits";
  clear();
}
void HFChamberSD::fillHits ( edm::PCaloHitContainer ,
std::string   
) [protected, virtual]

Implements SensitiveCaloDetector.

Definition at line 116 of file HFChamberSD.cc.

{}
void HFChamberSD::Initialize ( G4HCofThisEvent *  HCE) [virtual]

Reimplemented from SensitiveDetector.

Definition at line 48 of file HFChamberSD.cc.

References ecaldqm::collectionName, LogDebug, theHC, and theHCID.

                                                  {

  LogDebug("FiberSim") << "HFChamberSD : Initialize called for " << GetName();
  theHC = new HFShowerG4HitsCollection(GetName(), collectionName[0]);
  if (theHCID<0)
    theHCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]);
  HCE->AddHitsCollection(theHCID, theHC);

}
void HFChamberSD::PrintAll ( ) [virtual]

Definition at line 107 of file HFChamberSD.cc.

{}
G4bool HFChamberSD::ProcessHits ( G4Step *  aStep,
G4TouchableHistory *  ROhist 
) [virtual]

Implements SensitiveDetector.

Definition at line 58 of file HFChamberSD.cc.

References DeDxDiscriminatorTools::charge(), LogDebug, NULL, setDetUnitId(), HFShowerG4Hit::setGlobalPos(), HFShowerG4Hit::setLocalPos(), HFShowerG4Hit::setPrimMomDir(), theHC, theNSteps, and cond::rpcobgas::time.

                                                                   {

  //do not process hits other than primary particle hits:
  double charge = aStep->GetTrack()->GetDefinition()->GetPDGCharge();
  int trackID = aStep->GetTrack()->GetTrackID();
  if(charge == 0. || trackID != 1 ||aStep->GetTrack()->GetParentID() != 0 || aStep->GetTrack()->GetCreatorProcess() != NULL) return false;
  ++theNSteps;
  //if(theNSteps>1)return false;

  G4StepPoint* preStepPoint = aStep->GetPreStepPoint();
  const G4VTouchable* touch = preStepPoint->GetTouchable();
  int detID   = setDetUnitId(aStep);

  double edep = aStep->GetTotalEnergyDeposit();
  double time = (preStepPoint->GetGlobalTime())/ns;

  G4ThreeVector globalPos = preStepPoint->GetPosition();
  G4ThreeVector localPos  = touch->GetHistory()->GetTopTransform().TransformPoint(globalPos);
  const G4DynamicParticle* particle =  aStep->GetTrack()->GetDynamicParticle();
  G4ThreeVector momDir   = particle->GetMomentumDirection();

  HFShowerG4Hit *aHit = new HFShowerG4Hit(detID, trackID, edep, time);
  aHit->setLocalPos(localPos);
  aHit->setGlobalPos(globalPos);
  aHit->setPrimMomDir(momDir);

  LogDebug("FiberSim") << "HFChamberSD: Hit created in ("
                       << touch->GetVolume(0)->GetLogicalVolume()->GetName()
                       << ") " << " ID " << detID << " Track " << trackID
                       << " Edep: " << edep/MeV << " MeV; Time: " << time
                       << " ns; Position (local) " << localPos << " (global ) "
                       << globalPos << " direction " << momDir;

  theHC->insert(aHit);
  return true;
}
uint32_t HFChamberSD::setDetUnitId ( G4Step *  aStep) [protected, virtual]

Implements SensitiveDetector.

Definition at line 111 of file HFChamberSD.cc.

Referenced by ProcessHits().

                                                {
  const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
  return (touch->GetReplicaNumber(0));
}

Member Data Documentation

Definition at line 43 of file HFChamberSD.h.

Definition at line 46 of file HFChamberSD.h.

Referenced by EndOfEvent(), Initialize(), ProcessHits(), and ~HFChamberSD().

G4int HFChamberSD::theHCID [private]

Definition at line 45 of file HFChamberSD.h.

Referenced by Initialize().

std::string HFChamberSD::theName [private]

Definition at line 42 of file HFChamberSD.h.

int HFChamberSD::theNSteps [private]

Definition at line 47 of file HFChamberSD.h.

Referenced by clear(), and ProcessHits().