diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/HpdSiEnergyLoss.hh b/LHCbG4Tests/G4RichTbSimHTest/include/HpdSiEnergyLoss.hh index 7f5676bee6147f5272215b2761f60793c45a6f5f..eea19465997a8575fafea75fbf8abfa586892d40 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/HpdSiEnergyLoss.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/HpdSiEnergyLoss.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_HPDSIENERGYLOSS_HH +#ifndef INCLUDE_HPDSIENERGYLOSS_HH #define INCLUDE_HPDSIENERGYLOSS_HH 1 // Include files @@ -13,59 +13,43 @@ #include "Geant4/G4ParticleDefinition.hh" /** @class HpdSiEnergyLoss HpdSiEnergyLoss.hh include/HpdSiEnergyLoss.hh - * + * * * @author Sajan EASO * @date 2003-12-10 */ class HpdSiEnergyLoss : public G4VContinuousDiscreteProcess { -public: +public: /// Standard constructor - HpdSiEnergyLoss(const G4String& processName); + HpdSiEnergyLoss(const G4String &processName); - virtual ~HpdSiEnergyLoss( ); ///< Destructor - G4bool IsApplicable(const G4ParticleDefinition&); + virtual ~HpdSiEnergyLoss(); ///< Destructor + G4bool IsApplicable(const G4ParticleDefinition &) override; // true for all charged particles - G4double GetContinuousStepLimit(const G4Track& track, - G4double previousStepSize, - G4double currentMinimumStep, - G4double& currentSafety); + G4double GetContinuousStepLimit(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, + G4double ¤tSafety) override; + + G4VParticleChange *AlongStepDoIt(const G4Track &aTrack, const G4Step &aStep) override; + G4double GetMeanFreePath(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override; + G4VParticleChange *PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override; - G4VParticleChange* AlongStepDoIt(const G4Track& aTrack, - const G4Step& aStep) ; - G4double GetMeanFreePath(const G4Track& track, - G4double previousStepSize, - G4ForceCondition* condition); - G4VParticleChange* PostStepDoIt(const G4Track& aTrack, - const G4Step& aStep); + G4String getElossMaterialName() { return ElossMaterialName; } + G4String getkillMaterialName() { return EkillMaterialName; } - G4String getElossMaterialName() - { - return ElossMaterialName; - } - G4String getkillMaterialName() - { - return EkillMaterialName; - } - private: + // hide assignment and copy operators + HpdSiEnergyLoss(HpdSiEnergyLoss &); + HpdSiEnergyLoss &operator=(const HpdSiEnergyLoss &right); - // hide assignment and copy operators - HpdSiEnergyLoss ( HpdSiEnergyLoss &); - HpdSiEnergyLoss & operator=(const HpdSiEnergyLoss &right); - - protected: - private: - //now the data members - G4int fMatIndex; - G4int fMatIndexK; - G4double MinKineticEnergy ; - G4double MipEnergy; - G4double finalRangeforStep; - G4String ElossMaterialName; - G4String EkillMaterialName; - + // now the data members + G4int fMatIndex; + G4int fMatIndexK; + G4double MinKineticEnergy; + G4double MipEnergy; + G4double finalRangeforStep; + G4String ElossMaterialName; + G4String EkillMaterialName; }; #endif // INCLUDE_HPDSIENERGYLOSS_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/PixelHpdPhotoElectricEffect.hh b/LHCbG4Tests/G4RichTbSimHTest/include/PixelHpdPhotoElectricEffect.hh index 0dd4a84ed47fd7df6babae02b9304d1db0fd4a0f..86eff07551abeb41ae0ac1f4dcc52003b7c47188 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/PixelHpdPhotoElectricEffect.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/PixelHpdPhotoElectricEffect.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_PIXELHPDPHOTOELECTRICEFFECT_HH +#ifndef INCLUDE_PIXELHPDPHOTOELECTRICEFFECT_HH #define INCLUDE_PIXELHPDPHOTOELECTRICEFFECT_HH 1 // Include files @@ -18,59 +18,40 @@ #include "RichTbAnalysisManager.hh" /** @class PixelHpdPhotoElectricEffect PixelHpdPhotoElectricEffect.hh include/PixelHpdPhotoElectricEffect.hh - * + * * * @author Sajan EASO * @date 2003-12-09 */ -class PixelHpdPhotoElectricEffect:public G4VDiscreteProcess { -public: +class PixelHpdPhotoElectricEffect : public G4VDiscreteProcess { +public: /// Standard constructor - PixelHpdPhotoElectricEffect(const G4String&) ; + PixelHpdPhotoElectricEffect(const G4String &); - virtual ~PixelHpdPhotoElectricEffect( ); ///< Destructor - G4bool IsApplicable(const G4ParticleDefinition& ); + virtual ~PixelHpdPhotoElectricEffect(); ///< Destructor + G4bool IsApplicable(const G4ParticleDefinition &) override; // is applicable for optical photon only - G4double GetMeanFreePath(const G4Track& , - G4double , - G4ForceCondition* condition); - //returns infinity (max integer possible) . This means the process does + G4double GetMeanFreePath(const G4Track &, G4double, G4ForceCondition *condition) override; + // returns infinity (max integer possible) . This means the process does // not limit the step, but sets the Forced condition for the DoIt to be - // invoked at every step. But only at the boundary between Hpd quartz + // invoked at every step. But only at the boundary between Hpd quartz // window and the Hpd photocathode any action be taken. - G4VParticleChange* PostStepDoIt(const G4Track& aTrack, - const G4Step& aStep); - //The method for implementing the HpdPhotoelectric effect. + G4VParticleChange *PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override; + // The method for implementing the HpdPhotoelectric effect. G4double getHpdQEff(G4int, G4double); // To interpolate the QE from QE data. - G4double getHpdPhElectronMomentum() - {return HpdPhElectronMomentum; } - G4double getPhCathodeToSilDetDist() - {return PhCathodeToSilDetDist; } - std::vector<G4double> getHpdDemag(G4int hpdnum) - {return DemagnificationFactor[hpdnum]; } - G4double getHpdDemagLinearTerm(G4int hpdnum) - {return DemagnificationFactor[hpdnum][1]; } - G4int getNumHpdTot() - { - return NumHpdTot; - } -G4double getHpdPhCathodeRInner() -{return HpdPhCathodeRInner;} + G4double getHpdPhElectronMomentum() { return HpdPhElectronMomentum; } + G4double getPhCathodeToSilDetDist() { return PhCathodeToSilDetDist; } + std::vector<G4double> getHpdDemag(G4int hpdnum) { return DemagnificationFactor[hpdnum]; } + G4double getHpdDemagLinearTerm(G4int hpdnum) { return DemagnificationFactor[hpdnum][1]; } + G4int getNumHpdTot() { return NumHpdTot; } + G4double getHpdPhCathodeRInner() { return HpdPhCathodeRInner; } -G4int getNumDemagParam() -{ - return NumDemagParam; -} -G4int getNumQEbins() -{ - return NumQEbins; -} + G4int getNumDemagParam() { return NumDemagParam; } + G4int getNumQEbins() { return NumQEbins; } protected: - private: - G4int NumHpdTot; G4int NumDemagParam; G4int NumQEbins; @@ -78,11 +59,10 @@ private: G4String PostPhotoElectricVolName; G4double HpdPhElectronMomentum; G4double PhCathodeToSilDetDist; - G4double HpdPhCathodeRInner; + G4double HpdPhCathodeRInner; G4double PSFsigma; - std::vector<std::vector<G4double> >DemagnificationFactor; - std::vector<std::vector<G4double> >HpdQE; - std::vector<std::vector<G4double> >HpdWabin; - + std::vector<std::vector<G4double>> DemagnificationFactor; + std::vector<std::vector<G4double>> HpdQE; + std::vector<std::vector<G4double>> HpdWabin; }; #endif // INCLUDE_PIXELHPDPHOTOELECTRICEFFECT_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/PmtAnodeEnergyLoss.hh b/LHCbG4Tests/G4RichTbSimHTest/include/PmtAnodeEnergyLoss.hh index 40ca6007c3b83cd3666331198fcfddcca403997e..9d382b66d176d1d55b780dd936ab5020ceb7927d 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/PmtAnodeEnergyLoss.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/PmtAnodeEnergyLoss.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_PMTANODEENERGYLOSS_HH +#ifndef INCLUDE_PMTANODEENERGYLOSS_HH #define INCLUDE_PMTANODEENERGYLOSS_HH 1 // Include files @@ -13,59 +13,43 @@ #include "Geant4/G4ParticleDefinition.hh" /** @class PmtAnodeEnergyLoss PmtAnodeEnergyLoss.hh include/PmtAnodeEnergyLoss.hh - * + * * * @author Sajan EASO * @date 2003-12-10 */ class PmtAnodeEnergyLoss : public G4VContinuousDiscreteProcess { -public: +public: /// Standard constructor - PmtAnodeEnergyLoss(const G4String& processName); + PmtAnodeEnergyLoss(const G4String &processName); - virtual ~PmtAnodeEnergyLoss( ); ///< Destructor - G4bool IsApplicable(const G4ParticleDefinition&); + virtual ~PmtAnodeEnergyLoss(); ///< Destructor + G4bool IsApplicable(const G4ParticleDefinition &) override; // true for all charged particles - G4double GetContinuousStepLimit(const G4Track& track, - G4double previousStepSize, - G4double currentMinimumStep, - G4double& currentSafety); + G4double GetContinuousStepLimit(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, + G4double ¤tSafety) override; + + G4VParticleChange *AlongStepDoIt(const G4Track &aTrack, const G4Step &aStep) override; + G4double GetMeanFreePath(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override; + G4VParticleChange *PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override; - G4VParticleChange* AlongStepDoIt(const G4Track& aTrack, - const G4Step& aStep) ; - G4double GetMeanFreePath(const G4Track& track, - G4double previousStepSize, - G4ForceCondition* condition); - G4VParticleChange* PostStepDoIt(const G4Track& aTrack, - const G4Step& aStep); + G4String getElossMaterialName() { return ElossMaterialName; } + G4String getkillMaterialName() { return EkillMaterialName; } - G4String getElossMaterialName() - { - return ElossMaterialName; - } - G4String getkillMaterialName() - { - return EkillMaterialName; - } - private: + // hide assignment and copy operators + PmtAnodeEnergyLoss(PmtAnodeEnergyLoss &); + PmtAnodeEnergyLoss &operator=(const PmtAnodeEnergyLoss &right); - // hide assignment and copy operators - PmtAnodeEnergyLoss ( PmtAnodeEnergyLoss &); - PmtAnodeEnergyLoss & operator=(const PmtAnodeEnergyLoss &right); - - protected: - private: - //now the data members - G4int fMatIndex; - G4int fMatIndexK; - G4double MinKineticEnergy ; - G4double MipEnergy; - G4double finalRangeforStep; - G4String ElossMaterialName; - G4String EkillMaterialName; - + // now the data members + G4int fMatIndex; + G4int fMatIndexK; + G4double MinKineticEnergy; + G4double MipEnergy; + G4double finalRangeforStep; + G4String ElossMaterialName; + G4String EkillMaterialName; }; #endif // INCLUDE_PMTANODEENERGYLOSS_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/PmtPhotoElectricEffect.hh b/LHCbG4Tests/G4RichTbSimHTest/include/PmtPhotoElectricEffect.hh index 32eabdfdcf21b18b18ae88901ed643ce4d2043f1..a863446934bffb94cad6ff4b1f402ab9719db868 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/PmtPhotoElectricEffect.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/PmtPhotoElectricEffect.hh @@ -23,47 +23,33 @@ * @author Sajan EASO * @date 2003-12-09 */ -class PmtPhotoElectricEffect:public G4VDiscreteProcess { +class PmtPhotoElectricEffect : public G4VDiscreteProcess { public: /// Standard constructor - PmtPhotoElectricEffect(const G4String&) ; + PmtPhotoElectricEffect(const G4String &); - virtual ~PmtPhotoElectricEffect( ); ///< Destructor - G4bool IsApplicable(const G4ParticleDefinition& ); + virtual ~PmtPhotoElectricEffect(); ///< Destructor + G4bool IsApplicable(const G4ParticleDefinition &) override; // is applicable for optical photon only - G4double GetMeanFreePath(const G4Track& , - G4double , - G4ForceCondition* condition); - //returns infinity (max integer possible) . This means the process does + G4double GetMeanFreePath(const G4Track &, G4double, G4ForceCondition *condition) override; + // returns infinity (max integer possible) . This means the process does // not limit the step, but sets the Forced condition for the DoIt to be // invoked at every step. But only at the boundary between Hpd quartz // window and the Hpd photocathode any action be taken. - G4VParticleChange* PostStepDoIt(const G4Track& aTrack, - const G4Step& aStep); - //The method for implementing the PmtPhotoelectric effect. + G4VParticleChange *PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override; + // The method for implementing the PmtPhotoelectric effect. G4double getPmtQEff(G4int, G4double); // To interpolate the QE from QE data. - G4double getPmtPhElectronMomentum() - {return PmtPhElectronMomentum; } - G4double getPhCathodeToSilDetDist() - {return PhCathodeToSilDetDist; } + G4double getPmtPhElectronMomentum() { return PmtPhElectronMomentum; } + G4double getPhCathodeToSilDetDist() { return PhCathodeToSilDetDist; } - G4int getNumPmtTot() - { - return NumPmtTot; - } + G4int getNumPmtTot() { return NumPmtTot; } - -G4int getNumQEbins() -{ - return NumQEbins; -} + G4int getNumQEbins() { return NumQEbins; } protected: - private: - - G4int NumPmts_; // TESTnumPmts + G4int NumPmts_; // TESTnumPmts G4int NumPmtTot; @@ -73,9 +59,7 @@ private: G4double PmtPhElectronMomentum; G4double PhCathodeToSilDetDist; - - std::vector<std::vector<G4double> >PmtQE; - std::vector<std::vector<G4double> >PmtWabin; - + std::vector<std::vector<G4double>> PmtQE; + std::vector<std::vector<G4double>> PmtWabin; }; #endif // INCLUDE_PMTPHOTOELECTRICEFFECT_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbAnalysisManager.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbAnalysisManager.hh index 22350ffbee21692c5d7772267a61e8683320d217..bdbe8f090b027b01d0a1fbfd4d0fd08ff4e15664 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbAnalysisManager.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbAnalysisManager.hh @@ -1,7 +1,6 @@ #ifndef RichTbAnalysisManager_h #define RichTbAnalysisManager_h 1 - //#include "Geant4/G4VAnalysisManager.hh" #include "Geant4/globals.hh" //#include "Geant4/G4std/vector" @@ -46,27 +45,22 @@ class G4Timer; class G4SteppingManager; class RichTbRunConfig; - - class TFile; - class TTree; +class TFile; +class TTree; // class TH1D; - const G4int MaxHisto = 5; +const G4int MaxHisto = 5; - -//namespace AIDA { - //class IAnalysisFactory; -//class IHistogramFactory; -//class ITree; -//class ITupleFactory; -//class ITuple; +// namespace AIDA { +// class IAnalysisFactory; +// class IHistogramFactory; +// class ITree; +// class ITupleFactory; +// class ITuple; //}; - - class RichTbAnalysisManager { public: - virtual ~RichTbAnalysisManager(); void InitializeCounters(); @@ -75,248 +69,200 @@ public: void BeginOfRunAnalysis(); void EndOfRunAnalysis(); - void BeginOfEventAnalysis(const G4Event*); - void EndOfEventAnalysis(const G4Event*); - void StepAnalysis(const G4SteppingManager* ); - void EndOfEventHisto(const G4Event*); - void EndOfEventHistoHpd(const G4Event*); - - void EndOfEventCountersHisto(const G4Event* ); - - - - - static RichTbAnalysisManager* getInstance(); - - TH1D * getPhotonXCoord() {return fPhotonXCoord;} - TH1D * getPhotonYCoord() {return fPhotonYCoord;} - TH1D * getPhotonZCoord() {return fPhotonZCoord;} - - TH2D * getPhotonXYCoord() {return fPhotonXYCoord;} - - TH1D * getPhotonWidthProfile() {return fPhotonWidthProfile;} - TProfile * getPhotonXYCoordProfile() {return fPhotonXYCoordProfile;} - TProfile * getPhotonXYCoordProfileCut() {return fPhotonXYCoordProfileCut;} - TH1D * getSpectrum() {return fSpectrum;} - TH1D * getSpectrumPreMirror() {return fSpectrumPreMirror;} - TH1D * getSpectrumPostMirror() {return fSpectrumPostMirror;} - TH1D * getPhotonZAngle() {return fPhotonZAngle;} - TH1D * getCherenkovAngle() {return fCherenkovAngle;} - TH1D * getCherenkovAngleCut() {return fCherenkovAngleCut;} + void BeginOfEventAnalysis(const G4Event *); + void EndOfEventAnalysis(const G4Event *); + void StepAnalysis(const G4SteppingManager *); + void EndOfEventHisto(const G4Event *); + void EndOfEventHistoHpd(const G4Event *); - TH2D * getRadiusVsWL() {return fRadiusVsWL;} - TProfile * getRadiusVsWLProfile() {return fRadiusVsWLProfile;} - TH2D * getfGlobalPixelCenterXYCoord() { return fGlobalPixelCenterXYCoord;} - TProfile * getfCkvRadiusVsEmisPtPhoton() { return fCkvRadiusVsEmisPtPhoton;} - TH1D * getfEmisPtPhoton() { return fEmisPtPhoton; } - TH1D * getfEmisPtPrimaryTrackPhoton() { return fEmisPtPrimaryTrackPhoton; } + void EndOfEventCountersHisto(const G4Event *); + static RichTbAnalysisManager *getInstance(); - TH2D * getfGlobalHitXYCoordPeOrigin() - { return fGlobalHitXYCoordPeOrigin;} - TH2D * getfGlobalHitXYCoord() - { return fGlobalHitXYCoord ;} - TH1D * getfNumHitInEvent() - { return fNumHitInEvent; } + TH1D *getPhotonXCoord() { return fPhotonXCoord; } + TH1D *getPhotonYCoord() { return fPhotonYCoord; } + TH1D *getPhotonZCoord() { return fPhotonZCoord; } - TH1D* getfNumHitInEventCentralPMT() - { return fNumHitInEventCentralPMT;} + TH2D *getPhotonXYCoord() { return fPhotonXYCoord; } - TH1D* getfNumHitInEventCentralPMTJura() {return fNumHitInEventCentralPMTJura ;} - TH1D* getfNumHitInEventCentralPMTSaleve() {return fNumHitInEventCentralPMTSaleve ;} + TH1D *getPhotonWidthProfile() { return fPhotonWidthProfile; } + TProfile *getPhotonXYCoordProfile() { return fPhotonXYCoordProfile; } + TProfile *getPhotonXYCoordProfileCut() { return fPhotonXYCoordProfileCut; } + TH1D *getSpectrum() { return fSpectrum; } + TH1D *getSpectrumPreMirror() { return fSpectrumPreMirror; } + TH1D *getSpectrumPostMirror() { return fSpectrumPostMirror; } + TH1D *getPhotonZAngle() { return fPhotonZAngle; } + TH1D *getCherenkovAngle() { return fCherenkovAngle; } + TH1D *getCherenkovAngleCut() { return fCherenkovAngleCut; } + TH2D *getRadiusVsWL() { return fRadiusVsWL; } + TProfile *getRadiusVsWLProfile() { return fRadiusVsWLProfile; } + TH2D *getfGlobalPixelCenterXYCoord() { return fGlobalPixelCenterXYCoord; } + TProfile *getfCkvRadiusVsEmisPtPhoton() { return fCkvRadiusVsEmisPtPhoton; } + TH1D *getfEmisPtPhoton() { return fEmisPtPhoton; } + TH1D *getfEmisPtPrimaryTrackPhoton() { return fEmisPtPrimaryTrackPhoton; } - TH1D * getfNumHitInPMT0() - { return fNumHitInPMT0; } - TH1D * getfNumHitInPMT1() - { return fNumHitInPMT1; } - TH1D * getfNumHitInPMT2() - { return fNumHitInPMT2; } - TH1D * getfNumHitInPMT3() - { return fNumHitInPMT3; } - TH1D * getfNumHitInPMT4() - { return fNumHitInPMT4; } - TH1D * getfNumHitInPMT5() - { return fNumHitInPMT5; } - TH1D * getfNumHitInPMT6() - { return fNumHitInPMT6; } - TH1D * getfNumHitInPMT7() - { return fNumHitInPMT7; } - TH1D * getfNumHitInPMT8() - { return fNumHitInPMT8; } - TH1D * getfNumHitInPMT9() - { return fNumHitInPMT9; } - TH1D * getfNumHitInPMT10() - { return fNumHitInPMT10; } - TH1D * getfNumHitInPMT11() - { return fNumHitInPMT11; } - TH1D * getfNumHitInPMT12() - { return fNumHitInPMT12; } - TH1D * getfNumHitInPMT13() - { return fNumHitInPMT13; } - TH1D * getfNumHitInPMT14() - { return fNumHitInPMT14; } - TH1D * getfNumHitInPMT15() - { return fNumHitInPMT15; } - TH1D * getfGeneratedCkvPhoton() - { return fGeneratedCkvPhoton;} + TH2D *getfGlobalHitXYCoordPeOrigin() { return fGlobalHitXYCoordPeOrigin; } + TH2D *getfGlobalHitXYCoord() { return fGlobalHitXYCoord; } + TH1D *getfNumHitInEvent() { return fNumHitInEvent; } - TH2D * getfTIRXYLocationPhoton() - { return fTIRXYLocationPhoton;} - TH2D* getfXYRadiatorDnsPhoton() - { return fXYRadiatorDnsPhoton;} - TH2D* getfXYRadiatorTIRDnsPhoton() - { return fXYRadiatorTIRDnsPhoton;} + TH1D *getfNumHitInEventCentralPMT() { return fNumHitInEventCentralPMT; } - TH2D* getfXYRadiatorRFRDnsPhoton() - { return fXYRadiatorRFRDnsPhoton;} + TH1D *getfNumHitInEventCentralPMTJura() { return fNumHitInEventCentralPMTJura; } + TH1D *getfNumHitInEventCentralPMTSaleve() { return fNumHitInEventCentralPMTSaleve; } - TH2D* getfMIRXYLocationPhoton() - { return fMIRXYLocationPhoton;} + TH1D *getfNumHitInPMT0() { return fNumHitInPMT0; } + TH1D *getfNumHitInPMT1() { return fNumHitInPMT1; } + TH1D *getfNumHitInPMT2() { return fNumHitInPMT2; } + TH1D *getfNumHitInPMT3() { return fNumHitInPMT3; } + TH1D *getfNumHitInPMT4() { return fNumHitInPMT4; } + TH1D *getfNumHitInPMT5() { return fNumHitInPMT5; } + TH1D *getfNumHitInPMT6() { return fNumHitInPMT6; } + TH1D *getfNumHitInPMT7() { return fNumHitInPMT7; } + TH1D *getfNumHitInPMT8() { return fNumHitInPMT8; } + TH1D *getfNumHitInPMT9() { return fNumHitInPMT9; } + TH1D *getfNumHitInPMT10() { return fNumHitInPMT10; } + TH1D *getfNumHitInPMT11() { return fNumHitInPMT11; } + TH1D *getfNumHitInPMT12() { return fNumHitInPMT12; } + TH1D *getfNumHitInPMT13() { return fNumHitInPMT13; } + TH1D *getfNumHitInPMT14() { return fNumHitInPMT14; } + TH1D *getfNumHitInPMT15() { return fNumHitInPMT15; } + TH1D *getfGeneratedCkvPhoton() { return fGeneratedCkvPhoton; } - TH2D* getfRFRXYLocationPhoton() - { return fRFRXYLocationPhoton;} + TH2D *getfTIRXYLocationPhoton() { return fTIRXYLocationPhoton; } + TH2D *getfXYRadiatorDnsPhoton() { return fXYRadiatorDnsPhoton; } + TH2D *getfXYRadiatorTIRDnsPhoton() { return fXYRadiatorTIRDnsPhoton; } + TH2D *getfXYRadiatorRFRDnsPhoton() { return fXYRadiatorRFRDnsPhoton; } - TH1D* getfNumHitInHPD0() { return fNumHitInHPD0; } + TH2D *getfMIRXYLocationPhoton() { return fMIRXYLocationPhoton; } - TH2D* getfRFRXYLocationPhotonHpd() {return fRFRXYLocationPhotonHpd; } + TH2D *getfRFRXYLocationPhoton() { return fRFRXYLocationPhoton; } - TH2D* getfGlobalHitXYCoordPeOriginHpd() {return fGlobalHitXYCoordPeOriginHpd; } + TH1D *getfNumHitInHPD0() { return fNumHitInHPD0; } - TH2D* getfGlobalHitXYCoordHpd() {return fGlobalHitXYCoordHpd; } + TH2D *getfRFRXYLocationPhotonHpd() { return fRFRXYLocationPhotonHpd; } - TH2D* getfGlobalPixelCenterXYCoordHpd() {return fGlobalPixelCenterXYCoordHpd ;} - - TH2D* getfGlobalHitXYCoordPeOriginHpdPmt() { return fGlobalHitXYCoordPeOriginHpdPmt;} - - TH2D* getfRadiatorRefIndex() { return fRadiatorRefIndex;} - TProfile * getfRadiatorRefIndexHits() { return fRadiatorRefIndexHits;} - - TH2D * getfGlobalHitXYCoordPixPhcathHpd() {return fGlobalHitXYCoordPixPhcathHpd;} - - TH1D* getfNumHitSignalInHPD0() {return fNumHitSignalInHPD0 ;} + TH2D *getfGlobalHitXYCoordPeOriginHpd() { return fGlobalHitXYCoordPeOriginHpd; } + TH2D *getfGlobalHitXYCoordHpd() { return fGlobalHitXYCoordHpd; } + TH2D *getfGlobalPixelCenterXYCoordHpd() { return fGlobalPixelCenterXYCoordHpd; } -private: - //private constructor in order to create a singleton - - RichTbAnalysisManager (); - - static RichTbAnalysisManager* RichTbAnalysisInstance; - - G4Timer* iTimer; - - TFile* fRootFile; - TH1D* fHisto[MaxHisto]; - TTree* fNtuple1; - TH1D * fPhotonZCoord; - TH1D * fPhotonYCoord; - TH1D * fPhotonXCoord; - TH1D * fSpectrum; - TH1D * fSpectrumPreMirror; - TH1D * fSpectrumPostMirror; - - TH2D * fRadiatorRefIndex; - TProfile * fRadiatorRefIndexHits; - - TH2D * fPhotonXYCoord; - TH2D * fPhotonXYCoord15; - - - TH2D * fRadiusVsWL; - TProfile * fRadiusVsWLProfile; - TH1D * fPhotonWidthProfile; - TProfile * fPhotonXYCoordProfile; - TProfile * fPhotonXYCoordProfileCut; - TH1D * fPhotonZAngle; - TH1D * fCherenkovAngle; - TH1D * fCherenkovAngleCut; - - TH2D* fGlobalHitXYCoordPeOrigin; - TH2D* fGlobalHitXYCoord; - TH2D* fGlobalHitXYCoord15; - TH2D* fGlobalPixelCenterXYCoord ; - TH1D* fNumHitInEvent; - TH1D* fNumHitInEventCentralPMT; - TH1D* fNumHitInEventCentralPMTJura ; - TH1D* fNumHitInEventCentralPMTSaleve; - - TH1D* fNumHitInPMT0; - TH1D* fNumHitInPMT1; - TH1D* fNumHitInPMT2; - TH1D* fNumHitInPMT3; - TH1D* fNumHitInPMT4; - TH1D* fNumHitInPMT5; - TH1D* fNumHitInPMT6; - TH1D* fNumHitInPMT7; - TH1D* fNumHitInPMT8; - TH1D* fNumHitInPMT9; - TH1D* fNumHitInPMT10; - TH1D* fNumHitInPMT11; - TH1D* fNumHitInPMT12; - TH1D* fNumHitInPMT13; - TH1D* fNumHitInPMT14; - TH1D* fNumHitInPMT15; - - TH1D* radiusInPMT0; - TH1D* radiusInPMT1; - TH1D* radiusInPMT2; - TH1D* radiusInPMT3; - TH1D* radiusInPMT4; - TH1D* radiusInPMT5; - TH1D* radiusInPMT6; - TH1D* radiusInPMT7; - TH1D* radiusInPMT8; - TH1D* radiusInPMT9; - TH1D* radiusInPMT10; - TH1D* radiusInPMT11; - TH1D* radiusInPMT12; - TH1D* radiusInPMT13; - TH1D* radiusInPMT14; - TH1D* radiusInPMT15; - - TProfile * fCkvRadiusVsEmisPtPhoton; - TH1D* fEmisPtPhoton; - TH1D* fEmisPtPrimaryTrackPhoton; - - G4double fNtupVar1; - G4double fNtupVar2; - - TH1D* fGeneratedCkvPhoton; - - TH2D* fTIRXYLocationPhoton; - TH2D* fXYRadiatorDnsPhoton; - TH2D* fXYRadiatorTIRDnsPhoton; - TH2D* fXYRadiatorRFRDnsPhoton; - - TH2D* fMIRXYLocationPhoton; - TH2D* fRFRXYLocationPhoton; - - - - TH1D* fNumHitInHPD0; - TH1D* fNumHitSignalInHPD0 ; - - TH2D* fRFRXYLocationPhotonHpd; - TH2D* fGlobalHitXYCoordPeOriginHpd; - TH2D* fGlobalHitXYCoordHpd; - TH2D* fGlobalPixelCenterXYCoordHpd ; - - TH2D* fGlobalHitXYCoordPeOriginHpdPmt; - - TH2D * fGlobalHitXYCoordPixPhcathHpd; + TH2D *getfGlobalHitXYCoordPeOriginHpdPmt() { return fGlobalHitXYCoordPeOriginHpdPmt; } + TH2D *getfRadiatorRefIndex() { return fRadiatorRefIndex; } + TProfile *getfRadiatorRefIndexHits() { return fRadiatorRefIndexHits; } + TH2D *getfGlobalHitXYCoordPixPhcathHpd() { return fGlobalHitXYCoordPixPhcathHpd; } -}; + TH1D *getfNumHitSignalInHPD0() { return fNumHitSignalInHPD0; } +private: + // private constructor in order to create a singleton + + RichTbAnalysisManager(); + + static RichTbAnalysisManager *RichTbAnalysisInstance; + + G4Timer *iTimer; + + TFile *fRootFile; + TH1D *fHisto[MaxHisto]; + TTree *fNtuple1; + TH1D *fPhotonZCoord; + TH1D *fPhotonYCoord; + TH1D *fPhotonXCoord; + TH1D *fSpectrum; + TH1D *fSpectrumPreMirror; + TH1D *fSpectrumPostMirror; + + TH2D *fRadiatorRefIndex; + TProfile *fRadiatorRefIndexHits; + + TH2D *fPhotonXYCoord; + TH2D *fPhotonXYCoord15; + + TH2D *fRadiusVsWL; + TProfile *fRadiusVsWLProfile; + TH1D *fPhotonWidthProfile; + TProfile *fPhotonXYCoordProfile; + TProfile *fPhotonXYCoordProfileCut; + TH1D *fPhotonZAngle; + TH1D *fCherenkovAngle; + TH1D *fCherenkovAngleCut; + + TH2D *fGlobalHitXYCoordPeOrigin; + TH2D *fGlobalHitXYCoord; + TH2D *fGlobalHitXYCoord15; + TH2D *fGlobalPixelCenterXYCoord; + TH1D *fNumHitInEvent; + TH1D *fNumHitInEventCentralPMT; + TH1D *fNumHitInEventCentralPMTJura; + TH1D *fNumHitInEventCentralPMTSaleve; + + TH1D *fNumHitInPMT0; + TH1D *fNumHitInPMT1; + TH1D *fNumHitInPMT2; + TH1D *fNumHitInPMT3; + TH1D *fNumHitInPMT4; + TH1D *fNumHitInPMT5; + TH1D *fNumHitInPMT6; + TH1D *fNumHitInPMT7; + TH1D *fNumHitInPMT8; + TH1D *fNumHitInPMT9; + TH1D *fNumHitInPMT10; + TH1D *fNumHitInPMT11; + TH1D *fNumHitInPMT12; + TH1D *fNumHitInPMT13; + TH1D *fNumHitInPMT14; + TH1D *fNumHitInPMT15; + + TH1D *radiusInPMT0; + TH1D *radiusInPMT1; + TH1D *radiusInPMT2; + TH1D *radiusInPMT3; + TH1D *radiusInPMT4; + TH1D *radiusInPMT5; + TH1D *radiusInPMT6; + TH1D *radiusInPMT7; + TH1D *radiusInPMT8; + TH1D *radiusInPMT9; + TH1D *radiusInPMT10; + TH1D *radiusInPMT11; + TH1D *radiusInPMT12; + TH1D *radiusInPMT13; + TH1D *radiusInPMT14; + TH1D *radiusInPMT15; + + TProfile *fCkvRadiusVsEmisPtPhoton; + TH1D *fEmisPtPhoton; + TH1D *fEmisPtPrimaryTrackPhoton; + + G4double fNtupVar1; + G4double fNtupVar2; + + TH1D *fGeneratedCkvPhoton; + + TH2D *fTIRXYLocationPhoton; + TH2D *fXYRadiatorDnsPhoton; + TH2D *fXYRadiatorTIRDnsPhoton; + TH2D *fXYRadiatorRFRDnsPhoton; + + TH2D *fMIRXYLocationPhoton; + TH2D *fRFRXYLocationPhoton; + + TH1D *fNumHitInHPD0; + TH1D *fNumHitSignalInHPD0; + + TH2D *fRFRXYLocationPhotonHpd; + TH2D *fGlobalHitXYCoordPeOriginHpd; + TH2D *fGlobalHitXYCoordHpd; + TH2D *fGlobalPixelCenterXYCoordHpd; + + TH2D *fGlobalHitXYCoordPeOriginHpdPmt; + + TH2D *fGlobalHitXYCoordPixPhcathHpd; +}; #endif - - - - - - diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbBeamGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbBeamGeometryParameters.hh index 5e22742769833c73cba13c5d8994c72c3d905681..0c7219eeeff354e7aab7d5f544b646a429b44d9d 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbBeamGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbBeamGeometryParameters.hh @@ -1,14 +1,13 @@ // $Id: $ -#ifndef INCLUDE_RICHTBBEAMGEOMETRYPARAMETERS_HH +#ifndef INCLUDE_RICHTBBEAMGEOMETRYPARAMETERS_HH #define INCLUDE_RICHTBBEAMGEOMETRYPARAMETERS_HH 1 // Include files -const G4double RichTbNominalBeamXPos=0.0*CLHEP::mm; -const G4double RichTbNominalBeamYPos=0.0*CLHEP::mm; -const G4double RichTbNominalBeamZPos=-600.0*CLHEP::mm; -const G4double RichTbNominalBeamDirCosX=0.0; -const G4double RichTbNominalBeamDirCosY=0.0; -const G4double RichTbNominalBeamDirCosZ=1.0; - +const G4double RichTbNominalBeamXPos = 0.0 * CLHEP::mm; +const G4double RichTbNominalBeamYPos = 0.0 * CLHEP::mm; +const G4double RichTbNominalBeamZPos = -600.0 * CLHEP::mm; +const G4double RichTbNominalBeamDirCosX = 0.0; +const G4double RichTbNominalBeamDirCosY = 0.0; +const G4double RichTbNominalBeamDirCosZ = 1.0; #endif // INCLUDE_RICHTBBEAMGEOMETRYPARAMETERS_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbBeamProperty.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbBeamProperty.hh index 5dd0cb6c561b49d2c592a36b030381093f3afa59..f1c7f88d6ce9874aefafe4b813c31e48498b8078 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbBeamProperty.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbBeamProperty.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBBEAMPROPERTY_HH +#ifndef INCLUDE_RICHTBBEAMPROPERTY_HH #define INCLUDE_RICHTBBEAMPROPERTY_HH 1 // Include files @@ -8,89 +8,69 @@ #include "Geant4/G4ParticleDefinition.hh" /** @class RichTbBeamProperty RichTbBeamProperty.hh include/RichTbBeamProperty.hh - * + * * * @author Sajan EASO * @date 2004-01-22 */ class RichTbBeamProperty { -public: - - virtual ~RichTbBeamProperty( ); ///< Destructor - - static RichTbBeamProperty* getRichTbBeamPropertyInstance(); - - G4ThreeVector getBeamPosition() {return mBeamPosition;} - G4ThreeVector getBeamDirection() { return mBeamDirection;} - void setBeamPosition(G4ThreeVector aBeamPosition ) - {mBeamPosition= aBeamPosition;} - void setBeamDirection(G4ThreeVector aBeamDirection) - { mBeamDirection=aBeamDirection;} - - G4ThreeVector getNominalBeamPosition() - { return mNominalBeamPosition;} - - void setNominalBeamPosition(G4ThreeVector aNominalBeamPosition) - {mNominalBeamPosition = aNominalBeamPosition;} - - G4ThreeVector getNominalBeamDirectionCos() - { return mNominalBeamDirectionCos;} - void setNominalBeamDirectionCos(G4ThreeVector aDirCos) - {mNominalBeamDirectionCos= aDirCos;} - - void setBeamPartDef(G4ParticleDefinition* aBeamPartDef) - { mBeamPartDef= aBeamPartDef; } - - G4ParticleDefinition* getBeamPartDef(){ return mBeamPartDef;} - - G4String BeamPartName() { return mBeamPartName;} - void setBeamPartName(G4String aBname ){mBeamPartName=aBname; } - - G4ThreeVector getBeamPosUpstrAgel() - { return mBeamPosUpstrAgel;} - - void setBeamPosUpstrAgel( G4ThreeVector aBPosA ) - { mBeamPosUpstrAgel=aBPosA;} - - G4ThreeVector getBeamDirUpstrAgel() - { return mBeamDirUpstrAgel;} - void setBeamDirUpstrAgel(G4ThreeVector aBDirA) - { mBeamDirUpstrAgel= aBDirA;} - - G4ThreeVector getAgelNormal() - { return mAgelNormal;} - void setAgelNormal(G4ThreeVector aAgelNormal) - {mAgelNormal= aAgelNormal;} - - - G4ThreeVector getAgelBeamPostionLocal() - { return mAgelBeamPostionLocal;} - - void setAgelBeamPostionLocal(G4ThreeVector aPosLocal) - { mAgelBeamPostionLocal = aPosLocal;} - +public: + virtual ~RichTbBeamProperty(); ///< Destructor + + static RichTbBeamProperty *getRichTbBeamPropertyInstance(); + + G4ThreeVector getBeamPosition() { return mBeamPosition; } + G4ThreeVector getBeamDirection() { return mBeamDirection; } + void setBeamPosition(G4ThreeVector aBeamPosition) { mBeamPosition = aBeamPosition; } + void setBeamDirection(G4ThreeVector aBeamDirection) { mBeamDirection = aBeamDirection; } + + G4ThreeVector getNominalBeamPosition() { return mNominalBeamPosition; } + + void setNominalBeamPosition(G4ThreeVector aNominalBeamPosition) { mNominalBeamPosition = aNominalBeamPosition; } + + G4ThreeVector getNominalBeamDirectionCos() { return mNominalBeamDirectionCos; } + void setNominalBeamDirectionCos(G4ThreeVector aDirCos) { mNominalBeamDirectionCos = aDirCos; } + + void setBeamPartDef(G4ParticleDefinition *aBeamPartDef) { mBeamPartDef = aBeamPartDef; } + + G4ParticleDefinition *getBeamPartDef() { return mBeamPartDef; } + + G4String BeamPartName() { return mBeamPartName; } + void setBeamPartName(G4String aBname) { mBeamPartName = aBname; } + + G4ThreeVector getBeamPosUpstrAgel() { return mBeamPosUpstrAgel; } + + void setBeamPosUpstrAgel(G4ThreeVector aBPosA) { mBeamPosUpstrAgel = aBPosA; } + + G4ThreeVector getBeamDirUpstrAgel() { return mBeamDirUpstrAgel; } + void setBeamDirUpstrAgel(G4ThreeVector aBDirA) { mBeamDirUpstrAgel = aBDirA; } + + G4ThreeVector getAgelNormal() { return mAgelNormal; } + void setAgelNormal(G4ThreeVector aAgelNormal) { mAgelNormal = aAgelNormal; } + + G4ThreeVector getAgelBeamPostionLocal() { return mAgelBeamPostionLocal; } + + void setAgelBeamPostionLocal(G4ThreeVector aPosLocal) { mAgelBeamPostionLocal = aPosLocal; } + void ResetBeamProperty(); void PrintBeamProperty(); - -protected: +protected: private: /// Standard constructor - RichTbBeamProperty( ); + RichTbBeamProperty(); + + static RichTbBeamProperty *RichTbBeamPropertyInstance; - static RichTbBeamProperty* RichTbBeamPropertyInstance; - G4ThreeVector mBeamPosition; G4ThreeVector mBeamDirection; G4ThreeVector mNominalBeamPosition; G4ThreeVector mNominalBeamDirectionCos; - G4ParticleDefinition* mBeamPartDef; + G4ParticleDefinition *mBeamPartDef; G4String mBeamPartName; G4ThreeVector mBeamPosUpstrAgel; G4ThreeVector mBeamDirUpstrAgel; G4ThreeVector mAgelNormal; G4ThreeVector mAgelBeamPostionLocal; - - }; #endif // INCLUDE_RICHTBBEAMPROPERTY_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbCounter.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbCounter.hh index b7bdd7b044718c9556947dddf814e43964d9f17a..74a125be80a71f651ec250423cb0146322d69c10 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbCounter.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbCounter.hh @@ -13,270 +13,147 @@ */ class RichTbCounter { public: - static RichTbCounter* getRichTbCounterInstance(); - - void bumpnumHitTotProd() { - numHitTotProd ++;} - void bumpnumhitTotEv() - { numhitTotEv++; } - void bumpnumhitTotEvCentralPmt() - { numhitTotEvCentralPmt++;} - void bumpnumhitTotEvCentralPmtJura() - { numhitTotEvCentralPmtJura++;} - void bumpnumhitTotEvCentralPmtSaleve() - { numhitTotEvCentralPmtSaleve++;} - - - void bumpnumhitPMT0() - { numhitPMT0++; } - void bumpnumhitPMT1() - { numhitPMT1++; } - void bumpnumhitPMT2() - { numhitPMT2++; } - void bumpnumhitPMT3() - { numhitPMT3++; } - void bumpnumhitPMT4() - { numhitPMT4++; } - void bumpnumhitPMT5() - { numhitPMT5++; } - void bumpnumhitPMT6() - { numhitPMT6++; } - void bumpnumhitPMT7() - { numhitPMT7++; } - void bumpnumhitPMT8() - { numhitPMT8++; } - void bumpnumhitPMT9() - { numhitPMT9++; } - void bumpnumhitPMT10() - { numhitPMT10++; } - void bumpnumhitPMT11() - { numhitPMT11++; } - void bumpnumhitPMT12() - { numhitPMT12++; } - void bumpnumhitPMT13() - { numhitPMT13++; } - void bumpnumhitPMT14() - { numhitPMT14++; } - void bumpnumhitPMT15() - { numhitPMT15++; } - - - - void bumpnumPhEnterMirror() - { numPhEnterMirror++;} - void bumpnumPhEnterPhSupFrame() - { numPhEnterPhSupFrame++;} - void bumpnumExitGasQuWin() { numExitGasQuWin++;} - void bumpnumPhElecPMT0() - { numPhElecPMT0++;} - void bumpnumPhElecPMT1() - { numPhElecPMT1++;} - void bumpnumPhElecPMT2() - { numPhElecPMT2++;} - void bumpnumPhElecPMT3() - { numPhElecPMT3++;} - void bumpnumPhElecPMT4() - { numPhElecPMT4++;} - void bumpnumPhElecPMT5() - { numPhElecPMT5++;} - void bumpnumPhElecPMT6() - { numPhElecPMT6++;} - void bumpnumPhElecPMT7() - { numPhElecPMT7++;} - void bumpnumPhElecPMT8() - { numPhElecPMT8++;} - void bumpnumPhElecPMT9() - { numPhElecPMT9++;} - void bumpnumPhElecPMT10() - { numPhElecPMT10++;} - void bumpnumPhElecPMT11() - { numPhElecPMT11++;} - void bumpnumPhElecPMT12() - { numPhElecPMT12++;} - void bumpnumPhElecPMT13() - { numPhElecPMT13++;} - void bumpnumPhElecPMT14() - { numPhElecPMT14++;} - void bumpnumPhElecPMT15() - { numPhElecPMT15++;} - void bumpnumPhEnterPMT0QW() - {numPhEnterPMT0QW++;} - void bumpnumPhEnterPMT1QW() - {numPhEnterPMT1QW++;} - void bumpnumPhEnterPMT2QW() - {numPhEnterPMT2QW++;} - void bumpnumPhEnterPMT3QW() - {numPhEnterPMT3QW++;} - void bumpnumPhEnterPMT4QW() - {numPhEnterPMT4QW++;} - void bumpnumPhEnterPMT5QW() - {numPhEnterPMT5QW++;} - void bumpnumPhEnterPMT6QW() - {numPhEnterPMT6QW++;} - void bumpnumPhEnterPMT7QW() - {numPhEnterPMT7QW++;} - void bumpnumPhEnterPMT8QW() - {numPhEnterPMT8QW++;} - void bumpnumPhEnterPMT9QW() - {numPhEnterPMT9QW++;} - void bumpnumPhEnterPMT10QW() - {numPhEnterPMT10QW++;} - void bumpnumPhEnterPMT11QW() - {numPhEnterPMT11QW++;} - void bumpnumPhEnterPMT12QW() - {numPhEnterPMT12QW++;} - void bumpnumPhEnterPMT13QW() - {numPhEnterPMT13QW++;} - void bumpnumPhEnterPMT14QW() - {numPhEnterPMT14QW++;} - void bumpnumPhEnterPMT15QW() - {numPhEnterPMT15QW++;} - void bumpnumPhEnterAnPMTQW() - { numPhEnterAnPMTQW++; } - - void bumpnumHitTotHpd0() - { numHitTotHpd0++; } - - void bumpnumHitSignalHpd0(){numHitSignalHpd0++;} - - + static RichTbCounter *getRichTbCounterInstance(); + + void bumpnumHitTotProd() { numHitTotProd++; } + void bumpnumhitTotEv() { numhitTotEv++; } + void bumpnumhitTotEvCentralPmt() { numhitTotEvCentralPmt++; } + void bumpnumhitTotEvCentralPmtJura() { numhitTotEvCentralPmtJura++; } + void bumpnumhitTotEvCentralPmtSaleve() { numhitTotEvCentralPmtSaleve++; } + + void bumpnumhitPMT0() { numhitPMT0++; } + void bumpnumhitPMT1() { numhitPMT1++; } + void bumpnumhitPMT2() { numhitPMT2++; } + void bumpnumhitPMT3() { numhitPMT3++; } + void bumpnumhitPMT4() { numhitPMT4++; } + void bumpnumhitPMT5() { numhitPMT5++; } + void bumpnumhitPMT6() { numhitPMT6++; } + void bumpnumhitPMT7() { numhitPMT7++; } + void bumpnumhitPMT8() { numhitPMT8++; } + void bumpnumhitPMT9() { numhitPMT9++; } + void bumpnumhitPMT10() { numhitPMT10++; } + void bumpnumhitPMT11() { numhitPMT11++; } + void bumpnumhitPMT12() { numhitPMT12++; } + void bumpnumhitPMT13() { numhitPMT13++; } + void bumpnumhitPMT14() { numhitPMT14++; } + void bumpnumhitPMT15() { numhitPMT15++; } + + void bumpnumPhEnterMirror() { numPhEnterMirror++; } + void bumpnumPhEnterPhSupFrame() { numPhEnterPhSupFrame++; } + void bumpnumExitGasQuWin() { numExitGasQuWin++; } + void bumpnumPhElecPMT0() { numPhElecPMT0++; } + void bumpnumPhElecPMT1() { numPhElecPMT1++; } + void bumpnumPhElecPMT2() { numPhElecPMT2++; } + void bumpnumPhElecPMT3() { numPhElecPMT3++; } + void bumpnumPhElecPMT4() { numPhElecPMT4++; } + void bumpnumPhElecPMT5() { numPhElecPMT5++; } + void bumpnumPhElecPMT6() { numPhElecPMT6++; } + void bumpnumPhElecPMT7() { numPhElecPMT7++; } + void bumpnumPhElecPMT8() { numPhElecPMT8++; } + void bumpnumPhElecPMT9() { numPhElecPMT9++; } + void bumpnumPhElecPMT10() { numPhElecPMT10++; } + void bumpnumPhElecPMT11() { numPhElecPMT11++; } + void bumpnumPhElecPMT12() { numPhElecPMT12++; } + void bumpnumPhElecPMT13() { numPhElecPMT13++; } + void bumpnumPhElecPMT14() { numPhElecPMT14++; } + void bumpnumPhElecPMT15() { numPhElecPMT15++; } + void bumpnumPhEnterPMT0QW() { numPhEnterPMT0QW++; } + void bumpnumPhEnterPMT1QW() { numPhEnterPMT1QW++; } + void bumpnumPhEnterPMT2QW() { numPhEnterPMT2QW++; } + void bumpnumPhEnterPMT3QW() { numPhEnterPMT3QW++; } + void bumpnumPhEnterPMT4QW() { numPhEnterPMT4QW++; } + void bumpnumPhEnterPMT5QW() { numPhEnterPMT5QW++; } + void bumpnumPhEnterPMT6QW() { numPhEnterPMT6QW++; } + void bumpnumPhEnterPMT7QW() { numPhEnterPMT7QW++; } + void bumpnumPhEnterPMT8QW() { numPhEnterPMT8QW++; } + void bumpnumPhEnterPMT9QW() { numPhEnterPMT9QW++; } + void bumpnumPhEnterPMT10QW() { numPhEnterPMT10QW++; } + void bumpnumPhEnterPMT11QW() { numPhEnterPMT11QW++; } + void bumpnumPhEnterPMT12QW() { numPhEnterPMT12QW++; } + void bumpnumPhEnterPMT13QW() { numPhEnterPMT13QW++; } + void bumpnumPhEnterPMT14QW() { numPhEnterPMT14QW++; } + void bumpnumPhEnterPMT15QW() { numPhEnterPMT15QW++; } + void bumpnumPhEnterAnPMTQW() { numPhEnterAnPMTQW++; } + + void bumpnumHitTotHpd0() { numHitTotHpd0++; } + + void bumpnumHitSignalHpd0() { numHitSignalHpd0++; } void resetRichTbCounter(); - G4int getnumHitTotProd() {return numHitTotProd;} - G4int getnumhitTotEv() - { return numhitTotEv; } - - G4int getnumhitTotEvCentralPmt() - { return numhitTotEvCentralPmt;} - - G4int getnumhitTotEvCentralPmtJura() - { return numhitTotEvCentralPmtJura;} - G4int getnumhitTotEvCentralPmtSaleve() - { return numhitTotEvCentralPmtSaleve;} - - G4int getnumhitPMT0() - { return numhitPMT0;} - G4int getnumhitPMT1() - { return numhitPMT1;} - G4int getnumhitPMT2() - { return numhitPMT2;} - G4int getnumhitPMT3() - { return numhitPMT3;} - G4int getnumhitPMT4() - { return numhitPMT4;} - G4int getnumhitPMT5() - { return numhitPMT5;} - G4int getnumhitPMT6() - { return numhitPMT6;} - G4int getnumhitPMT7() - { return numhitPMT7;} - G4int getnumhitPMT8() - { return numhitPMT8;} - G4int getnumhitPMT9() - { return numhitPMT9;} - G4int getnumhitPMT10() - { return numhitPMT10;} - G4int getnumhitPMT11() - { return numhitPMT11;} - G4int getnumhitPMT12() - { return numhitPMT12;} - G4int getnumhitPMT13() - { return numhitPMT13;} - G4int getnumhitPMT14() - { return numhitPMT14;} - G4int getnumhitPMT15() - { return numhitPMT15;} - G4int getnumPhEnterMirror() - { return numPhEnterMirror;} - G4int getnumPhEnterPhSupFrame() - { return numPhEnterPhSupFrame;} - G4int getnumExitGasQuWin() {return numExitGasQuWin;} - - G4int getnumPhElecPMT0() - { return numPhElecPMT0;} - G4int getnumPhElecPMT1() - { return numPhElecPMT1;} - G4int getnumPhElecPMT2() - { return numPhElecPMT2;} - G4int getnumPhElecPMT3() - { return numPhElecPMT3;} - G4int getnumPhElecPMT4() - { return numPhElecPMT4;} - G4int getnumPhElecPMT5() - { return numPhElecPMT5;} - G4int getnumPhElecPMT6() - { return numPhElecPMT6;} - G4int getnumPhElecPMT7() - { return numPhElecPMT7;} - G4int getnumPhElecPMT8() - { return numPhElecPMT8;} - G4int getnumPhElecPMT9() - { return numPhElecPMT9;} - G4int getnumPhElecPMT10() - { return numPhElecPMT10;} - G4int getnumPhElecPMT11() - { return numPhElecPMT11;} - G4int getnumPhElecPMT12() - { return numPhElecPMT12;} - G4int getnumPhElecPMT13() - { return numPhElecPMT13;} - G4int getnumPhElecPMT14() - { return numPhElecPMT14;} - G4int getnumPhElecPMT15() - { return numPhElecPMT15;} - - - - G4int getnumPhEnterPMT0QW() - { return numPhEnterPMT0QW;} - G4int getnumPhEnterPMT1QW() - { return numPhEnterPMT1QW;} - G4int getnumPhEnterPMT2QW() - { return numPhEnterPMT2QW;} - G4int getnumPhEnterPMT3QW() - { return numPhEnterPMT3QW;} - G4int getnumPhEnterPMT4QW() - { return numPhEnterPMT4QW;} - G4int getnumPhEnterPMT5QW() - { return numPhEnterPMT5QW;} - G4int getnumPhEnterPMT6QW() - { return numPhEnterPMT6QW;} - G4int getnumPhEnterPMT7QW() - { return numPhEnterPMT7QW;} - G4int getnumPhEnterPMT8QW() - { return numPhEnterPMT8QW;} - G4int getnumPhEnterPMT9QW() - { return numPhEnterPMT9QW;} - G4int getnumPhEnterPMT10QW() - { return numPhEnterPMT10QW;} - G4int getnumPhEnterPMT11QW() - { return numPhEnterPMT11QW;} - G4int getnumPhEnterPMT12QW() - { return numPhEnterPMT12QW;} - G4int getnumPhEnterPMT13QW() - { return numPhEnterPMT13QW;} - G4int getnumPhEnterPMT14QW() - { return numPhEnterPMT14QW;} - G4int getnumPhEnterPMT15QW() - { return numPhEnterPMT15QW;} - - - G4int getnumPhEnterAnPMTQW() - { return numPhEnterAnPMTQW;} - - G4int getnumHitTotHpd0() { return numHitTotHpd0;} - G4int getnumHitSignalHpd0() { return numHitSignalHpd0;} - - - virtual ~RichTbCounter( ); ///< Destructor + G4int getnumHitTotProd() { return numHitTotProd; } + G4int getnumhitTotEv() { return numhitTotEv; } + + G4int getnumhitTotEvCentralPmt() { return numhitTotEvCentralPmt; } + + G4int getnumhitTotEvCentralPmtJura() { return numhitTotEvCentralPmtJura; } + G4int getnumhitTotEvCentralPmtSaleve() { return numhitTotEvCentralPmtSaleve; } + + G4int getnumhitPMT0() { return numhitPMT0; } + G4int getnumhitPMT1() { return numhitPMT1; } + G4int getnumhitPMT2() { return numhitPMT2; } + G4int getnumhitPMT3() { return numhitPMT3; } + G4int getnumhitPMT4() { return numhitPMT4; } + G4int getnumhitPMT5() { return numhitPMT5; } + G4int getnumhitPMT6() { return numhitPMT6; } + G4int getnumhitPMT7() { return numhitPMT7; } + G4int getnumhitPMT8() { return numhitPMT8; } + G4int getnumhitPMT9() { return numhitPMT9; } + G4int getnumhitPMT10() { return numhitPMT10; } + G4int getnumhitPMT11() { return numhitPMT11; } + G4int getnumhitPMT12() { return numhitPMT12; } + G4int getnumhitPMT13() { return numhitPMT13; } + G4int getnumhitPMT14() { return numhitPMT14; } + G4int getnumhitPMT15() { return numhitPMT15; } + G4int getnumPhEnterMirror() { return numPhEnterMirror; } + G4int getnumPhEnterPhSupFrame() { return numPhEnterPhSupFrame; } + G4int getnumExitGasQuWin() { return numExitGasQuWin; } + + G4int getnumPhElecPMT0() { return numPhElecPMT0; } + G4int getnumPhElecPMT1() { return numPhElecPMT1; } + G4int getnumPhElecPMT2() { return numPhElecPMT2; } + G4int getnumPhElecPMT3() { return numPhElecPMT3; } + G4int getnumPhElecPMT4() { return numPhElecPMT4; } + G4int getnumPhElecPMT5() { return numPhElecPMT5; } + G4int getnumPhElecPMT6() { return numPhElecPMT6; } + G4int getnumPhElecPMT7() { return numPhElecPMT7; } + G4int getnumPhElecPMT8() { return numPhElecPMT8; } + G4int getnumPhElecPMT9() { return numPhElecPMT9; } + G4int getnumPhElecPMT10() { return numPhElecPMT10; } + G4int getnumPhElecPMT11() { return numPhElecPMT11; } + G4int getnumPhElecPMT12() { return numPhElecPMT12; } + G4int getnumPhElecPMT13() { return numPhElecPMT13; } + G4int getnumPhElecPMT14() { return numPhElecPMT14; } + G4int getnumPhElecPMT15() { return numPhElecPMT15; } + + G4int getnumPhEnterPMT0QW() { return numPhEnterPMT0QW; } + G4int getnumPhEnterPMT1QW() { return numPhEnterPMT1QW; } + G4int getnumPhEnterPMT2QW() { return numPhEnterPMT2QW; } + G4int getnumPhEnterPMT3QW() { return numPhEnterPMT3QW; } + G4int getnumPhEnterPMT4QW() { return numPhEnterPMT4QW; } + G4int getnumPhEnterPMT5QW() { return numPhEnterPMT5QW; } + G4int getnumPhEnterPMT6QW() { return numPhEnterPMT6QW; } + G4int getnumPhEnterPMT7QW() { return numPhEnterPMT7QW; } + G4int getnumPhEnterPMT8QW() { return numPhEnterPMT8QW; } + G4int getnumPhEnterPMT9QW() { return numPhEnterPMT9QW; } + G4int getnumPhEnterPMT10QW() { return numPhEnterPMT10QW; } + G4int getnumPhEnterPMT11QW() { return numPhEnterPMT11QW; } + G4int getnumPhEnterPMT12QW() { return numPhEnterPMT12QW; } + G4int getnumPhEnterPMT13QW() { return numPhEnterPMT13QW; } + G4int getnumPhEnterPMT14QW() { return numPhEnterPMT14QW; } + G4int getnumPhEnterPMT15QW() { return numPhEnterPMT15QW; } + + G4int getnumPhEnterAnPMTQW() { return numPhEnterAnPMTQW; } + + G4int getnumHitTotHpd0() { return numHitTotHpd0; } + G4int getnumHitSignalHpd0() { return numHitSignalHpd0; } + + virtual ~RichTbCounter(); ///< Destructor protected: - private: - /// Standard constructor - RichTbCounter( ); - static RichTbCounter* RichTbCounterInstance; + RichTbCounter(); + static RichTbCounter *RichTbCounterInstance; G4int numHitTotProd; G4int numhitTotEv; @@ -284,7 +161,6 @@ private: G4int numhitTotEvCentralPmtJura; G4int numhitTotEvCentralPmtSaleve; - G4int numhitPMT0; G4int numhitPMT1; G4int numhitPMT2; @@ -339,10 +215,7 @@ private: G4int numPhElecPMT14; G4int numPhElecPMT15; - - G4int numHitTotHpd0; G4int numHitSignalHpd0; - }; #endif // INCLUDE_RICHTBCOUNTER_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbCrystalCoverGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbCrystalCoverGeometryParameters.hh index d186f6c2720e25ef141fba8642d2a0e9a58e6aa6..49808e297645d637a85875eaf43774d496e920e3 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbCrystalCoverGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbCrystalCoverGeometryParameters.hh @@ -1,54 +1,55 @@ // $Id: $ -#ifndef INCLUDE_RICHTBCRYSTALCOVERGEOMETRYPARAMETERS_HH +#ifndef INCLUDE_RICHTBCRYSTALCOVERGEOMETRYPARAMETERS_HH #define INCLUDE_RICHTBCRYSTALCOVERGEOMETRYPARAMETERS_HH 1 // Include files /** @class RichTbVesselGeometryParameters RichTbVesselGeometryParameters.hh include/RichTbVesselGeometryParameters.hh - * + * * * @author Sajan EASO * @date 2003-10-21 */ // first for the overall vessel. -const G4double RichTbCrystalCoverXSize=100.0*CLHEP::mm + 6.0*CLHEP::mm; -const G4double RichTbCrystalCoverYSize=100.0*CLHEP::mm + 6.0*CLHEP::mm; -const G4double RichTbCrystalCoverZSize=7.6*CLHEP::mm + 3.0*CLHEP::mm; +const G4double RichTbCrystalCoverXSize = 100.0 * CLHEP::mm + 6.0 * CLHEP::mm; +const G4double RichTbCrystalCoverYSize = 100.0 * CLHEP::mm + 6.0 * CLHEP::mm; +const G4double RichTbCrystalCoverZSize = 7.6 * CLHEP::mm + 3.0 * CLHEP::mm; -const G4double RichTbCrystalCoverOriginShiftFromLeftEdgeX=0.0*CLHEP::mm; -const G4double RichTbCrystalCoverOriginShiftFromFloorY=0.0*CLHEP::mm; -const G4double RichTbCrystalCoverOriginShiftFromLeftZ=0.0*CLHEP::mm; +const G4double RichTbCrystalCoverOriginShiftFromLeftEdgeX = 0.0 * CLHEP::mm; +const G4double RichTbCrystalCoverOriginShiftFromFloorY = 0.0 * CLHEP::mm; +const G4double RichTbCrystalCoverOriginShiftFromLeftZ = 0.0 * CLHEP::mm; -const G4double RichTbCrystalCoverSubPartXSize=100.0*CLHEP::mm; -const G4double RichTbCrystalCoverSubPartYSize=100.0*CLHEP::mm; -const G4double RichTbCrystalCoverSubPartZSize=100.0*CLHEP::mm; +const G4double RichTbCrystalCoverSubPartXSize = 100.0 * CLHEP::mm; +const G4double RichTbCrystalCoverSubPartYSize = 100.0 * CLHEP::mm; +const G4double RichTbCrystalCoverSubPartZSize = 100.0 * CLHEP::mm; -const G4double RichTbCrystalCoverYLocation = - RichTbCrystalCoverOriginShiftFromFloorY; +const G4double RichTbCrystalCoverYLocation = -RichTbCrystalCoverOriginShiftFromFloorY; const G4double RichTbCrystalCoverXShiftAlongCrystal = RichTbCrystalCoverOriginShiftFromLeftEdgeX; const G4double RichTbCrystalCoverZShiftAlongCrystal = -RichTbCrystalCoverOriginShiftFromLeftZ; const G4double RichTbCrystalCoverXLocation = RichTbCrystalCoverXShiftAlongCrystal; -const G4double RichTbCrystalCoverZLocation = -1.5*CLHEP::mm; +const G4double RichTbCrystalCoverZLocation = -1.5 * CLHEP::mm; -const G4double RichTbCrystalCoverSubPartXLocation = 0.0*CLHEP::mm; -const G4double RichTbCrystalCoverSubPartYLocation = 0.0*CLHEP::mm; -const G4double RichTbCrystalCoverSubPartZLocation =0.5 * (RichTbCrystalCoverSubPartZSize - RichTbCrystalCoverZSize) + 2.5*CLHEP::mm; +const G4double RichTbCrystalCoverSubPartXLocation = 0.0 * CLHEP::mm; +const G4double RichTbCrystalCoverSubPartYLocation = 0.0 * CLHEP::mm; +const G4double RichTbCrystalCoverSubPartZLocation = + 0.5 * (RichTbCrystalCoverSubPartZSize - RichTbCrystalCoverZSize) + 2.5 * CLHEP::mm; // now for variables used after creating the geometry in stepaction. -const G4double RichTbCrystalCoverEnvPlateThickness=0.0*CLHEP::mm; +const G4double RichTbCrystalCoverEnvPlateThickness = 0.0 * CLHEP::mm; // the following are not exact values. -//const G4double RichTbCrystalXNegExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX-RichTbCrystalXSize; -//const G4double RichTbCrystalXPosExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX; -//const G4double RichTbCrystalZUpsExtremeAlongCrystal= -RichTbCrystalUpsExternalPartZSize; -//const G4double RichTbCrystalZDnsExtremeAlongCrystal= -RichTbcrystalUpsExternalPartZSize+RichTbCrystalZSize; -//const G4double RichTbCrystalXNegExtreme= RichTbCrystalXNegExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ +// const G4double RichTbCrystalXNegExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX-RichTbCrystalXSize; +// const G4double RichTbCrystalXPosExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX; +// const G4double RichTbCrystalZUpsExtremeAlongCrystal= -RichTbCrystalUpsExternalPartZSize; +// const G4double RichTbCrystalZDnsExtremeAlongCrystal= -RichTbcrystalUpsExternalPartZSize+RichTbCrystalZSize; +// const G4double RichTbCrystalXNegExtreme= RichTbCrystalXNegExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ // RichTbCrystalZDnsExtremeAlongCrystal*sin(RichTbCrystalYRotation); -//const G4double RichTbCrystalXPosExtreme= RichTbCrystalXPosExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ +// const G4double RichTbCrystalXPosExtreme= RichTbCrystalXPosExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ // RichTbCrystalZUpsExtremeAlongCrystal*sin(RichTbCrystalYRotation); -//const G4double RichTbCrystalYNegExtreme= RichTbCrystalYLocation-0.5*RichTbCrystalYSize; -//const G4double RichTbCrystalYPosExtreme= RichTbCrystalYLocation+0.5*RichTbCrystalYSize; -//const G4double RichTbCrystalZDnsExtreme = -RichTbCrystalXNegExtremeAlongCrystal*sin(RichTbCrystalYRotation)+ +// const G4double RichTbCrystalYNegExtreme= RichTbCrystalYLocation-0.5*RichTbCrystalYSize; +// const G4double RichTbCrystalYPosExtreme= RichTbCrystalYLocation+0.5*RichTbCrystalYSize; +// const G4double RichTbCrystalZDnsExtreme = -RichTbCrystalXNegExtremeAlongCrystal*sin(RichTbCrystalYRotation)+ // RichTbCrystalZDnsExtremeAlongCrystal*cos(RichTbCrystalYRotation); -//const G4double RichTbCrystalDnsZEnd = RichTbCrystalZDnsExtreme; +// const G4double RichTbCrystalDnsZEnd = RichTbCrystalZDnsExtreme; #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbCrystalGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbCrystalGeometryParameters.hh index 24868c44e2e86ca63865c91f279f3575b02bc61a..545baf55003e2e5aec22bf507c1f6616808bba7c 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbCrystalGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbCrystalGeometryParameters.hh @@ -1,49 +1,49 @@ // $Id: $ -#ifndef INCLUDE_RICHTBCRYSTALGEOMETRYPARAMETERS_HH +#ifndef INCLUDE_RICHTBCRYSTALGEOMETRYPARAMETERS_HH #define INCLUDE_RICHTBCRYSTALGEOMETRYPARAMETERS_HH 1 // Include files /** @class RichTbVesselGeometryParameters RichTbVesselGeometryParameters.hh include/RichTbVesselGeometryParameters.hh - * + * * * @author Sajan EASO * @date 2003-10-21 */ -const G4double RichTbCrystalXSize=100.0*CLHEP::mm; -const G4double RichTbCrystalYSize=100.0*CLHEP::mm; -const G4double RichTbCrystalZSize=10.0*CLHEP::mm; +const G4double RichTbCrystalXSize = 100.0 * CLHEP::mm; +const G4double RichTbCrystalYSize = 100.0 * CLHEP::mm; +const G4double RichTbCrystalZSize = 10.0 * CLHEP::mm; -//const G4double RichTbCrystalOriginShiftFromLeftEdgeX=0.0*CLHEP::mm; // for now assume middle part. to be verified. -//const G4double RichTbCrystalOriginShiftFromFloorY=0.0*CLHEP::mm; -//const G4double RichTbCrystalOriginShiftFromLeftZ=0.0*CLHEP::mm; -//G4double CrystalXRotation = appoConfig ->getSpecialStudyCrystalRotationX(); -//const G4double RichTbCrystalXRotation=CrystalXRotation*rad; -//G4double CrystalYRotation = appoConfig ->getSpecialStudyCrystalRotationY(); -//const G4double RichTbCrystalYRotation=CrystalYRotation*rad; +// const G4double RichTbCrystalOriginShiftFromLeftEdgeX=0.0*CLHEP::mm; // for now assume middle part. to be verified. +// const G4double RichTbCrystalOriginShiftFromFloorY=0.0*CLHEP::mm; +// const G4double RichTbCrystalOriginShiftFromLeftZ=0.0*CLHEP::mm; +// G4double CrystalXRotation = appoConfig ->getSpecialStudyCrystalRotationX(); +// const G4double RichTbCrystalXRotation=CrystalXRotation*rad; +// G4double CrystalYRotation = appoConfig ->getSpecialStudyCrystalRotationY(); +// const G4double RichTbCrystalYRotation=CrystalYRotation*rad; const G4double RichTbCrystalYLocation = 0.0; -//const G4double RichTbCrystalXShiftAlongCrystal = RichTbCrystalOriginShiftFromLeftEdgeX; -//const G4double RichTbCrystalZShiftAlongCrystal = -RichTbCrystalOriginShiftFromLeftZ; +// const G4double RichTbCrystalXShiftAlongCrystal = RichTbCrystalOriginShiftFromLeftEdgeX; +// const G4double RichTbCrystalZShiftAlongCrystal = -RichTbCrystalOriginShiftFromLeftZ; const G4double RichTbCrystalXLocation = 0.0; -const G4double RichTbCrystalZLocation = 0.0*CLHEP::mm; +const G4double RichTbCrystalZLocation = 0.0 * CLHEP::mm; // now for variables used after creating the geometry in stepaction. -const G4double RichTbCrystalEnvPlateThickness=0.0*CLHEP::mm; +const G4double RichTbCrystalEnvPlateThickness = 0.0 * CLHEP::mm; // the following are not exact values. -//const G4double RichTbCrystalXNegExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX-RichTbCrystalXSize; -//const G4double RichTbCrystalXPosExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX; -//const G4double RichTbCrystalZUpsExtremeAlongCrystal= -RichTbCrystalUpsExternalPartZSize; -//const G4double RichTbCrystalZDnsExtremeAlongCrystal= -RichTbcrystalUpsExternalPartZSize+RichTbCrystalZSize; -//const G4double RichTbCrystalXNegExtreme= RichTbCrystalXNegExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ +// const G4double RichTbCrystalXNegExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX-RichTbCrystalXSize; +// const G4double RichTbCrystalXPosExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX; +// const G4double RichTbCrystalZUpsExtremeAlongCrystal= -RichTbCrystalUpsExternalPartZSize; +// const G4double RichTbCrystalZDnsExtremeAlongCrystal= -RichTbcrystalUpsExternalPartZSize+RichTbCrystalZSize; +// const G4double RichTbCrystalXNegExtreme= RichTbCrystalXNegExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ // RichTbCrystalZDnsExtremeAlongCrystal*sin(RichTbCrystalYRotation); -//const G4double RichTbCrystalXPosExtreme= RichTbCrystalXPosExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ +// const G4double RichTbCrystalXPosExtreme= RichTbCrystalXPosExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ // RichTbCrystalZUpsExtremeAlongCrystal*sin(RichTbCrystalYRotation); -//const G4double RichTbCrystalYNegExtreme= RichTbCrystalYLocation-0.5*RichTbCrystalYSize; -//const G4double RichTbCrystalYPosExtreme= RichTbCrystalYLocation+0.5*RichTbCrystalYSize; -//const G4double RichTbCrystalZDnsExtreme = -RichTbCrystalXNegExtremeAlongCrystal*sin(RichTbCrystalYRotation)+ +// const G4double RichTbCrystalYNegExtreme= RichTbCrystalYLocation-0.5*RichTbCrystalYSize; +// const G4double RichTbCrystalYPosExtreme= RichTbCrystalYLocation+0.5*RichTbCrystalYSize; +// const G4double RichTbCrystalZDnsExtreme = -RichTbCrystalXNegExtremeAlongCrystal*sin(RichTbCrystalYRotation)+ // RichTbCrystalZDnsExtremeAlongCrystal*cos(RichTbCrystalYRotation); -//const G4double RichTbCrystalDnsZEnd = RichTbCrystalZDnsExtreme; +// const G4double RichTbCrystalDnsZEnd = RichTbCrystalZDnsExtreme; #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbCrystalMasterGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbCrystalMasterGeometryParameters.hh index 208acbff00121dac5f3940e4d3667e9f61e1f764..62a78be3b6fb7a81ead4b124a02f4dccde654277 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbCrystalMasterGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbCrystalMasterGeometryParameters.hh @@ -1,54 +1,50 @@ // $Id: $ -#ifndef INCLUDE_RICHTBCRYSTALMASTERGEOMETRYPARAMETERS_HH +#ifndef INCLUDE_RICHTBCRYSTALMASTERGEOMETRYPARAMETERS_HH #define INCLUDE_RICHTBCRYSTALMASTERGEOMETRYPARAMETERS_HH 1 // Include files /** @class RichTbVesselGeometryParameters RichTbVesselGeometryParameters.hh include/RichTbVesselGeometryParameters.hh - * + * * * @author Sajan EASO * @date 2003-10-21 */ -const G4double RichTbCrystalMasterXSize=400.0*CLHEP::mm; -const G4double RichTbCrystalMasterYSize=600.0*CLHEP::mm; -const G4double RichTbCrystalMasterZSize=1500.0*CLHEP::mm; - -//const G4double RichTbCrystalMasterOriginShiftFromLeftEdgeX=0.0*CLHEP::mm; // for now assume middle part. to be verified. -//const G4double RichTbCrystalMasterOriginShiftFromFloorY=0.0*CLHEP::mm; -//const G4double RichTbCrystalMasterOriginShiftFromLeftZ=300.0*CLHEP::mm; -//G4double CrystalXRotation = appoConfig ->getSpecialStudyCrystalRotationX(); -//const G4double RichTbCrystalXRotation=CrystalXRotation*rad; -//G4double CrystalYRotation = appoConfig ->getSpecialStudyCrystalRotationY(); -//const G4double RichTbCrystalYRotation=CrystalYRotation*rad; +const G4double RichTbCrystalMasterXSize = 400.0 * CLHEP::mm; +const G4double RichTbCrystalMasterYSize = 600.0 * CLHEP::mm; +const G4double RichTbCrystalMasterZSize = 1500.0 * CLHEP::mm; + +// const G4double RichTbCrystalMasterOriginShiftFromLeftEdgeX=0.0*CLHEP::mm; // for now assume middle part. to be +// verified. const G4double RichTbCrystalMasterOriginShiftFromFloorY=0.0*CLHEP::mm; const G4double +// RichTbCrystalMasterOriginShiftFromLeftZ=300.0*CLHEP::mm; G4double CrystalXRotation = appoConfig +// ->getSpecialStudyCrystalRotationX(); const G4double RichTbCrystalXRotation=CrystalXRotation*rad; G4double +// CrystalYRotation = appoConfig ->getSpecialStudyCrystalRotationY(); const G4double +// RichTbCrystalYRotation=CrystalYRotation*rad; const G4double RichTbCrystalMasterYLocation = 0.0; -//const G4double RichTbCrystalMasterXShiftAlongCrystal = RichTbCrystalMasterOriginShiftFromLeftEdgeX; -//const G4double RichTbCrystalMasterZShiftAlongCrystal = -RichTbCrystalMasterOriginShiftFromLeftZ + 0.5 * RichTbCrystalMasterZSize; +// const G4double RichTbCrystalMasterXShiftAlongCrystal = RichTbCrystalMasterOriginShiftFromLeftEdgeX; +// const G4double RichTbCrystalMasterZShiftAlongCrystal = -RichTbCrystalMasterOriginShiftFromLeftZ + 0.5 * +// RichTbCrystalMasterZSize; const G4double RichTbCrystalMasterXLocation = 0.0; -const G4double RichTbCrystalMasterZLocation = -250*CLHEP::mm ; +const G4double RichTbCrystalMasterZLocation = -250 * CLHEP::mm; // now for variables used after creating the geometry in stepaction. -const G4double RichTbCrystalMasterEnvPlateThickness=0.0*CLHEP::mm; - - - - +const G4double RichTbCrystalMasterEnvPlateThickness = 0.0 * CLHEP::mm; // the following are not exact values. -//const G4double RichTbCrystalXNegExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX-RichTbCrystalXSize; -//const G4double RichTbCrystalXPosExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX; -//const G4double RichTbCrystalZUpsExtremeAlongCrystal= -RichTbCrystalUpsExternalPartZSize; -//const G4double RichTbCrystalZDnsExtremeAlongCrystal= -RichTbcrystalUpsExternalPartZSize+RichTbCrystalZSize; -//const G4double RichTbCrystalXNegExtreme= RichTbCrystalXNegExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ +// const G4double RichTbCrystalXNegExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX-RichTbCrystalXSize; +// const G4double RichTbCrystalXPosExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX; +// const G4double RichTbCrystalZUpsExtremeAlongCrystal= -RichTbCrystalUpsExternalPartZSize; +// const G4double RichTbCrystalZDnsExtremeAlongCrystal= -RichTbcrystalUpsExternalPartZSize+RichTbCrystalZSize; +// const G4double RichTbCrystalXNegExtreme= RichTbCrystalXNegExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ // RichTbCrystalZDnsExtremeAlongCrystal*sin(RichTbCrystalYRotation); -//const G4double RichTbCrystalXPosExtreme= RichTbCrystalXPosExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ +// const G4double RichTbCrystalXPosExtreme= RichTbCrystalXPosExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ // RichTbCrystalZUpsExtremeAlongCrystal*sin(RichTbCrystalYRotation); -//const G4double RichTbCrystalYNegExtreme= RichTbCrystalYLocation-0.5*RichTbCrystalYSize; -//const G4double RichTbCrystalYPosExtreme= RichTbCrystalYLocation+0.5*RichTbCrystalYSize; -//const G4double RichTbCrystalZDnsExtreme = -RichTbCrystalXNegExtremeAlongCrystal*sin(RichTbCrystalYRotation)+ +// const G4double RichTbCrystalYNegExtreme= RichTbCrystalYLocation-0.5*RichTbCrystalYSize; +// const G4double RichTbCrystalYPosExtreme= RichTbCrystalYLocation+0.5*RichTbCrystalYSize; +// const G4double RichTbCrystalZDnsExtreme = -RichTbCrystalXNegExtremeAlongCrystal*sin(RichTbCrystalYRotation)+ // RichTbCrystalZDnsExtremeAlongCrystal*cos(RichTbCrystalYRotation); -//const G4double RichTbCrystalDnsZEnd = RichTbCrystalZDnsExtreme; +// const G4double RichTbCrystalDnsZEnd = RichTbCrystalZDnsExtreme; #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbDarkCoverGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbDarkCoverGeometryParameters.hh index 04a4462c2e984153a00b05d8fc184ac3006200fe..69e9607835f4a6ed71a954ef1148b97af9bacf90 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbDarkCoverGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbDarkCoverGeometryParameters.hh @@ -10,80 +10,74 @@ * @date 2003-10-21 */ -const G4double RichTbUpgradeDarkCoverXSize=17.0*2.0*CLHEP::mm; - -//const G4double RichTbUpgradeDarkCoverXSize=(27.0*CLHEP::mm - 10*CLHEP::mm)*2*0.9; -const G4double RichTbUpgradeDarkCoverYSize=70.0*CLHEP::mm; -//const G4double RichTbUpgradeDarkCoverZSize=1.0*CLHEP::mm; -const G4double RichTbUpgradeDarkCoverZSize=2.0*CLHEP::mm; +const G4double RichTbUpgradeDarkCoverXSize = 17.0 * 2.0 * CLHEP::mm; +// const G4double RichTbUpgradeDarkCoverXSize=(27.0*CLHEP::mm - 10*CLHEP::mm)*2*0.9; +const G4double RichTbUpgradeDarkCoverYSize = 70.0 * CLHEP::mm; +// const G4double RichTbUpgradeDarkCoverZSize=1.0*CLHEP::mm; +const G4double RichTbUpgradeDarkCoverZSize = 2.0 * CLHEP::mm; const G4double RichTbUpgradeDarkCoverYLocation = 0.0; const G4double RichTbUpgradeDarkCoverXLocation = 0.0; -//const G4double RichTbUpgradeDarkCoverZLocation =138.4*CLHEP::mm - 26.5*CLHEP::mm + 1*CLHEP::mm; - -//const G4double RichTbUpgradeDarkCoverZLocation =-SphereRadius + RadiatorLensThickness + 1*CLHEP::mm; - -const G4double RichTbUpgradeDarkCoverZLocation =-SphereRadius + RadiatorLensThickness + - 0.5* RichTbUpgradeDarkCoverZSize; +// const G4double RichTbUpgradeDarkCoverZLocation =138.4*CLHEP::mm - 26.5*CLHEP::mm + 1*CLHEP::mm; +// const G4double RichTbUpgradeDarkCoverZLocation =-SphereRadius + RadiatorLensThickness + 1*CLHEP::mm; +const G4double RichTbUpgradeDarkCoverZLocation = + -SphereRadius + RadiatorLensThickness + 0.5 * RichTbUpgradeDarkCoverZSize; -const G4double RichTbUpgradeDarkCoverEnvPlateThickness=0.0*CLHEP::mm; - +const G4double RichTbUpgradeDarkCoverEnvPlateThickness = 0.0 * CLHEP::mm; // now for the darkcover upstream side -const G4double RichTbDarkUpsInnerRadius = MirrorOuterRadius + 2.0*CLHEP::mm; -const G4double RichTbDarkUpsOuterRadius = RichTbDarkUpsInnerRadius + 3.0*CLHEP::mm; +const G4double RichTbDarkUpsInnerRadius = MirrorOuterRadius + 2.0 * CLHEP::mm; +const G4double RichTbDarkUpsOuterRadius = RichTbDarkUpsInnerRadius + 3.0 * CLHEP::mm; // now for the dark cover on the two sides of the radiator -const G4double RichTbRadiatorC2S= SphereRadius - RadiatorLensThickness; -const G4double RichTbRadiatorLateralHalfSize = std::sqrt(SphereRadius*SphereRadius - RichTbRadiatorC2S*RichTbRadiatorC2S); - -//const G4double RichTbDarkSideZSize = RadiatorLensThickness+6.0*CLHEP::mm; -const G4double RichTbDarkSideZSize = RadiatorLensThickness+25.0*CLHEP::mm; -const G4double RichTbDarkSideXSize = 2.0*RichTbRadiatorLateralHalfSize; -const G4double RichTbDarkSideYSize=3.0*CLHEP::mm; - - -const G4double RichTbDarkSideYTopLocation = MirrorSubBoxShiftY+2.0*CLHEP::mm; -const G4double RichTbDarkSideYBotLocation = -1.0*(MirrorSubBoxShiftY+2.0*CLHEP::mm); -const G4double RichTbDarkSideZLocation = 0.5*RichTbDarkSideZSize; -const G4double RichTbDarkSideXLocation =0.0*CLHEP::mm; - - -//testbeam 2015 upgrade -const G4double RichTbUpgradeDarkCoverXSize15 = 17.0*2.0*CLHEP::mm; +const G4double RichTbRadiatorC2S = SphereRadius - RadiatorLensThickness; +const G4double RichTbRadiatorLateralHalfSize = + std::sqrt(SphereRadius * SphereRadius - RichTbRadiatorC2S * RichTbRadiatorC2S); + +// const G4double RichTbDarkSideZSize = RadiatorLensThickness+6.0*CLHEP::mm; +const G4double RichTbDarkSideZSize = RadiatorLensThickness + 25.0 * CLHEP::mm; +const G4double RichTbDarkSideXSize = 2.0 * RichTbRadiatorLateralHalfSize; +const G4double RichTbDarkSideYSize = 3.0 * CLHEP::mm; + +const G4double RichTbDarkSideYTopLocation = MirrorSubBoxShiftY + 2.0 * CLHEP::mm; +const G4double RichTbDarkSideYBotLocation = -1.0 * (MirrorSubBoxShiftY + 2.0 * CLHEP::mm); +const G4double RichTbDarkSideZLocation = 0.5 * RichTbDarkSideZSize; +const G4double RichTbDarkSideXLocation = 0.0 * CLHEP::mm; + +// testbeam 2015 upgrade +const G4double RichTbUpgradeDarkCoverXSize15 = 17.0 * 2.0 * CLHEP::mm; const G4double RichTbUpgradeDarkCoverYSize15 = RichTbUpgradeDarkCoverXSize15; -const G4double RichTbUpgradeDarkCoverZSize15 = 2.0*CLHEP::mm; +const G4double RichTbUpgradeDarkCoverZSize15 = 2.0 * CLHEP::mm; const G4double RichTbUpgradeDarkCoverYLocation15 = 0.0; const G4double RichTbUpgradeDarkCoverXLocation15 = 0.0; -const G4double RichTbUpgradeDarkCoverZLocation15 =-SphereRadius15 + RadiatorLensThickness15 + - 0.5*RichTbUpgradeDarkCoverZSize; +const G4double RichTbUpgradeDarkCoverZLocation15 = + -SphereRadius15 + RadiatorLensThickness15 + 0.5 * RichTbUpgradeDarkCoverZSize; -//upstream darkcover -const G4double RichTbDarkUpsInnerRadius15 = MirrorOuterRadius15 + 2.0*CLHEP::mm; -const G4double RichTbDarkUpsOuterRadius15 = RichTbDarkUpsInnerRadius15 + 3.0*CLHEP::mm; +// upstream darkcover +const G4double RichTbDarkUpsInnerRadius15 = MirrorOuterRadius15 + 2.0 * CLHEP::mm; +const G4double RichTbDarkUpsOuterRadius15 = RichTbDarkUpsInnerRadius15 + 3.0 * CLHEP::mm; -//side darkcovers -//const G4double RichTbRadiatorC2S15= SphereRadius15 - RadiatorLensThickness15; -//const G4double RichTbRadiatorLateralHalfSize15 = std::sqrt(SphereRadius15*SphereRadius15 - RichTbRadiatorC2S*RichTbRadiatorC2S); +// side darkcovers +// const G4double RichTbRadiatorC2S15= SphereRadius15 - RadiatorLensThickness15; +// const G4double RichTbRadiatorLateralHalfSize15 = std::sqrt(SphereRadius15*SphereRadius15 - +// RichTbRadiatorC2S*RichTbRadiatorC2S); const G4double RichTbRadiatorLateralHalfSize15 = cylRmax; -//const G4double RichTbDarkSideZSize = RadiatorLensThickness+6.0*CLHEP::mm; -const G4double RichTbDarkSideZSize15 = RadiatorLensThickness15+25.0*CLHEP::mm; -const G4double RichTbDarkSideXSize15 = 2.0*RichTbRadiatorLateralHalfSize15+60.0*CLHEP::mm; +// const G4double RichTbDarkSideZSize = RadiatorLensThickness+6.0*CLHEP::mm; +const G4double RichTbDarkSideZSize15 = RadiatorLensThickness15 + 25.0 * CLHEP::mm; +const G4double RichTbDarkSideXSize15 = 2.0 * RichTbRadiatorLateralHalfSize15 + 60.0 * CLHEP::mm; const G4double RichTbDarkSideYSize15 = RichTbDarkSideXSize15; -const G4double BoxInnZSize15 = RichTbDarkSideZSize15+30.0*CLHEP::mm; -const G4double BoxInnXSize15 = RichTbDarkSideXSize15-3.0*CLHEP::mm; -const G4double BoxInnYSize15 = RichTbDarkSideYSize15-3.0*CLHEP::mm; - - -const G4double RichTbDarkSideYLocation15 = 0.0*CLHEP::mm;//RichTbRadiatorLateralHalfSize15+2.0*CLHEP::mm; -//const G4double RichTbDarkSideYBotLocation15 = 0.0*CLHEP::mm;//-1.0*(RichTbRadiatorLateralHalfSize15+2.0*CLHEP::mm); -const G4double RichTbDarkSideZLocation15 = 0.5*RichTbDarkSideZSize15; -const G4double RichTbDarkSideXLocation15 = 0.0*CLHEP::mm; - +const G4double BoxInnZSize15 = RichTbDarkSideZSize15 + 30.0 * CLHEP::mm; +const G4double BoxInnXSize15 = RichTbDarkSideXSize15 - 3.0 * CLHEP::mm; +const G4double BoxInnYSize15 = RichTbDarkSideYSize15 - 3.0 * CLHEP::mm; + +const G4double RichTbDarkSideYLocation15 = 0.0 * CLHEP::mm; // RichTbRadiatorLateralHalfSize15+2.0*CLHEP::mm; +// const G4double RichTbDarkSideYBotLocation15 = 0.0*CLHEP::mm;//-1.0*(RichTbRadiatorLateralHalfSize15+2.0*CLHEP::mm); +const G4double RichTbDarkSideZLocation15 = 0.5 * RichTbDarkSideZSize15; +const G4double RichTbDarkSideXLocation15 = 0.0 * CLHEP::mm; #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbEventAction.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbEventAction.hh index 9811f10303a869edc92ad5714d366ed7db42d90f..8aec171ef299c31174693311df0a160d31fb1a92 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbEventAction.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbEventAction.hh @@ -5,25 +5,20 @@ class G4Event; -class RichTbEventAction:public G4UserEventAction { +class RichTbEventAction : public G4UserEventAction { - public: - RichTbEventAction(); - virtual ~ RichTbEventAction(); - public: - void BeginOfEventAction(const G4Event *); - void EndOfEventAction(const G4Event *); - G4int GetRichCollID() { - return RichTbCollID; - } - G4int GetRichCollIDHpd() { - return RichTbCollIDHpd; - } +public: + RichTbEventAction(); + virtual ~RichTbEventAction(); - private: - - G4int RichTbCollID; - G4int RichTbCollIDHpd; +public: + void BeginOfEventAction(const G4Event *) override; + void EndOfEventAction(const G4Event *) override; + G4int GetRichCollID() { return RichTbCollID; } + G4int GetRichCollIDHpd() { return RichTbCollIDHpd; } +private: + G4int RichTbCollID; + G4int RichTbCollIDHpd; }; #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbExtHpdGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbExtHpdGeometryParameters.hh index 4d608ed9676d4ed3b5dd3d6f33f3657dfc4be218..c8c8d398b38cd4be6cb9da9659935049766f5763 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbExtHpdGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbExtHpdGeometryParameters.hh @@ -4,65 +4,64 @@ // Include files #include <vector> -const G4int NumHpds= 1; - -const G4double RichTbHpdMasterRadius = 43.5*CLHEP::mm; -const G4double RichTbHpdMasterZSize = 160.0*CLHEP::mm; - -const G4double RichTbHpdEnvLargeTubeOutR = 40.3*CLHEP::mm; -const G4double RichTbHpdEnvLargeTubeThickness = 0.75*CLHEP::mm; -const G4double RichTbHpdEnvLargeTubInnR= - RichTbHpdEnvLargeTubeOutR-RichTbHpdEnvLargeTubeThickness; - -//const G4double RichTbHpdEnvLargeTubeZSize = 96.0*CLHEP::mm; -const G4double RichTbHpdEnvLargeTubeZSize = 106.0*CLHEP::mm; -const G4double RichTbHpdEnvEndCapZsize = 2.0*CLHEP::mm; -const G4double RichTbHpdEnvEndCapRadTolerence = 0.1*CLHEP::mm; -const G4double RichTbHpdQuartzWOuterRad = 62.0*CLHEP::mm; - -const G4double RichTbHpdQuartzWThickness = 7.0*CLHEP::mm; -const G4double RichTbHpdPhCathodeThickness= 0.05*CLHEP::mm; -const G4double RichTbHpdActiveInputRad=37.5*CLHEP::mm; -const G4double RichTbHpdQuartzWCylEnvInnerR= RichTbHpdActiveInputRad; -const G4double RichTbHpdQuartzWCylEnvOuterR = 40.3*CLHEP::mm; -const G4double RichTbHpdEnvFromEndZ= 40.5*CLHEP::mm; - -const G4double RichTbHpdQuartzWindowFromEndZ=20.0*CLHEP::mm; -const G4double RichTbHpdSiDetDistZFromPhCathode=111.2*CLHEP::mm; -const G4double RichTbHpdQWCylEnvOuterLargeValue=500.0*CLHEP::mm; -const G4double RichTbHpdQWCylEnvZLargeValue=1000.0*CLHEP::mm; +const G4int NumHpds = 1; + +const G4double RichTbHpdMasterRadius = 43.5 * CLHEP::mm; +const G4double RichTbHpdMasterZSize = 160.0 * CLHEP::mm; + +const G4double RichTbHpdEnvLargeTubeOutR = 40.3 * CLHEP::mm; +const G4double RichTbHpdEnvLargeTubeThickness = 0.75 * CLHEP::mm; +const G4double RichTbHpdEnvLargeTubInnR = RichTbHpdEnvLargeTubeOutR - RichTbHpdEnvLargeTubeThickness; + +// const G4double RichTbHpdEnvLargeTubeZSize = 96.0*CLHEP::mm; +const G4double RichTbHpdEnvLargeTubeZSize = 106.0 * CLHEP::mm; +const G4double RichTbHpdEnvEndCapZsize = 2.0 * CLHEP::mm; +const G4double RichTbHpdEnvEndCapRadTolerence = 0.1 * CLHEP::mm; +const G4double RichTbHpdQuartzWOuterRad = 62.0 * CLHEP::mm; + +const G4double RichTbHpdQuartzWThickness = 7.0 * CLHEP::mm; +const G4double RichTbHpdPhCathodeThickness = 0.05 * CLHEP::mm; +const G4double RichTbHpdActiveInputRad = 37.5 * CLHEP::mm; +const G4double RichTbHpdQuartzWCylEnvInnerR = RichTbHpdActiveInputRad; +const G4double RichTbHpdQuartzWCylEnvOuterR = 40.3 * CLHEP::mm; +const G4double RichTbHpdEnvFromEndZ = 40.5 * CLHEP::mm; + +const G4double RichTbHpdQuartzWindowFromEndZ = 20.0 * CLHEP::mm; +const G4double RichTbHpdSiDetDistZFromPhCathode = 111.2 * CLHEP::mm; +const G4double RichTbHpdQWCylEnvOuterLargeValue = 500.0 * CLHEP::mm; +const G4double RichTbHpdQWCylEnvZLargeValue = 1000.0 * CLHEP::mm; // create a hexagonal array. The max radius is 22 x 0.5 -const G4double RichTbHpdSiDetRadiusSize= 11*CLHEP::mm; -const G4double RichTbHpdSiDetZSize=0.3*CLHEP::mm; -const G4double RichTbHpdSiDetHexPixelFlatToFlatSize=1.4*CLHEP::mm; -const G4double RichTbHpdSiDetHexPixelDiagonalSize = RichTbHpdSiDetHexPixelFlatToFlatSize * 2.0/ sqrt(3.0); -const G4double RichTbHpdSiDetHexPixelEdgeSize= RichTbHpdSiDetHexPixelFlatToFlatSize/sqrt(3.0); -const G4double RichTbHpdSiDetHexPixelRadius= RichTbHpdSiDetHexPixelDiagonalSize/2.0; +const G4double RichTbHpdSiDetRadiusSize = 11 * CLHEP::mm; +const G4double RichTbHpdSiDetZSize = 0.3 * CLHEP::mm; +const G4double RichTbHpdSiDetHexPixelFlatToFlatSize = 1.4 * CLHEP::mm; +const G4double RichTbHpdSiDetHexPixelDiagonalSize = RichTbHpdSiDetHexPixelFlatToFlatSize * 2.0 / sqrt(3.0); +const G4double RichTbHpdSiDetHexPixelEdgeSize = RichTbHpdSiDetHexPixelFlatToFlatSize / sqrt(3.0); +const G4double RichTbHpdSiDetHexPixelRadius = RichTbHpdSiDetHexPixelDiagonalSize / 2.0; const G4double RichTbHpdSiDetPixelZSize = RichTbHpdSiDetZSize; -const G4double RichTbHpdSiDetPixelHexPhiStart=0.0*CLHEP::rad; -const G4double RichTbHpdSiDetPixelHexPhiEnd=2.0*CLHEP::pi* CLHEP::rad; -const G4int RichTbHpdSiDetPixelHexNumSide=6; -const G4int RichTbHpdSiDetPixelHexNumZPlanes=2; -const G4double RichTbHpdSiDetPixelHexZPlane [] = {-0.5*RichTbHpdSiDetPixelZSize, 0.5*RichTbHpdSiDetPixelZSize}; -const G4double RichTbHpdSiDetPixelHexRInner [] ={ 0.0*CLHEP::mm, 0.0*CLHEP::mm}; -//const G4double RichTbHpdSiDetPixelHexROuter [] ={RichTbHpdSiDetHexPixelRadius,RichTbHpdSiDetHexPixelRadius}; -const G4double RichTbHpdSiDetPixelHexROuter [] ={ 0.5*RichTbHpdSiDetHexPixelFlatToFlatSize, - 0.5*RichTbHpdSiDetHexPixelFlatToFlatSize }; -const G4double RichTbHpdSiDetPixelHexRotZ= (CLHEP::pi/6.0)*CLHEP::rad; - -const G4int NumPixelTotInSingleHpd= 163; -const G4int NumHpdPixelRows=15; -const std::vector<G4int> NumHpdPixelInRows ={6,9,10,11,12,13,14,13,14,13,12,11,10,9,6 }; - -const G4double HpdPixelPosTolerence = 0.0*CLHEP::mm ; -const G4double HpdPixelYCenterStart= -10.5* RichTbHpdSiDetHexPixelEdgeSize; -const G4double HpdPixelYCenterShift= 0.5*(RichTbHpdSiDetHexPixelDiagonalSize + RichTbHpdSiDetHexPixelEdgeSize); -const G4double HpdPixelXCenterShift = RichTbHpdSiDetHexPixelFlatToFlatSize+HpdPixelPosTolerence ; -const G4double RichTbSiDetShiftAlongX = 0.0*CLHEP::mm; -const G4double RichTbSiDetShiftAlongY = 0.0*CLHEP::mm; -const G4double RichTbSiDetRotZ = (CLHEP::pi/6.0)*CLHEP::rad; +const G4double RichTbHpdSiDetPixelHexPhiStart = 0.0 * CLHEP::rad; +const G4double RichTbHpdSiDetPixelHexPhiEnd = 2.0 * CLHEP::pi * CLHEP::rad; +const G4int RichTbHpdSiDetPixelHexNumSide = 6; +const G4int RichTbHpdSiDetPixelHexNumZPlanes = 2; +const G4double RichTbHpdSiDetPixelHexZPlane[] = {-0.5 * RichTbHpdSiDetPixelZSize, 0.5 * RichTbHpdSiDetPixelZSize}; +const G4double RichTbHpdSiDetPixelHexRInner[] = {0.0 * CLHEP::mm, 0.0 * CLHEP::mm}; +// const G4double RichTbHpdSiDetPixelHexROuter [] ={RichTbHpdSiDetHexPixelRadius,RichTbHpdSiDetHexPixelRadius}; +const G4double RichTbHpdSiDetPixelHexROuter[] = {0.5 * RichTbHpdSiDetHexPixelFlatToFlatSize, + 0.5 * RichTbHpdSiDetHexPixelFlatToFlatSize}; +const G4double RichTbHpdSiDetPixelHexRotZ = (CLHEP::pi / 6.0) * CLHEP::rad; + +const G4int NumPixelTotInSingleHpd = 163; +const G4int NumHpdPixelRows = 15; +const std::vector<G4int> NumHpdPixelInRows = {6, 9, 10, 11, 12, 13, 14, 13, 14, 13, 12, 11, 10, 9, 6}; + +const G4double HpdPixelPosTolerence = 0.0 * CLHEP::mm; +const G4double HpdPixelYCenterStart = -10.5 * RichTbHpdSiDetHexPixelEdgeSize; +const G4double HpdPixelYCenterShift = 0.5 * (RichTbHpdSiDetHexPixelDiagonalSize + RichTbHpdSiDetHexPixelEdgeSize); +const G4double HpdPixelXCenterShift = RichTbHpdSiDetHexPixelFlatToFlatSize + HpdPixelPosTolerence; +const G4double RichTbSiDetShiftAlongX = 0.0 * CLHEP::mm; +const G4double RichTbSiDetShiftAlongY = 0.0 * CLHEP::mm; +const G4double RichTbSiDetRotZ = (CLHEP::pi / 6.0) * CLHEP::rad; const G4double RichTbHpdSMasterRadius = RichTbHpdMasterRadius; const G4double RichTbHpdSMasterZSize = RichTbHpdMasterZSize; @@ -70,91 +69,84 @@ const G4double RichTbHpdEnvEndCapRad = RichTbHpdEnvLargeTubInnR - RichTbHpdEnvEn const G4double RichTbHpdQuartzWInnerRad = RichTbHpdQuartzWOuterRad - RichTbHpdQuartzWThickness; const G4double RichTbHpdPhCathodeOuterRad = RichTbHpdQuartzWInnerRad; const G4double RichTbHpdPhCathodeInnerRad = RichTbHpdPhCathodeOuterRad - RichTbHpdPhCathodeThickness; -const G4double RichTbHpdQuartzWDeltaTheta = asin( RichTbHpdActiveInputRad / RichTbHpdQuartzWInnerRad ); -const G4double RichTbHpdPhCathodeDeltaTheta = RichTbHpdQuartzWDeltaTheta; +const G4double RichTbHpdQuartzWDeltaTheta = asin(RichTbHpdActiveInputRad / RichTbHpdQuartzWInnerRad); +const G4double RichTbHpdPhCathodeDeltaTheta = RichTbHpdQuartzWDeltaTheta; const G4double RichTbEnvLargeTubZLocation = - -0.5*(RichTbHpdSMasterZSize-RichTbHpdEnvLargeTubeZSize)+ RichTbHpdEnvFromEndZ; + -0.5 * (RichTbHpdSMasterZSize - RichTbHpdEnvLargeTubeZSize) + RichTbHpdEnvFromEndZ; const G4double RichTbHpdEndCapZLocation = - -0.5*(RichTbHpdSMasterZSize-RichTbHpdEnvEndCapZsize)+ - RichTbHpdEnvFromEndZ+RichTbHpdEnvLargeTubeZSize; -const G4double RichTbHpdQuartzWZLocation = -0.5*RichTbHpdSMasterZSize - +RichTbHpdQuartzWindowFromEndZ+ RichTbHpdQuartzWOuterRad; -const G4double RichTbHpdPhCathodeZLocation=RichTbHpdQuartzWZLocation; -const G4double RichTbHpdSiDetZLocation=-0.5*RichTbHpdSMasterZSize + RichTbHpdQuartzWindowFromEndZ - + RichTbHpdQuartzWThickness+RichTbHpdSiDetDistZFromPhCathode - + 0.5*RichTbHpdSiDetZSize; - -const G4double RichTbHpdQuartzWRotY=CLHEP::pi* CLHEP::rad; -const G4double RichTbHpdPhCathodeRotY=RichTbHpdQuartzWRotY; + -0.5 * (RichTbHpdSMasterZSize - RichTbHpdEnvEndCapZsize) + RichTbHpdEnvFromEndZ + RichTbHpdEnvLargeTubeZSize; +const G4double RichTbHpdQuartzWZLocation = + -0.5 * RichTbHpdSMasterZSize + RichTbHpdQuartzWindowFromEndZ + RichTbHpdQuartzWOuterRad; +const G4double RichTbHpdPhCathodeZLocation = RichTbHpdQuartzWZLocation; +const G4double RichTbHpdSiDetZLocation = -0.5 * RichTbHpdSMasterZSize + RichTbHpdQuartzWindowFromEndZ + + RichTbHpdQuartzWThickness + RichTbHpdSiDetDistZFromPhCathode + + 0.5 * RichTbHpdSiDetZSize; +const G4double RichTbHpdQuartzWRotY = CLHEP::pi * CLHEP::rad; +const G4double RichTbHpdPhCathodeRotY = RichTbHpdQuartzWRotY; // default parameters for Hpd componenets -const G4double RichTbHpdSMasterXLocation=0.0*CLHEP::mm; -const G4double RichTbHpdSMasterYLocation=0.0*CLHEP::mm; -const G4double RichTbHpdSMasterZLocation=0.0*CLHEP::mm; -const G4double RichTbHpdEnvTubeXLocation=0.0*CLHEP::mm; -const G4double RichTbHpdEnvTubeYLocation=0.0*CLHEP::mm; -const G4double RichTbHpdEndCapXLocation=0.0*CLHEP::mm; -const G4double RichTbHpdEndCapYLocation=0.0*CLHEP::mm; -const G4double RichTbHpdQuartzWindowXLocation=0.0*CLHEP::mm; -const G4double RichTbHpdQuartzWindowYLocation=0.0*CLHEP::mm; -const G4double RichTbHpdPhCathodeXLocation=0.0*CLHEP::mm; -const G4double RichTbHpdPhCathodeYLocation=0.0*CLHEP::mm; -const G4double RichTbHpdQWCylXLocation=0.0*CLHEP::mm; -const G4double RichTbHpdQWCylYLocation=0.0*CLHEP::mm; -const G4double RichTbHpdQWCylZLocation=0.0*CLHEP::mm; -const G4double RichTbHpdMasterInnerRad=0.0*CLHEP::mm; -const G4double RichTbHpdSMasterInnerRad=0.0*CLHEP::mm; -const G4double RichTbHpdMasterStartPhi=0.0*CLHEP::rad; -const G4double RichTbHpdMasterEndPhi = (2.0*CLHEP::pi)*CLHEP::rad; -const G4double RichTbHpdSMasterStartPhi=0.0*CLHEP::rad; -const G4double RichTbHpdSMasterEndPhi = (2.0*CLHEP::pi)*CLHEP::rad; -const G4double RichTbHpdEnvelopeTubeStartPhi=0.0*CLHEP::rad; -const G4double RichTbHpdEnvelopeTubeEndPhi=(2.0*CLHEP::pi)*CLHEP::rad; -const G4double RichTbHpdEnvelopeEndCapStartPhi=0.0*CLHEP::rad; -const G4double RichTbHpdEnvelopeEndCapEndPhi=(2.0*CLHEP::pi)*CLHEP::rad; -const G4double RichTbHpdEndCapInnerRad=0.0*CLHEP::mm; -const G4double RichTbHpdQuartzWStartPhi=0.0*CLHEP::rad; -const G4double RichTbHpdQuartzWDeltaPhi=(2.0*CLHEP::pi)*CLHEP::rad; -const G4double RichTbHpdQuartzWStartTheta=0.0*CLHEP::rad; -const G4double RichTbHpdPhCathodeStartPhi=0.0*CLHEP::rad; -const G4double RichTbHpdPhCathodeDeltaPhi=(2.0*CLHEP::pi)*CLHEP::rad; -const G4double RichTbHpdPhCathodeStartTheta=0.0*CLHEP::rad; -const G4double RichTbSiDetNominalXLocation=0.0*CLHEP::mm; -const G4double RichTbSiDetNominalYLocation=0.0*CLHEP::mm; -const G4double RichTbHpdQWCylEnvStartPhi=0.0*CLHEP::rad; -const G4double RichTbHpdQWCylEnvEndPhi=(2.0*CLHEP::pi)*CLHEP::rad; -const G4double RichHpdSiPixelPosZInSiDet=0.0*CLHEP::mm; -const G4double RichTbHpdSiDetInnerRadiusSize= 0.0*CLHEP::mm; -const G4double RichTbHpdSiDetStartPhi=0.0*CLHEP::rad; -const G4double RichTbHpdSiDetEndPhi= (2.0*CLHEP::pi)*CLHEP::rad; +const G4double RichTbHpdSMasterXLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdSMasterYLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdSMasterZLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdEnvTubeXLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdEnvTubeYLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdEndCapXLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdEndCapYLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdQuartzWindowXLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdQuartzWindowYLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdPhCathodeXLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdPhCathodeYLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdQWCylXLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdQWCylYLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdQWCylZLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdMasterInnerRad = 0.0 * CLHEP::mm; +const G4double RichTbHpdSMasterInnerRad = 0.0 * CLHEP::mm; +const G4double RichTbHpdMasterStartPhi = 0.0 * CLHEP::rad; +const G4double RichTbHpdMasterEndPhi = (2.0 * CLHEP::pi) * CLHEP::rad; +const G4double RichTbHpdSMasterStartPhi = 0.0 * CLHEP::rad; +const G4double RichTbHpdSMasterEndPhi = (2.0 * CLHEP::pi) * CLHEP::rad; +const G4double RichTbHpdEnvelopeTubeStartPhi = 0.0 * CLHEP::rad; +const G4double RichTbHpdEnvelopeTubeEndPhi = (2.0 * CLHEP::pi) * CLHEP::rad; +const G4double RichTbHpdEnvelopeEndCapStartPhi = 0.0 * CLHEP::rad; +const G4double RichTbHpdEnvelopeEndCapEndPhi = (2.0 * CLHEP::pi) * CLHEP::rad; +const G4double RichTbHpdEndCapInnerRad = 0.0 * CLHEP::mm; +const G4double RichTbHpdQuartzWStartPhi = 0.0 * CLHEP::rad; +const G4double RichTbHpdQuartzWDeltaPhi = (2.0 * CLHEP::pi) * CLHEP::rad; +const G4double RichTbHpdQuartzWStartTheta = 0.0 * CLHEP::rad; +const G4double RichTbHpdPhCathodeStartPhi = 0.0 * CLHEP::rad; +const G4double RichTbHpdPhCathodeDeltaPhi = (2.0 * CLHEP::pi) * CLHEP::rad; +const G4double RichTbHpdPhCathodeStartTheta = 0.0 * CLHEP::rad; +const G4double RichTbSiDetNominalXLocation = 0.0 * CLHEP::mm; +const G4double RichTbSiDetNominalYLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdQWCylEnvStartPhi = 0.0 * CLHEP::rad; +const G4double RichTbHpdQWCylEnvEndPhi = (2.0 * CLHEP::pi) * CLHEP::rad; +const G4double RichHpdSiPixelPosZInSiDet = 0.0 * CLHEP::mm; +const G4double RichTbHpdSiDetInnerRadiusSize = 0.0 * CLHEP::mm; +const G4double RichTbHpdSiDetStartPhi = 0.0 * CLHEP::rad; +const G4double RichTbHpdSiDetEndPhi = (2.0 * CLHEP::pi) * CLHEP::rad; // now for the HPD locations -const G4String HpdNamesBox="Hpd0Box"; -const G4String HpdNamesLog= "Hpd0Log"; -const G4String HpdNamesPhys= "Hpd0Phys"; +const G4String HpdNamesBox = "Hpd0Box"; +const G4String HpdNamesLog = "Hpd0Log"; +const G4String HpdNamesPhys = "Hpd0Phys"; -const G4String HpdQuartzPhysName="HpdQuartzPhys"; -const G4String HpdPhCathodePhysName="HpdPhCathodePhys"; +const G4String HpdQuartzPhysName = "HpdQuartzPhys"; +const G4String HpdPhCathodePhysName = "HpdPhCathodePhys"; const G4String HpdSMasterPhysName = "HpdSMasterPhys"; -const G4String HpdSiDetPhysName = "HpdSiDetPhys"; +const G4String HpdSiDetPhysName = "HpdSiDetPhys"; - - -const G4double HpdPhCathodeXCenterInPhSup= 0.0*CLHEP::mm; -const G4double HpdPhCathodeYCenterInPhSup = 0.0*CLHEP::mm; +const G4double HpdPhCathodeXCenterInPhSup = 0.0 * CLHEP::mm; +const G4double HpdPhCathodeYCenterInPhSup = 0.0 * CLHEP::mm; const G4double RichTbHpdMasterXLocation = HpdPhCathodeXCenterInPhSup; const G4double RichTbHpdMasterYLocation = HpdPhCathodeYCenterInPhSup; - // the following defined in RichTbHpdSupportFrameGeometryParameters.hh -//const G4double RichTbHpdMasterZLocation = (-0.5*HpdPhDetSupFrameZSize) +0.5*RichTbHpdMasterZSize; - - -const G4double RichTbHpdMasterRotationYAxis = 0.0*CLHEP::rad; -const G4double RichTbHpdMasterRotationZAxis = 0.0*CLHEP::rad; +// const G4double RichTbHpdMasterZLocation = (-0.5*HpdPhDetSupFrameZSize) +0.5*RichTbHpdMasterZSize; +const G4double RichTbHpdMasterRotationYAxis = 0.0 * CLHEP::rad; +const G4double RichTbHpdMasterRotationZAxis = 0.0 * CLHEP::rad; #endif // INCLUDE_RICHTBEXTHPDGEOMETRYPARAMETERS_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbGeometryParameters.hh index cf54eb7ede0ba8839d18743547668f02ecd20b71..6158219d7186ee2745c4565b5ba9aa99c648532d 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbGeometryParameters.hh @@ -18,27 +18,22 @@ static const G4double sqroot3 = pow(3.0, 0.5); #include "RichTbLensGeometryParameters.hh" #include "RichTbMasterGeometryParameters.hh" - #include "RichTbCrystalCoverGeometryParameters.hh" #include "RichTbMirrorGeometryParamters.hh" #include "RichTbDarkCoverGeometryParameters.hh" - #include "RichTbPMTGeometryParameters.hh" #include "RichTbPMTSupportFrameGeometryParameters.hh" #include "RichTbHpdGeometryParameters.hh" - #include "RichTbExtHpdGeometryParameters.hh" #include "RichTbHpdSupportFrameGeometryParameters.hh" - #include "RichTbPhDFrameGeometryParameters.hh" #include "RichTbBeamGeometryParameters.hh" // - -#endif /*RichTbGeometryParameters_h */ +#endif /*RichTbGeometryParameters_h */ diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbGraphics.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbGraphics.hh index fe4fb9abb0abed48b98d7dcc6a22040c813802c1..c96d81198960ebb815b91c0fdd3735dd9c335d07 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbGraphics.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbGraphics.hh @@ -8,18 +8,15 @@ class RichTbGraphics { - public: +public: + RichTbGraphics(); + RichTbGraphics(RichTbDetectorConstruction *); + virtual ~RichTbGraphics(); - RichTbGraphics(); - RichTbGraphics(RichTbDetectorConstruction* ); - virtual ~ RichTbGraphics(); + void setAllGraphicsAttributes(); + void setRichTbHallGraphicsAttibutes(); - void setAllGraphicsAttributes(); - void setRichTbHallGraphicsAttibutes(); - - private: - - RichTbDetectorConstruction* curDetector; - +private: + RichTbDetectorConstruction *curDetector; }; -#endif /*RichTbGraphics_h */ +#endif /*RichTbGraphics_h */ diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHall.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHall.hh index 2be6688349b5612dd8222288dd4a78243f474306..486225b548da77f9ba41cbbc2f9704e465fc7e96 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHall.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHall.hh @@ -12,20 +12,16 @@ class RichTbHall { - public: - RichTbHall(); - virtual ~ RichTbHall(); +public: + RichTbHall(); + virtual ~RichTbHall(); - G4LogicalVolume *getRichTbHallLogicalVolume() { - return RichTbHallLVol; - } - G4VPhysicalVolume *getRichTbHallPhysicalVolume() { - return RichTbHallPVol; - } + G4LogicalVolume *getRichTbHallLogicalVolume() { return RichTbHallLVol; } + G4VPhysicalVolume *getRichTbHallPhysicalVolume() { return RichTbHallPVol; } - private: - G4LogicalVolume* RichTbHallLVol; - G4VPhysicalVolume* RichTbHallPVol; +private: + G4LogicalVolume *RichTbHallLVol; + G4VPhysicalVolume *RichTbHallPVol; }; -#endif /*RichTbHall_h */ +#endif /*RichTbHall_h */ diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHallGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHallGeometryParameters.hh index 03cc234328e971e58e333b50d8d726a3f1b0d1ec..7bb1a22d0ea5c69c25eee17cf3160e45e6443ee8 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHallGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHallGeometryParameters.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBHALLGEOMETRYPARAMETERS_HH +#ifndef INCLUDE_RICHTBHALLGEOMETRYPARAMETERS_HH #define INCLUDE_RICHTBHALLGEOMETRYPARAMETERS_HH 1 #include "CLHEP/Units/SystemOfUnits.h" @@ -7,22 +7,22 @@ // Include files /** @class RichTbHallGeometryParameters RichTbHallGeometryParameters.hh include/RichTbHallGeometryParameters.hh - * + * * * @author Sajan EASO * @date 2003-10-21 */ -//Size of the LHCb Rich Testbeam Hall. +// Size of the LHCb Rich Testbeam Hall. - const G4double ExpHallHalfX = 5000.0 * CLHEP::mm; - const G4double ExpHallHalfY = 5000.0 * CLHEP::mm; - const G4double ExpHallHalfZ = 10000.0 * CLHEP::mm; +const G4double ExpHallHalfX = 5000.0 * CLHEP::mm; +const G4double ExpHallHalfY = 5000.0 * CLHEP::mm; +const G4double ExpHallHalfZ = 10000.0 * CLHEP::mm; // The Hall is kept at the orgin of the coord system. // The coord system has +z along the beam direction and +y // going upwards. -// The uptream end of the box part of the vessel -// is at z=0. The origin is approximately where the +// The uptream end of the box part of the vessel +// is at z=0. The origin is approximately where the // beam enters the vessel. #endif // INCLUDE_RICHTBHALLGEOMETRYPARAMETERS_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHit.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHit.hh index e9376b1364d2990b2b1fbc3c6691164d2dc72757..9c3a2aebdd8404cc65b40c80533fdecb982695ca 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHit.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHit.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBHIT_HH +#ifndef INCLUDE_RICHTBHIT_HH #define INCLUDE_RICHTBHIT_HH 1 // Include files @@ -11,179 +11,131 @@ class RichTbVisManager; /** @class RichTbHit RichTbHit.hh include/RichTbHit.hh - * + * * * @author Sajan EASO * @date 2003-12-12 */ class RichTbHit : public G4VHit { -public: +public: /// Standard constructor - RichTbHit( ); + RichTbHit(); - virtual ~RichTbHit( ); ///< Destructor + virtual ~RichTbHit(); ///< Destructor RichTbHit(const RichTbHit &right); - const RichTbHit& operator=(const RichTbHit &right); + const RichTbHit &operator=(const RichTbHit &right); int operator==(const RichTbHit &right) const; inline void *operator new(size_t); inline void operator delete(void *aHit); - void Draw(); - void DrawWithVisM(RichTbVisManager* ); - void Print(); + void Draw() override; + void DrawWithVisM(RichTbVisManager *); + void Print() override; protected: - private: - G4double edep; // energy deposited by PE. + G4double edep; // energy deposited by PE. G4ThreeVector pos; // Global Hit coord on Silicon - G4int CurPMTNum; // PMT Number - G4int CurPixelNum; // Pixelnumber - - G4ThreeVector mLocalPos; // local Hit coord on Silicon. - G4ThreeVector mPeOrigin; // Global Origin of Photoelectron. - G4ThreeVector mPhotonOrigin; // Global Emission Point of Photon. - G4int mRayleighScatFlag; // number of times rayleigh scattered. 0 means no scat. - G4ThreeVector mPhotonIncidenceOnPMTQW; // Global Photon incidence coord on hpd QW. - G4int mPhotonMultIncidenceQW; // number of times the photon hits the PMT QW external surface. - G4double mCkvCosThetaProd; // Cos theta of photon for Cherenkov production. - G4double mCkvPhiProd; // Phi for Cherenkov Production. - G4double mCkvEnergyProd; // Energy of Photon at Cherenkov production. - G4ThreeVector mPeOriginInPhSupport; // photoelectron origin photodetector - // support frame coord system. + G4int CurPMTNum; // PMT Number + G4int CurPixelNum; // Pixelnumber + + G4ThreeVector mLocalPos; // local Hit coord on Silicon. + G4ThreeVector mPeOrigin; // Global Origin of Photoelectron. + G4ThreeVector mPhotonOrigin; // Global Emission Point of Photon. + G4int mRayleighScatFlag; // number of times rayleigh scattered. 0 means no scat. + G4ThreeVector mPhotonIncidenceOnPMTQW; // Global Photon incidence coord on hpd QW. + G4int mPhotonMultIncidenceQW; // number of times the photon hits the PMT QW external surface. + G4double mCkvCosThetaProd; // Cos theta of photon for Cherenkov production. + G4double mCkvPhiProd; // Phi for Cherenkov Production. + G4double mCkvEnergyProd; // Energy of Photon at Cherenkov production. + G4ThreeVector mPeOriginInPhSupport; // photoelectron origin photodetector + // support frame coord system. G4ThreeVector mPhEmissionDir; // Global Direction of the photon at its origin. - + G4ThreeVector mPixelLocalCenter; G4ThreeVector mPixelGlobalCenter; - G4ThreeVector mTIRRadiatorCoord; // Coordinate of Total Internal reflection from the radiator. - G4ThreeVector mMIRRadiatorCoord; // Coordinate of reflection from the mirror - G4ThreeVector mRFRRadiatorCoord; // Coordinate where refraction happened, before exiting the radiator. - G4int mMultipleReflFlag; // Number of times the photon reflected in the radiator. Nominal value=3 - G4double mChTrackTotMom; // Total momentum of the charged track which created the photons. - G4ThreeVector mChTrackThreeMom; // Three vector momentum of the charged track which created photons. - G4int mHitInPixelGapFlag; // if 0 the pixel is in the active region of the pixel. If 1, it is in the gap between pixels. - - - public: - inline void SetEdep(G4double de) { edep = de; } - inline G4double GetEdep() { return edep; } - inline void SetPos(G4ThreeVector xyz) { pos = xyz; } - inline G4ThreeVector GetPos() { return pos; } - inline void SetCurPMTNum (G4int ihp ) { CurPMTNum = ihp; } ; - inline void SetCurHPDNum (G4int ihp ) { CurPMTNum = ihp; } ; - inline G4int GetCurPMTNum() { return CurPMTNum ; } - inline G4int GetCurHPDNum() { return CurPMTNum ; } - inline void SetCurPixNum (G4int ipx ) { CurPixelNum = ipx; } - inline G4int GetCurPixNum() { return CurPixelNum; } - inline void AddEdep( G4double addenergy ) { edep += addenergy; } - inline void SetLocalPos( G4ThreeVector aLocalPos ) - { mLocalPos= aLocalPos;} - inline G4ThreeVector GetLocalPos() - { return mLocalPos;} - - inline void SetPeOrigin(G4ThreeVector aPeOrigin) - { mPeOrigin= aPeOrigin;} - inline G4ThreeVector GetPeOrigin() - { return mPeOrigin; } - - inline void SetPhotonOrigin(G4ThreeVector aOrigin) - { mPhotonOrigin= aOrigin;} - inline G4ThreeVector GetPhotonOrigin() - { return mPhotonOrigin; } - inline void SetRayleighScatFlag( G4int aFlag) - { mRayleighScatFlag=aFlag;} - inline G4int GetRayleighScatFlag() - { return mRayleighScatFlag; } - inline void SetPhotonIncidenceOnPMTQW(G4ThreeVector aIncidence) - { mPhotonIncidenceOnPMTQW=aIncidence;} - inline G4ThreeVector GetPhotonIncidenceOnPMTQW() - { return mPhotonIncidenceOnPMTQW; } - inline void SetPhotonMultIncidenceQW(G4int aMultIncFlag) - { mPhotonMultIncidenceQW=aMultIncFlag; } - inline G4int GetPhotonMultIncidenceQW() - { return mPhotonMultIncidenceQW; } - inline void SetCkvCosThetaProd(G4double aTheta ) - { mCkvCosThetaProd=aTheta; } - inline G4double GetCkvCosThetaProd() - {return mCkvCosThetaProd; } - inline void SetCkvPhiProd( G4double aPhi) - {mCkvPhiProd=aPhi;} - inline G4double GetCkvPhiProd() - { return mCkvPhiProd;} - inline void SetCkvEnergyProd( G4double aEnergy) - {mCkvEnergyProd=aEnergy;} - inline G4double GetCkvEnergyProd() - {return mCkvEnergyProd; } - inline void SetPeOriginInPhSupport(G4ThreeVector aPeOriginInPhSupport) - { mPeOriginInPhSupport = aPeOriginInPhSupport;} - inline G4ThreeVector GetPeOriginInPhSupport() - { return mPeOriginInPhSupport;} - - inline void SetPhEmissionDir(G4ThreeVector aPhEmissionDir) { - mPhEmissionDir= aPhEmissionDir;} - - inline G4ThreeVector GetPhEmissionDir() {return mPhEmissionDir;} - - inline void SetPixelLocalCenter( G4ThreeVector aP ) - {mPixelLocalCenter =aP ;} - inline void SetPixelGlobalCenter( G4ThreeVector aG) - {mPixelGlobalCenter = aG ;} - inline void SetTIRRadiatorCoord(G4ThreeVector aT ) - { mTIRRadiatorCoord = aT;} - inline void SetMIRRadiatorCoord(G4ThreeVector aM ) - { mMIRRadiatorCoord = aM;} - inline void SetRFRRadiatorCoord(G4ThreeVector aF ) - { mRFRRadiatorCoord = aF;} - - inline void SetMultipleReflFlag (G4int aFlag) - {mMultipleReflFlag = aFlag;} - inline void SetChTrackTotMom (G4double aMom) - {mChTrackTotMom = aMom;} - inline void SetChTrackThreeMom(G4ThreeVector aThMom) - { mChTrackThreeMom =aThMom;} - inline void SetHitInPixelGapFlag(G4int aGapFlag) - { mHitInPixelGapFlag = aGapFlag;} - - - inline G4ThreeVector getPixelLocalCenter() - {return mPixelLocalCenter;} - inline G4ThreeVector getPixelGlobalCenter() - {return mPixelGlobalCenter;} - - inline G4ThreeVector getTIRRadiatorCoord() - { return mTIRRadiatorCoord;} - inline G4ThreeVector getMIRRadiatorCoord() - { return mMIRRadiatorCoord;} - inline G4ThreeVector getRFRRadiatorCoord() - { return mRFRRadiatorCoord;} - inline G4int getMultipleReflFlag() - { return mMultipleReflFlag;} - inline G4double getChTrackTotMom () - { return mChTrackTotMom;} - inline G4ThreeVector getChTrackThreeMom () - { return mChTrackThreeMom;} - inline G4int getHitInPixelGapFlag() - { return mHitInPixelGapFlag;} - - - + G4ThreeVector mTIRRadiatorCoord; // Coordinate of Total Internal reflection from the radiator. + G4ThreeVector mMIRRadiatorCoord; // Coordinate of reflection from the mirror + G4ThreeVector mRFRRadiatorCoord; // Coordinate where refraction happened, before exiting the radiator. + G4int mMultipleReflFlag; // Number of times the photon reflected in the radiator. Nominal value=3 + G4double mChTrackTotMom; // Total momentum of the charged track which created the photons. + G4ThreeVector mChTrackThreeMom; // Three vector momentum of the charged track which created photons. + G4int + mHitInPixelGapFlag; // if 0 the pixel is in the active region of the pixel. If 1, it is in the gap between pixels. + +public: + inline void SetEdep(G4double de) { edep = de; } + inline G4double GetEdep() { return edep; } + inline void SetPos(G4ThreeVector xyz) { pos = xyz; } + inline G4ThreeVector GetPos() { return pos; } + inline void SetCurPMTNum(G4int ihp) { CurPMTNum = ihp; }; + inline void SetCurHPDNum(G4int ihp) { CurPMTNum = ihp; }; + inline G4int GetCurPMTNum() { return CurPMTNum; } + inline G4int GetCurHPDNum() { return CurPMTNum; } + inline void SetCurPixNum(G4int ipx) { CurPixelNum = ipx; } + inline G4int GetCurPixNum() { return CurPixelNum; } + inline void AddEdep(G4double addenergy) { edep += addenergy; } + inline void SetLocalPos(G4ThreeVector aLocalPos) { mLocalPos = aLocalPos; } + inline G4ThreeVector GetLocalPos() { return mLocalPos; } + + inline void SetPeOrigin(G4ThreeVector aPeOrigin) { mPeOrigin = aPeOrigin; } + inline G4ThreeVector GetPeOrigin() { return mPeOrigin; } + + inline void SetPhotonOrigin(G4ThreeVector aOrigin) { mPhotonOrigin = aOrigin; } + inline G4ThreeVector GetPhotonOrigin() { return mPhotonOrigin; } + inline void SetRayleighScatFlag(G4int aFlag) { mRayleighScatFlag = aFlag; } + inline G4int GetRayleighScatFlag() { return mRayleighScatFlag; } + inline void SetPhotonIncidenceOnPMTQW(G4ThreeVector aIncidence) { mPhotonIncidenceOnPMTQW = aIncidence; } + inline G4ThreeVector GetPhotonIncidenceOnPMTQW() { return mPhotonIncidenceOnPMTQW; } + inline void SetPhotonMultIncidenceQW(G4int aMultIncFlag) { mPhotonMultIncidenceQW = aMultIncFlag; } + inline G4int GetPhotonMultIncidenceQW() { return mPhotonMultIncidenceQW; } + inline void SetCkvCosThetaProd(G4double aTheta) { mCkvCosThetaProd = aTheta; } + inline G4double GetCkvCosThetaProd() { return mCkvCosThetaProd; } + inline void SetCkvPhiProd(G4double aPhi) { mCkvPhiProd = aPhi; } + inline G4double GetCkvPhiProd() { return mCkvPhiProd; } + inline void SetCkvEnergyProd(G4double aEnergy) { mCkvEnergyProd = aEnergy; } + inline G4double GetCkvEnergyProd() { return mCkvEnergyProd; } + inline void SetPeOriginInPhSupport(G4ThreeVector aPeOriginInPhSupport) { + mPeOriginInPhSupport = aPeOriginInPhSupport; + } + inline G4ThreeVector GetPeOriginInPhSupport() { return mPeOriginInPhSupport; } + + inline void SetPhEmissionDir(G4ThreeVector aPhEmissionDir) { mPhEmissionDir = aPhEmissionDir; } + + inline G4ThreeVector GetPhEmissionDir() { return mPhEmissionDir; } + + inline void SetPixelLocalCenter(G4ThreeVector aP) { mPixelLocalCenter = aP; } + inline void SetPixelGlobalCenter(G4ThreeVector aG) { mPixelGlobalCenter = aG; } + inline void SetTIRRadiatorCoord(G4ThreeVector aT) { mTIRRadiatorCoord = aT; } + inline void SetMIRRadiatorCoord(G4ThreeVector aM) { mMIRRadiatorCoord = aM; } + inline void SetRFRRadiatorCoord(G4ThreeVector aF) { mRFRRadiatorCoord = aF; } + + inline void SetMultipleReflFlag(G4int aFlag) { mMultipleReflFlag = aFlag; } + inline void SetChTrackTotMom(G4double aMom) { mChTrackTotMom = aMom; } + inline void SetChTrackThreeMom(G4ThreeVector aThMom) { mChTrackThreeMom = aThMom; } + inline void SetHitInPixelGapFlag(G4int aGapFlag) { mHitInPixelGapFlag = aGapFlag; } + + inline G4ThreeVector getPixelLocalCenter() { return mPixelLocalCenter; } + inline G4ThreeVector getPixelGlobalCenter() { return mPixelGlobalCenter; } + + inline G4ThreeVector getTIRRadiatorCoord() { return mTIRRadiatorCoord; } + inline G4ThreeVector getMIRRadiatorCoord() { return mMIRRadiatorCoord; } + inline G4ThreeVector getRFRRadiatorCoord() { return mRFRRadiatorCoord; } + inline G4int getMultipleReflFlag() { return mMultipleReflFlag; } + inline G4double getChTrackTotMom() { return mChTrackTotMom; } + inline G4ThreeVector getChTrackThreeMom() { return mChTrackThreeMom; } + inline G4int getHitInPixelGapFlag() { return mHitInPixelGapFlag; } }; typedef G4THitsCollection<RichTbHit> RichTbHitsCollection; extern G4Allocator<RichTbHit> RichTbHitAllocator; -inline void* RichTbHit::operator new(size_t) -{ +inline void *RichTbHit::operator new(size_t) { void *aHit; - aHit = (void *) RichTbHitAllocator.MallocSingle(); + aHit = (void *)RichTbHitAllocator.MallocSingle(); return aHit; } -inline void RichTbHit::operator delete(void *aHit) -{ - RichTbHitAllocator.FreeSingle((RichTbHit*) aHit); -} - - +inline void RichTbHit::operator delete(void *aHit) { RichTbHitAllocator.FreeSingle((RichTbHit *)aHit); } #endif // INCLUDE_RICHTBHIT_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHpd.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHpd.hh index 7436b43c900798c667fc7e346dc384aa5a7b3643..74ac5d8bd8c6d4582e01758107fa35f1e2f9390f 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHpd.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHpd.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBHPD_HH +#ifndef INCLUDE_RICHTBHPD_HH #define INCLUDE_RICHTBHPD_HH 1 // Include files @@ -11,143 +11,73 @@ #include "RichTbUpgradePhDetSupFrame.hh" /** @class RichTbHpd RichTbHpd.hh include/RichTbHpd.hh - * + * * * @author Sajan EASO * @date 2003-11-19 */ -class RichTbPhDetSupFrame; +class RichTbPhDetSupFrame; class RichTbHpd { public: /// Standard constructor - RichTbHpd(G4int aHpdNum, RichTbUpgradePhDetSupFrame* aSupFrame ); + RichTbHpd(G4int aHpdNum, RichTbUpgradePhDetSupFrame *aSupFrame); + + virtual ~RichTbHpd(); ///< Destructor + + G4LogicalVolume *getRichTbHpdMasterLVol() { return RichTbHpdMasterLVol; } + G4LogicalVolume *getRichTbHpdSMasterLVol() { return RichTbHpdSMasterLVol; } + G4LogicalVolume *getRichTbHpdEnvelopeTubeLVol() { return RichTbHpdEnvelopeTubeLVol; } + G4LogicalVolume *getRichTbHpdEnvelopeEndCapLVol() { return RichTbHpdEnvelopeEndCapLVol; } + G4LogicalVolume *getRichTbHpdQuartzWLVol() { return RichTbHpdQuartzWLVol; } + G4LogicalVolume *getRichTbHpdPhCathodeLVol() { return RichTbHpdPhCathodeLVol; } + G4LogicalVolume *getRichTbHpdSiDetLVol() { return RichTbHpdSiDetLVol; } + G4LogicalVolume *getRichTbSiPixelLVol() { return RichTbSiPixelLVol; } + G4VPhysicalVolume *getSingleRichTbSiPixelPVol(G4int PixelNum) { return RichTbSiPixelPVol[PixelNum]; } + std::vector<G4VPhysicalVolume *> getRichTbSiPixelPVol() { return RichTbSiPixelPVol; } - virtual ~RichTbHpd( ); ///< Destructor + G4VPhysicalVolume *getRichTbHpdMasterPVol() { return RichTbHpdMasterPVol; } + G4VPhysicalVolume *getRichTbHpdSMasterPVol() { return RichTbHpdSMasterPVol; } + G4VPhysicalVolume *getRichTbHpdEnvelopeTubePVol() { return RichTbHpdEnvelopeTubePVol; } + G4VPhysicalVolume *getRichTbHpdEnvelopeEndCapPVol() { return RichTbHpdEnvelopeEndCapPVol; } + G4VPhysicalVolume *getRichTbHpdQuartzWPVol() { return RichTbHpdQuartzWPVol; } + G4VPhysicalVolume *getRichTbHpdPhCathodePVol() { return RichTbHpdPhCathodePVol; } + G4VPhysicalVolume *getRichTbHpdSiDetPVol() { return RichTbHpdSiDetPVol; } - G4LogicalVolume* getRichTbHpdMasterLVol() - { - return RichTbHpdMasterLVol; - } - G4LogicalVolume* getRichTbHpdSMasterLVol() - { - return RichTbHpdSMasterLVol; - } - G4LogicalVolume* getRichTbHpdEnvelopeTubeLVol() - { - return RichTbHpdEnvelopeTubeLVol; - } - G4LogicalVolume* getRichTbHpdEnvelopeEndCapLVol() - { - return RichTbHpdEnvelopeEndCapLVol; - } - G4LogicalVolume* getRichTbHpdQuartzWLVol() - { - return RichTbHpdQuartzWLVol; - } - G4LogicalVolume* getRichTbHpdPhCathodeLVol() - { - return RichTbHpdPhCathodeLVol; - } - G4LogicalVolume* getRichTbHpdSiDetLVol() - { - return RichTbHpdSiDetLVol; - } - G4LogicalVolume* getRichTbSiPixelLVol() - { - return RichTbSiPixelLVol; - - } - G4VPhysicalVolume* getSingleRichTbSiPixelPVol(G4int PixelNum) - { - return RichTbSiPixelPVol[ PixelNum]; - - } - std::vector<G4VPhysicalVolume*> getRichTbSiPixelPVol() - { - return RichTbSiPixelPVol; - } - - G4VPhysicalVolume* getRichTbHpdMasterPVol() - { - return RichTbHpdMasterPVol; - } - G4VPhysicalVolume* getRichTbHpdSMasterPVol() - { - return RichTbHpdSMasterPVol; - } - G4VPhysicalVolume* getRichTbHpdEnvelopeTubePVol() - { - return RichTbHpdEnvelopeTubePVol; - } - G4VPhysicalVolume* getRichTbHpdEnvelopeEndCapPVol() - { - return RichTbHpdEnvelopeEndCapPVol; - } - G4VPhysicalVolume* getRichTbHpdQuartzWPVol() - { - return RichTbHpdQuartzWPVol; - } - G4VPhysicalVolume* getRichTbHpdPhCathodePVol() - { - return RichTbHpdPhCathodePVol; - } - G4VPhysicalVolume* getRichTbHpdSiDetPVol() - { - return RichTbHpdSiDetPVol; - } - - G4int getCurHpdNum() - { - return CurHpdNum; - } + G4int getCurHpdNum() { return CurHpdNum; } + + void setTrackingSwitch(bool aV) { m_TrackingSwitch = aV; } + bool TrackingSwitch() { return m_TrackingSwitch; } - void setTrackingSwitch(bool aV ) { - m_TrackingSwitch = aV; - } - bool TrackingSwitch(){ - return m_TrackingSwitch; - } - void constructHpdMasterTree(); void constructHpdComponentsLVol(); void constructHpdComponentsPVol(); void constructHpdSiPixel(); void buildHpdGeometry(); - - - -protected: +protected: private: - - RichTbUpgradePhDetSupFrame* MotherOfHpd; + RichTbUpgradePhDetSupFrame *MotherOfHpd; G4int CurHpdNum; - - G4LogicalVolume* RichTbHpdMasterLVol; - G4LogicalVolume* RichTbHpdSMasterLVol; - G4LogicalVolume* RichTbHpdEnvelopeTubeLVol; - G4LogicalVolume* RichTbHpdEnvelopeEndCapLVol; - G4LogicalVolume* RichTbHpdQuartzWLVol; - G4LogicalVolume* RichTbHpdPhCathodeLVol; - G4LogicalVolume* RichTbHpdSiDetLVol; - G4VPhysicalVolume* RichTbHpdMasterPVol; - G4VPhysicalVolume* RichTbHpdSMasterPVol; - G4VPhysicalVolume* RichTbHpdEnvelopeTubePVol; - G4VPhysicalVolume* RichTbHpdEnvelopeEndCapPVol; - G4VPhysicalVolume* RichTbHpdQuartzWPVol; - G4VPhysicalVolume* RichTbHpdPhCathodePVol; - G4VPhysicalVolume* RichTbHpdSiDetPVol; - - G4LogicalVolume* RichTbSiPixelLVol; - - std::vector<G4VPhysicalVolume*> RichTbSiPixelPVol; - bool m_TrackingSwitch; - - - - + G4LogicalVolume *RichTbHpdMasterLVol; + G4LogicalVolume *RichTbHpdSMasterLVol; + G4LogicalVolume *RichTbHpdEnvelopeTubeLVol; + G4LogicalVolume *RichTbHpdEnvelopeEndCapLVol; + G4LogicalVolume *RichTbHpdQuartzWLVol; + G4LogicalVolume *RichTbHpdPhCathodeLVol; + G4LogicalVolume *RichTbHpdSiDetLVol; + G4VPhysicalVolume *RichTbHpdMasterPVol; + G4VPhysicalVolume *RichTbHpdSMasterPVol; + G4VPhysicalVolume *RichTbHpdEnvelopeTubePVol; + G4VPhysicalVolume *RichTbHpdEnvelopeEndCapPVol; + G4VPhysicalVolume *RichTbHpdQuartzWPVol; + G4VPhysicalVolume *RichTbHpdPhCathodePVol; + G4VPhysicalVolume *RichTbHpdSiDetPVol; + G4LogicalVolume *RichTbSiPixelLVol; + + std::vector<G4VPhysicalVolume *> RichTbSiPixelPVol; + bool m_TrackingSwitch; }; #endif // INCLUDE_RICHTBHPD_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHpdGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHpdGeometryParameters.hh index 62539d4ddb1ea7bf040b2995d70c2f39fbd8ff98..8d655484e9d5abdc0208b7f3001fa8cf8985a651 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHpdGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHpdGeometryParameters.hh @@ -1,70 +1,66 @@ -#ifndef INCLUDE_RICHTBHPDGEOMETRYPARAMETERS_HH +#ifndef INCLUDE_RICHTBHPDGEOMETRYPARAMETERS_HH #define INCLUDE_RICHTBHPDGEOMETRYPARAMETERS_HH 1 // Include files -const G4int NumHpds= 1; +const G4int NumHpds = 1; -const G4double RichTbHpdMasterRadius = 43.5*CLHEP::mm; -const G4double RichTbHpdMasterZSize = 160.0*CLHEP::mm; +const G4double RichTbHpdMasterRadius = 43.5 * CLHEP::mm; +const G4double RichTbHpdMasterZSize = 160.0 * CLHEP::mm; -const G4double RichTbHpdEnvLargeTubeOutR = 40.3*CLHEP::mm; -const G4double RichTbHpdEnvLargeTubeThickness = 0.75*CLHEP::mm; +const G4double RichTbHpdEnvLargeTubeOutR = 40.3 * CLHEP::mm; +const G4double RichTbHpdEnvLargeTubeThickness = 0.75 * CLHEP::mm; -const G4double RichTbHpdEnvLargeTubInnR= - RichTbHpdEnvLargeTubeOutR-RichTbHpdEnvLargeTubeThickness; +const G4double RichTbHpdEnvLargeTubInnR = RichTbHpdEnvLargeTubeOutR - RichTbHpdEnvLargeTubeThickness; -const G4double RichTbHpdEnvLargeTubeZSize = 96.0*CLHEP::mm; -const G4double RichTbHpdEnvEndCapZsize = 2.0*CLHEP::mm; -const G4double RichTbHpdEnvEndCapRadTolerence = 0.1*CLHEP::mm; +const G4double RichTbHpdEnvLargeTubeZSize = 96.0 * CLHEP::mm; +const G4double RichTbHpdEnvEndCapZsize = 2.0 * CLHEP::mm; +const G4double RichTbHpdEnvEndCapRadTolerence = 0.1 * CLHEP::mm; -const G4double RichTbHpdQuartzWOuterRad = 62.0*CLHEP::mm; +const G4double RichTbHpdQuartzWOuterRad = 62.0 * CLHEP::mm; +const G4double RichTbHpdQuartzWThickness = 7.0 * CLHEP::mm; -const G4double RichTbHpdQuartzWThickness = 7.0*CLHEP::mm; +const G4double RichTbHpdPhCathodeThickness = 0.05 * CLHEP::mm; +const G4double RichTbHpdActiveInputRad = 37.5 * CLHEP::mm; +// const G4double RichTbHpdActiveInputRad=36.0*CLHEP::mm; +const G4double RichTbHpdQuartzWCylEnvInnerR = RichTbHpdActiveInputRad; +const G4double RichTbHpdQuartzWCylEnvOuterR = 40.3 * CLHEP::mm; - - -const G4double RichTbHpdPhCathodeThickness= 0.05*CLHEP::mm; -const G4double RichTbHpdActiveInputRad=37.5*CLHEP::mm; -//const G4double RichTbHpdActiveInputRad=36.0*CLHEP::mm; -const G4double RichTbHpdQuartzWCylEnvInnerR= RichTbHpdActiveInputRad; -const G4double RichTbHpdQuartzWCylEnvOuterR = 40.3*CLHEP::mm; - -const G4double RichTbHpdEnvFromEndZ= 40.5*CLHEP::mm; -const G4double RichTbHpdQuartzWindowFromEndZ=20.0*CLHEP::mm; -//const G4double RichTbHpdSiDetDistZFromPhCathode=100.0*CLHEP::mm; -const G4double RichTbHpdSiDetDistZFromPhCathode=111.2*CLHEP::mm; -const G4double RichTbHpdQWCylEnvOuterLargeValue=500.0*CLHEP::mm; -const G4double RichTbHpdQWCylEnvZLargeValue=1000.0*CLHEP::mm; +const G4double RichTbHpdEnvFromEndZ = 40.5 * CLHEP::mm; +const G4double RichTbHpdQuartzWindowFromEndZ = 20.0 * CLHEP::mm; +// const G4double RichTbHpdSiDetDistZFromPhCathode=100.0*CLHEP::mm; +const G4double RichTbHpdSiDetDistZFromPhCathode = 111.2 * CLHEP::mm; +const G4double RichTbHpdQWCylEnvOuterLargeValue = 500.0 * CLHEP::mm; +const G4double RichTbHpdQWCylEnvZLargeValue = 1000.0 * CLHEP::mm; // create a hexagonal array. The max radius= 22/2=11 CLHEP::mm -const G4double RichTbHpdSiDetRadiusSize= 11*CLHEP::mm; -const G4double RichTbHpdSiDetZSize=0.3*CLHEP::mm; +const G4double RichTbHpdSiDetRadiusSize = 11 * CLHEP::mm; +const G4double RichTbHpdSiDetZSize = 0.3 * CLHEP::mm; -const G4double RichTbHpdSiDetHexPixelFlatToFlatSize=1.4*CLHEP::mm; -const G4double RichTbHpdSiDetHexPixelDiagonalSize = RichTbHpdSiDetHexPixelFlatToFlatSize * 2.0/ sqrt(3.0); -const G4double RichTbHpdSiDetHexPixelEdgeSize= RichTbHpdSiDetHexPixelFlatToFlatSize/sqrt(3.0); -const G4double RichTbHpdSiDetHexPixelRadius= RichTbHpdSiDetHexPixelDiagonalSize/2.0; +const G4double RichTbHpdSiDetHexPixelFlatToFlatSize = 1.4 * CLHEP::mm; +const G4double RichTbHpdSiDetHexPixelDiagonalSize = RichTbHpdSiDetHexPixelFlatToFlatSize * 2.0 / sqrt(3.0); +const G4double RichTbHpdSiDetHexPixelEdgeSize = RichTbHpdSiDetHexPixelFlatToFlatSize / sqrt(3.0); +const G4double RichTbHpdSiDetHexPixelRadius = RichTbHpdSiDetHexPixelDiagonalSize / 2.0; const G4double RichTbHpdSiDetPixelZSize = RichTbHpdSiDetZSize; -const G4double RichTbHpdSiDetPixelHexPhiStart=0.0*CLHEP::rad; -const G4double RichTbHpdSiDetPixelHexPhiEnd=CLHEP::pi* CLHEP::rad; -const G4int RichTbHpdSiDetPixelHexNumSide=6; -const G4int RichTbHpdSiDetPixelHexNumZPlanes=2; -const G4double RichTbHpdSiDetPixelHexZPlane []= {-0.5*RichTbHpdSiDetPixelZSize, 0.5*RichTbHpdSiDetPixelZSize}; -const G4double RichTbHpdSiDetPixelHexRInner [] ={ 0.0*CLHEP::mm, 0.0*CLHEP::mm}; -const G4double RichTbHpdSiDetPixelHexROuter [] ={RichTbHpdSiDetHexPixelRadius,RichTbHpdSiDetHexPixelRadius}; -const G4int NumPixelTotInSingleHpd= 163; -const G4int NumHpdPixelRows=15; -const std::vector<G4int> NumHpdPixelInRows ={6,9,10,11,12,13,14,13,14,13,12,11,10,9,6 }; - -const G4double HpdPixelYCenterStart= -10.5* RichTbHpdSiDetHexPixelEdgeSize; -const G4double HpdPixelYCenterShift= 1.5* RichTbHpdSiDetHexPixelEdgeSize; -const G4double HpdPixelXCenterShift = 0.5* RichTbHpdSiDetHexPixelFlatToFlatSize; -const G4double RichTbSiDetShiftAlongX = 0.0*CLHEP::mm; -const G4double RichTbSiDetShiftAlongY = 0.0*CLHEP::mm; +const G4double RichTbHpdSiDetPixelHexPhiStart = 0.0 * CLHEP::rad; +const G4double RichTbHpdSiDetPixelHexPhiEnd = CLHEP::pi * CLHEP::rad; +const G4int RichTbHpdSiDetPixelHexNumSide = 6; +const G4int RichTbHpdSiDetPixelHexNumZPlanes = 2; +const G4double RichTbHpdSiDetPixelHexZPlane[] = {-0.5 * RichTbHpdSiDetPixelZSize, 0.5 * RichTbHpdSiDetPixelZSize}; +const G4double RichTbHpdSiDetPixelHexRInner[] = {0.0 * CLHEP::mm, 0.0 * CLHEP::mm}; +const G4double RichTbHpdSiDetPixelHexROuter[] = {RichTbHpdSiDetHexPixelRadius, RichTbHpdSiDetHexPixelRadius}; +const G4int NumPixelTotInSingleHpd = 163; +const G4int NumHpdPixelRows = 15; +const std::vector<G4int> NumHpdPixelInRows = {6, 9, 10, 11, 12, 13, 14, 13, 14, 13, 12, 11, 10, 9, 6}; + +const G4double HpdPixelYCenterStart = -10.5 * RichTbHpdSiDetHexPixelEdgeSize; +const G4double HpdPixelYCenterShift = 1.5 * RichTbHpdSiDetHexPixelEdgeSize; +const G4double HpdPixelXCenterShift = 0.5 * RichTbHpdSiDetHexPixelFlatToFlatSize; +const G4double RichTbSiDetShiftAlongX = 0.0 * CLHEP::mm; +const G4double RichTbSiDetShiftAlongY = 0.0 * CLHEP::mm; const G4double RichTbHpdSMasterRadius = RichTbHpdMasterRadius; const G4double RichTbHpdSMasterZSize = RichTbHpdMasterZSize; @@ -73,86 +69,82 @@ const G4double RichTbHpdQuartzWInnerRad = RichTbHpdQuartzWOuterRad - RichTbHpdQu const G4double RichTbHpdPhCathodeOuterRad = RichTbHpdQuartzWInnerRad; const G4double RichTbHpdPhCathodeInnerRad = RichTbHpdPhCathodeOuterRad - RichTbHpdPhCathodeThickness; -const G4double RichTbHpdQuartzWDeltaTheta = asin( RichTbHpdActiveInputRad / RichTbHpdQuartzWInnerRad ); +const G4double RichTbHpdQuartzWDeltaTheta = asin(RichTbHpdActiveInputRad / RichTbHpdQuartzWInnerRad); -const G4double RichTbHpdPhCathodeDeltaTheta = RichTbHpdQuartzWDeltaTheta; +const G4double RichTbHpdPhCathodeDeltaTheta = RichTbHpdQuartzWDeltaTheta; // now positioning the various parts in an hpd. const G4double RichTbEnvLargeTubZLocation = - -0.5*(RichTbHpdSMasterZSize-RichTbHpdEnvLargeTubeZSize)+ RichTbHpdEnvFromEndZ; + -0.5 * (RichTbHpdSMasterZSize - RichTbHpdEnvLargeTubeZSize) + RichTbHpdEnvFromEndZ; const G4double RichTbHpdEndCapZLocation = - -0.5*(RichTbHpdSMasterZSize-RichTbHpdEnvEndCapZsize)+ - RichTbHpdEnvFromEndZ+RichTbHpdEnvLargeTubeZSize; -const G4double RichTbHpdQuartzWZLocation = -0.5*RichTbHpdSMasterZSize - +RichTbHpdQuartzWindowFromEndZ+ RichTbHpdQuartzWOuterRad; -const G4double RichTbHpdPhCathodeZLocation=RichTbHpdQuartzWZLocation; -const G4double RichTbHpdSiDetZLocation=-0.5*RichTbHpdSMasterZSize + RichTbHpdQuartzWindowFromEndZ - + RichTbHpdQuartzWThickness+RichTbHpdSiDetDistZFromPhCathode - + 0.5*RichTbHpdSiDetZSize; - -const G4double RichTbHpdQuartzWRotY=CLHEP::pi* CLHEP::rad; -const G4double RichTbHpdPhCathodeRotY=RichTbHpdQuartzWRotY; + -0.5 * (RichTbHpdSMasterZSize - RichTbHpdEnvEndCapZsize) + RichTbHpdEnvFromEndZ + RichTbHpdEnvLargeTubeZSize; +const G4double RichTbHpdQuartzWZLocation = + -0.5 * RichTbHpdSMasterZSize + RichTbHpdQuartzWindowFromEndZ + RichTbHpdQuartzWOuterRad; +const G4double RichTbHpdPhCathodeZLocation = RichTbHpdQuartzWZLocation; +const G4double RichTbHpdSiDetZLocation = -0.5 * RichTbHpdSMasterZSize + RichTbHpdQuartzWindowFromEndZ + + RichTbHpdQuartzWThickness + RichTbHpdSiDetDistZFromPhCathode + + 0.5 * RichTbHpdSiDetZSize; + +const G4double RichTbHpdQuartzWRotY = CLHEP::pi * CLHEP::rad; +const G4double RichTbHpdPhCathodeRotY = RichTbHpdQuartzWRotY; // default parameters for Hpd componenets -const G4double RichTbHpdSMasterXLocation=0.0*CLHEP::mm; -const G4double RichTbHpdSMasterYLocation=0.0*CLHEP::mm; -const G4double RichTbHpdSMasterZLocation=0.0*CLHEP::mm; -const G4double RichTbHpdEnvTubeXLocation=0.0*CLHEP::mm; -const G4double RichTbHpdEnvTubeYLocation=0.0*CLHEP::mm; -const G4double RichTbHpdEndCapXLocation=0.0*CLHEP::mm; -const G4double RichTbHpdEndCapYLocation=0.0*CLHEP::mm; -const G4double RichTbHpdQuartzWindowXLocation=0.0*CLHEP::mm; -const G4double RichTbHpdQuartzWindowYLocation=0.0*CLHEP::mm; -const G4double RichTbHpdPhCathodeXLocation=0.0*CLHEP::mm; -const G4double RichTbHpdPhCathodeYLocation=0.0*CLHEP::mm; -const G4double RichTbHpdQWCylXLocation=0.0*CLHEP::mm; -const G4double RichTbHpdQWCylYLocation=0.0*CLHEP::mm; -const G4double RichTbHpdQWCylZLocation=0.0*CLHEP::mm; -const G4double RichTbHpdMasterInnerRad=0.0*CLHEP::mm; -const G4double RichTbHpdSMasterInnerRad=0.0*CLHEP::mm; -const G4double RichTbHpdMasterStartPhi=0.0*CLHEP::rad; -const G4double RichTbHpdMasterEndPhi = (2.0*CLHEP::pi)*CLHEP::rad; -const G4double RichTbHpdSMasterStartPhi=0.0*CLHEP::rad; -const G4double RichTbHpdSMasterEndPhi = (2.0*CLHEP::pi)*CLHEP::rad; -const G4double RichTbHpdEnvelopeTubeStartPhi=0.0*CLHEP::rad; -const G4double RichTbHpdEnvelopeTubeEndPhi=(2.0*CLHEP::pi)*CLHEP::rad; -const G4double RichTbHpdEnvelopeEndCapStartPhi=0.0*CLHEP::rad; -const G4double RichTbHpdEnvelopeEndCapEndPhi=(2.0*CLHEP::pi)*CLHEP::rad; -const G4double RichTbHpdEndCapInnerRad=0.0*CLHEP::mm; -const G4double RichTbHpdQuartzWStartPhi=0.0*CLHEP::rad; -const G4double RichTbHpdQuartzWDeltaPhi=(2.0*CLHEP::pi)*CLHEP::rad; -const G4double RichTbHpdQuartzWStartTheta=0.0*CLHEP::rad; -const G4double RichTbHpdPhCathodeStartPhi=0.0*CLHEP::rad; -const G4double RichTbHpdPhCathodeDeltaPhi=(2.0*CLHEP::pi)*CLHEP::rad; -const G4double RichTbHpdPhCathodeStartTheta=0.0*CLHEP::rad; -const G4double RichTbSiDetNominalXLocation=0.0*CLHEP::mm; -const G4double RichTbSiDetNominalYLocation=0.0*CLHEP::mm; -const G4double RichTbHpdQWCylEnvStartPhi=0.0*CLHEP::rad; -const G4double RichTbHpdQWCylEnvEndPhi=(2.0*CLHEP::pi)*CLHEP::rad; -const G4double RichHpdSiPixelPosZInSiDet=0.0*CLHEP::mm; -const G4double RichTbHpdSiDetInnerRadiusSize= 0.0*CLHEP::mm; -const G4double RichTbHpdSiDetStartPhi=0.0*CLHEP::rad; -const G4double RichTbHpdSiDetEndPhi= (2.0*CLHEP::pi)*CLHEP::rad; +const G4double RichTbHpdSMasterXLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdSMasterYLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdSMasterZLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdEnvTubeXLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdEnvTubeYLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdEndCapXLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdEndCapYLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdQuartzWindowXLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdQuartzWindowYLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdPhCathodeXLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdPhCathodeYLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdQWCylXLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdQWCylYLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdQWCylZLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdMasterInnerRad = 0.0 * CLHEP::mm; +const G4double RichTbHpdSMasterInnerRad = 0.0 * CLHEP::mm; +const G4double RichTbHpdMasterStartPhi = 0.0 * CLHEP::rad; +const G4double RichTbHpdMasterEndPhi = (2.0 * CLHEP::pi) * CLHEP::rad; +const G4double RichTbHpdSMasterStartPhi = 0.0 * CLHEP::rad; +const G4double RichTbHpdSMasterEndPhi = (2.0 * CLHEP::pi) * CLHEP::rad; +const G4double RichTbHpdEnvelopeTubeStartPhi = 0.0 * CLHEP::rad; +const G4double RichTbHpdEnvelopeTubeEndPhi = (2.0 * CLHEP::pi) * CLHEP::rad; +const G4double RichTbHpdEnvelopeEndCapStartPhi = 0.0 * CLHEP::rad; +const G4double RichTbHpdEnvelopeEndCapEndPhi = (2.0 * CLHEP::pi) * CLHEP::rad; +const G4double RichTbHpdEndCapInnerRad = 0.0 * CLHEP::mm; +const G4double RichTbHpdQuartzWStartPhi = 0.0 * CLHEP::rad; +const G4double RichTbHpdQuartzWDeltaPhi = (2.0 * CLHEP::pi) * CLHEP::rad; +const G4double RichTbHpdQuartzWStartTheta = 0.0 * CLHEP::rad; +const G4double RichTbHpdPhCathodeStartPhi = 0.0 * CLHEP::rad; +const G4double RichTbHpdPhCathodeDeltaPhi = (2.0 * CLHEP::pi) * CLHEP::rad; +const G4double RichTbHpdPhCathodeStartTheta = 0.0 * CLHEP::rad; +const G4double RichTbSiDetNominalXLocation = 0.0 * CLHEP::mm; +const G4double RichTbSiDetNominalYLocation = 0.0 * CLHEP::mm; +const G4double RichTbHpdQWCylEnvStartPhi = 0.0 * CLHEP::rad; +const G4double RichTbHpdQWCylEnvEndPhi = (2.0 * CLHEP::pi) * CLHEP::rad; +const G4double RichHpdSiPixelPosZInSiDet = 0.0 * CLHEP::mm; +const G4double RichTbHpdSiDetInnerRadiusSize = 0.0 * CLHEP::mm; +const G4double RichTbHpdSiDetStartPhi = 0.0 * CLHEP::rad; +const G4double RichTbHpdSiDetEndPhi = (2.0 * CLHEP::pi) * CLHEP::rad; // now for the HPD locations. -const G4String HpdNamesBox="Hpd0Box"; +const G4String HpdNamesBox = "Hpd0Box"; -const G4String HpdNamesLog= "Hpd0Log"; +const G4String HpdNamesLog = "Hpd0Log"; -const G4String HpdNamesPhys= "Hpd0Phys"; -const G4double HpdPhCathodeXCenterInPhSup= 0.0*CLHEP::mm; +const G4String HpdNamesPhys = "Hpd0Phys"; +const G4double HpdPhCathodeXCenterInPhSup = 0.0 * CLHEP::mm; -const G4double HpdPhCathodeYCenterInPhSup = 0.0*CLHEP::mm; +const G4double HpdPhCathodeYCenterInPhSup = 0.0 * CLHEP::mm; const G4double RichTbHpdMasterXLocation = HpdPhCathodeXCenterInPhSup; const G4double RichTbHpdMasterYLocation = HpdPhCathodeYCenterInPhSup; - const G4double RichTbHpdMasterZLocation = (-0.5*PhDetSupFrameZSize) + - +0.5*RichTbHpdMasterZSize; - -const G4double RichTbHpdMasterRotationYAxis = 0.0*CLHEP::rad; -const G4double RichTbHpdMasterRotationZAxis = 0.0*CLHEP::rad; - +const G4double RichTbHpdMasterZLocation = (-0.5 * PhDetSupFrameZSize) + +0.5 * RichTbHpdMasterZSize; +const G4double RichTbHpdMasterRotationYAxis = 0.0 * CLHEP::rad; +const G4double RichTbHpdMasterRotationZAxis = 0.0 * CLHEP::rad; #endif // INCLUDE_RICHTBHPDGEOMETRYPARAMETERS_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHpdRODummySD.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHpdRODummySD.hh index 38e8fe3d0b755ebbf6ea48b7a742e269d2543e0e..8bf387d2440fe4cfdf391daf162b743e445fd0ac 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHpdRODummySD.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHpdRODummySD.hh @@ -1,38 +1,33 @@ -#ifndef INCLUDE_RICHTBHPDRODUMMYSD_HH +#ifndef INCLUDE_RICHTBHPDRODUMMYSD_HH #define INCLUDE_RICHTBHPDRODUMMYSD_HH 1 // Include files #include "Geant4/G4VSensitiveDetector.hh" /** @class RichTbHpdRODummySD RichTbHpdRODummySD.hh include/RichTbHpdRODummySD.hh - * + * * * @author Sajan Easo * @date 2015-05-06 */ -class RichTbHpdRODummySD: public G4VSensitiveDetector { -public: +class RichTbHpdRODummySD : public G4VSensitiveDetector { +public: /// Standard constructor - RichTbHpdRODummySD(); + RichTbHpdRODummySD(); virtual ~RichTbHpdRODummySD(); ///< Destructor - void Initialize(G4HCofThisEvent* /* HCE */) {} - G4bool ProcessHits(G4Step* /* aStep */,G4TouchableHistory* /* ROhist */) {return false;} - void EndOfEvent(G4HCofThisEvent* /* HCE */) {} - void clear() {} - void DrawAll() {} - void PrintAll() {} + void Initialize(G4HCofThisEvent * /* HCE */) override {} + G4bool ProcessHits(G4Step * /* aStep */, G4TouchableHistory * /* ROhist */) override { return false; } + void EndOfEvent(G4HCofThisEvent * /* HCE */) override {} + void clear() override {} + void DrawAll() override {} + void PrintAll() override {} protected: - private: - - }; -RichTbHpdRODummySD::RichTbHpdRODummySD(): G4VSensitiveDetector("RichTbHpdROdummySD") {} - -RichTbHpdRODummySD::~RichTbHpdRODummySD(){ } - +RichTbHpdRODummySD::RichTbHpdRODummySD() : G4VSensitiveDetector("RichTbHpdROdummySD") {} +RichTbHpdRODummySD::~RichTbHpdRODummySD() {} #endif // INCLUDE_RICHTBHPDRODUMMYSD_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHpdSupportFrameGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHpdSupportFrameGeometryParameters.hh index 98f7ab8aeb71c331b2df1324fe76532250d6556f..25bd0800029f251dd894c3359a92d64187394e81 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHpdSupportFrameGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbHpdSupportFrameGeometryParameters.hh @@ -1,42 +1,35 @@ -#ifndef INCLUDE_RICHTBHPDSUPPORTFRAMEGEOMETRYPARAMETERS_HH +#ifndef INCLUDE_RICHTBHPDSUPPORTFRAMEGEOMETRYPARAMETERS_HH #define INCLUDE_RICHTBHPDSUPPORTFRAMEGEOMETRYPARAMETERS_HH 1 +const G4double HpdPhDetSupFrameXSize = 100.0 * CLHEP::mm; +const G4double HpdPhDetSupFrameYSize = 100.0 * CLHEP::mm; +const G4double HpdPhDetSupFrameZSize = 180.0 * CLHEP::mm; +// const G4double RadiatorHpdGap = 46.40*CLHEP::mm; +const G4double HpdExtraZShiftFromFocalPlane = 26.4 * CLHEP::mm; -const G4double HpdPhDetSupFrameXSize = 100.0*CLHEP::mm; -const G4double HpdPhDetSupFrameYSize = 100.0*CLHEP::mm; +// const G4double RadiatorHpdGap = 25.5*CLHEP::mm + 26.4 CLHEP::mm; -const G4double HpdPhDetSupFrameZSize = 180.0*CLHEP::mm; +const G4double RadiatorHpdGap = PhotonDetPlaneGapWrtRadiatorSurface + HpdExtraZShiftFromFocalPlane; +const G4double HpdPhotonDetectorPlaneZ = RadiatorLensThickness + RadiatorHpdGap + RichTbHpdQuartzWThickness; -//const G4double RadiatorHpdGap = 46.40*CLHEP::mm; - -const G4double HpdExtraZShiftFromFocalPlane= 26.4*CLHEP::mm; +// const G4double HpdPhotonDetectorPlaneX = -68.1*CLHEP::mm; // from the drawing -//const G4double RadiatorHpdGap = 25.5*CLHEP::mm + 26.4 CLHEP::mm; +// const G4double HpdPhotonDetectorSupFrameXLocation = HpdPhotonDetectorPlaneX; +const G4double HpdPhotonDetectorSupFrameXLocation = PhDetSupFrameXLocation[1]; // from later measurements. +const G4double HpdPhotonDetectorSupFrameYLocation = 0.0 * CLHEP::mm; +const G4double HpdPhDetFrameZTolerence = 10.0 * CLHEP::mm; -const G4double RadiatorHpdGap = PhotonDetPlaneGapWrtRadiatorSurface + HpdExtraZShiftFromFocalPlane; +const G4double HpdPhotonDetPlaneToPhDetSupFrameFrontSurface = + -1.0 * (RichTbHpdQuartzWThickness + RichTbHpdQuartzWindowFromEndZ + HpdPhDetFrameZTolerence); -const G4double HpdPhotonDetectorPlaneZ = RadiatorLensThickness + RadiatorHpdGap + RichTbHpdQuartzWThickness; - -//const G4double HpdPhotonDetectorPlaneX = -68.1*CLHEP::mm; // from the drawing - -//const G4double HpdPhotonDetectorSupFrameXLocation = HpdPhotonDetectorPlaneX; -const G4double HpdPhotonDetectorSupFrameXLocation = PhDetSupFrameXLocation [1]; // from later measurements. -const G4double HpdPhotonDetectorSupFrameYLocation = 0.0 *CLHEP::mm; -const G4double HpdPhDetFrameZTolerence = 10.0*CLHEP::mm; - - -const G4double HpdPhotonDetPlaneToPhDetSupFrameFrontSurface = -1.0*(RichTbHpdQuartzWThickness + - RichTbHpdQuartzWindowFromEndZ + HpdPhDetFrameZTolerence ); - -const G4double HpdPhDetSupFrameZLocation = HpdPhotonDetectorPlaneZ - +HpdPhotonDetPlaneToPhDetSupFrameFrontSurface+ 0.5* HpdPhDetSupFrameZSize; - - -const G4double RichTbHpdMasterZLocation = (-0.5*HpdPhDetSupFrameZSize) +0.5*RichTbHpdMasterZSize + HpdPhDetFrameZTolerence ; +const G4double HpdPhDetSupFrameZLocation = + HpdPhotonDetectorPlaneZ + HpdPhotonDetPlaneToPhDetSupFrameFrontSurface + 0.5 * HpdPhDetSupFrameZSize; +const G4double RichTbHpdMasterZLocation = + (-0.5 * HpdPhDetSupFrameZSize) + 0.5 * RichTbHpdMasterZSize + HpdPhDetFrameZTolerence; #endif // INCLUDE_RICHTBHPDSUPPORTFRAMEGEOMETRYPARAMETERS_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbIOData.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbIOData.hh index 715624fd827c5a2bd6317a6464f7d90f369859ce..a5e8d70727c40d06cf46fa03259eb49629cea582 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbIOData.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbIOData.hh @@ -7,23 +7,21 @@ #include "Geant4/G4Event.hh" class RichTbIOData { - public: - +public: // RichTbIOData(); - virtual ~ RichTbIOData(); - static RichTbIOData* getRichTbIODataInstance(); - - void WriteOutEventHeaderData(const G4Event *); - void WriteOutHitData(const G4Event *); - - private: - RichTbIOData(); - static RichTbIOData* RichTbIODataInstance; - - std::ofstream OutputDataFS; - G4String aOutFileString; - bool m_IsFirstEvent; - + virtual ~RichTbIOData(); + static RichTbIOData *getRichTbIODataInstance(); + + void WriteOutEventHeaderData(const G4Event *); + void WriteOutHitData(const G4Event *); + +private: + RichTbIOData(); + static RichTbIOData *RichTbIODataInstance; + + std::ofstream OutputDataFS; + G4String aOutFileString; + bool m_IsFirstEvent; }; #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbLensGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbLensGeometryParameters.hh index 443b1285166569e392aadb0e4339724bdbca7e11..f96f01f148944c8700420c165103773e98fdf369 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbLensGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbLensGeometryParameters.hh @@ -1,32 +1,32 @@ // $Id: $ -#ifndef INCLUDE_RICHTBLENSGEOMETRYPARAMETERS_HH +#ifndef INCLUDE_RICHTBLENSGEOMETRYPARAMETERS_HH #define INCLUDE_RICHTBLENSGEOMETRYPARAMETERS_HH 1 // Include files /** @class RichTbVesselGeometryParameters RichTbVesselGeometryParameters.hh include/RichTbVesselGeometryParameters.hh - * + * * * @author Sajan EASO * @date 2003-10-21 */ -const G4double SphRadius1=402.0*CLHEP::mm; -const G4double SphRadius2=400.0*CLHEP::mm; -const G4double LensThickness = 10.0*CLHEP::mm; +const G4double SphRadius1 = 402.0 * CLHEP::mm; +const G4double SphRadius2 = 400.0 * CLHEP::mm; +const G4double LensThickness = 10.0 * CLHEP::mm; -const G4double CBoxXSize = 500.0*CLHEP::mm; -const G4double CBoxYSize = 500.0*CLHEP::mm; -const G4double CBoxZSize = 500.0*CLHEP::mm; +const G4double CBoxXSize = 500.0 * CLHEP::mm; +const G4double CBoxYSize = 500.0 * CLHEP::mm; +const G4double CBoxZSize = 500.0 * CLHEP::mm; -const G4double DistanceSph= SphRadius1 + SphRadius2 - LensThickness; +const G4double DistanceSph = SphRadius1 + SphRadius2 - LensThickness; -const G4double RichTbLensXLocation =0*CLHEP::mm; +const G4double RichTbLensXLocation = 0 * CLHEP::mm; -const G4double RichTbLensYLocation = 0*CLHEP::mm; -const G4double RichTbLensZLocation = 500*CLHEP::mm - 2*SphRadius2; +const G4double RichTbLensYLocation = 0 * CLHEP::mm; +const G4double RichTbLensZLocation = 500 * CLHEP::mm - 2 * SphRadius2; // now for variables used after creaxting the geometry in stepaction. -const G4double RichTbLensEnvPlateThickness=0.0*CLHEP::mm; +const G4double RichTbLensEnvPlateThickness = 0.0 * CLHEP::mm; #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMasterGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMasterGeometryParameters.hh index 6a6ff177262b723f74f932aea0774770cc97b93c..931f0deb2cf2174771516e7590da38707ddc7e4c 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMasterGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMasterGeometryParameters.hh @@ -1,51 +1,51 @@ // $Id: $ -#ifndef INCLUDE_RICHTBMASTERGEOMETRYPARAMETERS_HH +#ifndef INCLUDE_RICHTBMASTERGEOMETRYPARAMETERS_HH #define INCLUDE_RICHTBMASTERGEOMETRYPARAMETERS_HH 1 // Include files /** @class RichTbVesselGeometryParameters RichTbVesselGeometryParameters.hh include/RichTbVesselGeometryParameters.hh - * + * * * @author Sajan EASO * @date 2003-10-21 */ -const G4double RichTbMasterXSize=27.0*CLHEP::mm; -const G4double RichTbMasterYSize=27.0*CLHEP::mm; -const G4double RichTbMasterZSize=22.0*CLHEP::mm; +const G4double RichTbMasterXSize = 27.0 * CLHEP::mm; +const G4double RichTbMasterYSize = 27.0 * CLHEP::mm; +const G4double RichTbMasterZSize = 22.0 * CLHEP::mm; -const G4double RichTbMaster1XLocation = -57.0*CLHEP::mm; -const G4double RichTbMaster1YLocation = +13.5*CLHEP::mm; -const G4double RichTbMaster1ZLocation = 0.0*CLHEP::mm; +const G4double RichTbMaster1XLocation = -57.0 * CLHEP::mm; +const G4double RichTbMaster1YLocation = +13.5 * CLHEP::mm; +const G4double RichTbMaster1ZLocation = 0.0 * CLHEP::mm; -const G4double RichTbMaster2XLocation = -57.0*CLHEP::mm; -const G4double RichTbMaster2YLocation = -13.5*CLHEP::mm; -const G4double RichTbMaster2ZLocation = 0.0*CLHEP::mm; +const G4double RichTbMaster2XLocation = -57.0 * CLHEP::mm; +const G4double RichTbMaster2YLocation = -13.5 * CLHEP::mm; +const G4double RichTbMaster2ZLocation = 0.0 * CLHEP::mm; -const G4double RichTbMaster3XLocation = 57.0*CLHEP::mm; -const G4double RichTbMaster3YLocation = 13.5*CLHEP::mm; -const G4double RichTbMaster3ZLocation = 0.0*CLHEP::mm; +const G4double RichTbMaster3XLocation = 57.0 * CLHEP::mm; +const G4double RichTbMaster3YLocation = 13.5 * CLHEP::mm; +const G4double RichTbMaster3ZLocation = 0.0 * CLHEP::mm; -const G4double RichTbMaster4XLocation = 57.0*CLHEP::mm; -const G4double RichTbMaster4YLocation = -13.5*CLHEP::mm; -const G4double RichTbMaster4ZLocation = 0.0*CLHEP::mm; +const G4double RichTbMaster4XLocation = 57.0 * CLHEP::mm; +const G4double RichTbMaster4YLocation = -13.5 * CLHEP::mm; +const G4double RichTbMaster4ZLocation = 0.0 * CLHEP::mm; // now for variables used after creating the geometry in stepaction. -const G4double RichTbMasterEnvPlateThickness=0.0*CLHEP::mm; +const G4double RichTbMasterEnvPlateThickness = 0.0 * CLHEP::mm; // the following are not exact values. -//const G4double RichTbCrystalXNegExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX-RichTbCrystalXSize; -//const G4double RichTbCrystalXPosExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX; -//const G4double RichTbCrystalZUpsExtremeAlongCrystal= -RichTbCrystalUpsExternalPartZSize; -//const G4double RichTbCrystalZDnsExtremeAlongCrystal= -RichTbcrystalUpsExternalPartZSize+RichTbCrystalZSize; -//const G4double RichTbCrystalXNegExtreme= RichTbCrystalXNegExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ +// const G4double RichTbCrystalXNegExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX-RichTbCrystalXSize; +// const G4double RichTbCrystalXPosExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX; +// const G4double RichTbCrystalZUpsExtremeAlongCrystal= -RichTbCrystalUpsExternalPartZSize; +// const G4double RichTbCrystalZDnsExtremeAlongCrystal= -RichTbcrystalUpsExternalPartZSize+RichTbCrystalZSize; +// const G4double RichTbCrystalXNegExtreme= RichTbCrystalXNegExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ // RichTbCrystalZDnsExtremeAlongCrystal*sin(RichTbCrystalYRotation); -//const G4double RichTbCrystalXPosExtreme= RichTbCrystalXPosExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ +// const G4double RichTbCrystalXPosExtreme= RichTbCrystalXPosExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ // RichTbCrystalZUpsExtremeAlongCrystal*sin(RichTbCrystalYRotation); -//const G4double RichTbCrystalYNegExtreme= RichTbCrystalYLocation-0.5*RichTbCrystalYSize; -//const G4double RichTbCrystalYPosExtreme= RichTbCrystalYLocation+0.5*RichTbCrystalYSize; -//const G4double RichTbCrystalZDnsExtreme = -RichTbCrystalXNegExtremeAlongCrystal*sin(RichTbCrystalYRotation)+ +// const G4double RichTbCrystalYNegExtreme= RichTbCrystalYLocation-0.5*RichTbCrystalYSize; +// const G4double RichTbCrystalYPosExtreme= RichTbCrystalYLocation+0.5*RichTbCrystalYSize; +// const G4double RichTbCrystalZDnsExtreme = -RichTbCrystalXNegExtremeAlongCrystal*sin(RichTbCrystalYRotation)+ // RichTbCrystalZDnsExtremeAlongCrystal*cos(RichTbCrystalYRotation); -//const G4double RichTbCrystalDnsZEnd = RichTbCrystalZDnsExtreme; +// const G4double RichTbCrystalDnsZEnd = RichTbCrystalZDnsExtreme; #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMaterial.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMaterial.hh index dc36e7055923b6559fbedd117004d120888b0465..e6c7de4f8377dc0046c9f5a5fd80a1e89671b7f4 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMaterial.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMaterial.hh @@ -1,5 +1,5 @@ -//This is the declaration of the LHCb RICH Testbeam Material description. -//Author SE 1-3-2001 +// This is the declaration of the LHCb RICH Testbeam Material description. +// Author SE 1-3-2001 // #ifndef RichTbMaterial_h #define RichTbMaterial_h 1 @@ -13,93 +13,61 @@ class RichTbMaterial { - public: +public: + virtual ~RichTbMaterial(); + static RichTbMaterial *getRichTbMaterialInstance(); - virtual ~ RichTbMaterial(); - static RichTbMaterial* getRichTbMaterialInstance(); - - G4Material *getAir() { - return RichTbAmbientAir; - } + G4Material *getAir() { return RichTbAmbientAir; } - G4Material *getTAir() { - return RichTbTubeAir; - } + G4Material *getTAir() { return RichTbTubeAir; } - G4Material *getTAirA() { - return RichTbAirA; - } - G4Material* getNitrogenGas() {return RichTbNitrogenGas;} - G4Material* getc4f10Gas() {return RichTbc4f10Gas;} - G4Material* getMirrorQuartz() {return RichTbMirrorQuartz;} - G4Material* getRichTbVaccum() {return RichTbVaccum;} - G4Material* getAluminium() {return RichTbAluminium; } - G4Material* getCarbon() {return RichTbCarbon;} - - - - G4Material* getPMTTubeEnvelopeMaterial() - { - return PMTTubeEnvelopeMaterial; - } - G4Material* getPMTAnodeMaterial() - { - return PMTAnodeMaterial; - - } - G4Material* getPMTPhCathodeMaterial() - { - return PMTPhCathodeMaterial; - - } - G4Material* getPMTQuartzWindowMaterial() - { - return PMTQuartzWindowMaterial; - } - - G4Material* getCrystalMaterial() - { - return CrystalMaterial; - } + G4Material *getTAirA() { return RichTbAirA; } + G4Material *getNitrogenGas() { return RichTbNitrogenGas; } + G4Material *getc4f10Gas() { return RichTbc4f10Gas; } + G4Material *getMirrorQuartz() { return RichTbMirrorQuartz; } + G4Material *getRichTbVaccum() { return RichTbVaccum; } + G4Material *getAluminium() { return RichTbAluminium; } + G4Material *getCarbon() { return RichTbCarbon; } - G4Material* getRichTbGasWinQuartz() {return RichTbGasWinQuartz;} - G4Material* getHpdTubeEnvelopeMaterial (){ return HpdTubeEnvelopeMaterial;} - G4Material* getHpdQuartzWindowMaterial () { return HPDQuartzWindowMaterial;} - G4Material* getHpdPhCathodeMaterial () { return HPDPhCathodeMaterial;} - G4Material* getHpdSiDetMaterial () { return HpdSiDetMaterial;} - - - - private: - RichTbMaterial(); - static RichTbMaterial* RichTbMaterialInstance; - - G4Material * RichTbAmbientAir; - G4Material *RichTbTubeAir; - G4Material *RichTbAirA; + G4Material *getPMTTubeEnvelopeMaterial() { return PMTTubeEnvelopeMaterial; } + G4Material *getPMTAnodeMaterial() { return PMTAnodeMaterial; } + G4Material *getPMTPhCathodeMaterial() { return PMTPhCathodeMaterial; } + G4Material *getPMTQuartzWindowMaterial() { return PMTQuartzWindowMaterial; } - G4Material* RichTbNitrogenGas; - G4Material* RichTbc4f10Gas; - G4Material* RichTbMirrorQuartz; - G4Material* RichTbVaccum; - G4Material* RichTbAluminium; - G4Material* RichTbCarbon; - G4Material* PMTTubeEnvelopeMaterial; - G4Material* PMTAnodeMaterial; - G4Material* PMTQuartzWindowMaterial; - G4Material* CrystalMaterial; - G4Material* PMTPhCathodeMaterial; - G4Material* RichTbGasWinQuartz; - G4Material* HpdTubeEnvelopeMaterial; - G4Material* HpdQuartzWindowMaterial; - G4Material* HpdPhCathodeMaterial; - G4Material* HpdSiDetMaterial; - G4Material* HPDQuartzWindowMaterial; - G4Material* HPDPhCathodeMaterial; - + G4Material *getCrystalMaterial() { return CrystalMaterial; } -}; + G4Material *getRichTbGasWinQuartz() { return RichTbGasWinQuartz; } + G4Material *getHpdTubeEnvelopeMaterial() { return HpdTubeEnvelopeMaterial; } + G4Material *getHpdQuartzWindowMaterial() { return HPDQuartzWindowMaterial; } + G4Material *getHpdPhCathodeMaterial() { return HPDPhCathodeMaterial; } + G4Material *getHpdSiDetMaterial() { return HpdSiDetMaterial; } + +private: + RichTbMaterial(); + static RichTbMaterial *RichTbMaterialInstance; + G4Material *RichTbAmbientAir; + G4Material *RichTbTubeAir; + G4Material *RichTbAirA; + G4Material *RichTbNitrogenGas; + G4Material *RichTbc4f10Gas; + G4Material *RichTbMirrorQuartz; + G4Material *RichTbVaccum; + G4Material *RichTbAluminium; + G4Material *RichTbCarbon; + G4Material *PMTTubeEnvelopeMaterial; + G4Material *PMTAnodeMaterial; + G4Material *PMTQuartzWindowMaterial; + G4Material *CrystalMaterial; + G4Material *PMTPhCathodeMaterial; + G4Material *RichTbGasWinQuartz; + G4Material *HpdTubeEnvelopeMaterial; + G4Material *HpdQuartzWindowMaterial; + G4Material *HpdPhCathodeMaterial; + G4Material *HpdSiDetMaterial; + G4Material *HPDQuartzWindowMaterial; + G4Material *HPDPhCathodeMaterial; +}; -#endif /*RichTbMaterial_h */ +#endif /*RichTbMaterial_h */ diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMaterialParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMaterialParameters.hh index 9ef4bda7c3d45227d80a13189cadb0085d4fce7b..182b69e31ce05dc71d3bceb45b503684e3085b87 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMaterialParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMaterialParameters.hh @@ -6,142 +6,135 @@ #include "RichTbRunConfig.hh" #include "RichTbMiscNames.hh" -//k. +// k. #include "Geant4/G4PhysicalConstants.hh" extern void InitializeRichTbMaterial(); -extern void HistoRichMaterialProperty(); +extern void HistoRichMaterialProperty(); extern std::vector<G4double> InitN2RefPhotMom(); extern std::vector<G4double> Initc4f10RefPhotMom(); -extern G4double N2RefIndexAtAnEnergy(G4double,G4double,G4double); +extern G4double N2RefIndexAtAnEnergy(G4double, G4double, G4double); extern std::vector<G4double> InitN2RefIndex(G4double, G4double); extern std::vector<G4double> Initc4f10RefIndex(G4double, G4double); -extern G4double c4f10RefIndexAtAnEnergy(G4double,G4double,G4double); +extern G4double c4f10RefIndexAtAnEnergy(G4double, G4double, G4double); extern std::vector<G4double> InitializePhotonMomentumVector(); -extern std::vector<G4double> InitializePMTWaveL(G4int); +extern std::vector<G4double> InitializePMTWaveL(G4int); extern std::vector<G4double> InitializePMTQE(G4int); -extern G4double FresnelLossAtNormalIncidence(G4double,G4double); +extern G4double FresnelLossAtNormalIncidence(G4double, G4double); -extern std::vector<G4double> InitializeHpdWaveL(G4int); +extern std::vector<G4double> InitializeHpdWaveL(G4int); extern std::vector<G4double> InitializeHpdQE(G4int); - static const G4double PhotMomWaveConv = 1243.125; -static const G4double PhotMomToWaveLength = PhotMomWaveConv*(CLHEP::nanometer*CLHEP::eV); -static const G4double PhotWaveLengthToMom = PhotMomWaveConv*(CLHEP::eV*CLHEP::nanometer); +static const G4double PhotMomToWaveLength = PhotMomWaveConv * (CLHEP::nanometer * CLHEP::eV); +static const G4double PhotWaveLengthToMom = PhotMomWaveConv * (CLHEP::eV * CLHEP::nanometer); // Limits of Photon Energy and number of bins for the // Photon energy range. static const G4double PhotonMinEnergy = 1.3 * CLHEP::eV; -//static const G4double PhotonMinEnergy = 0.5 * CLHEP::eV; -//static const G4double PhotonMaxEnergy = 7.5 * CLHEP::eV; +// static const G4double PhotonMinEnergy = 0.5 * CLHEP::eV; +// static const G4double PhotonMaxEnergy = 7.5 * CLHEP::eV; static const G4double PhotonMaxEnergy = 6.5 * CLHEP::eV; static const G4int NumPhotWaveLengthBins = 1000; -const G4double PhotEnerStep = (PhotonMaxEnergy -PhotonMinEnergy)/ - (NumPhotWaveLengthBins); -const G4int PhotEnerBinEdgeForSafety=2; -//const G4int PhotEnerBinEdgeForSafety=20; -const G4double PhotonCkvProdMinEnergy = - PhotonMinEnergy+ PhotEnerBinEdgeForSafety*PhotEnerStep; -const G4double PhotonCkvProdMaxEnergy = - PhotonMaxEnergy-PhotEnerBinEdgeForSafety*PhotEnerStep; -const G4int CkvProdNumPhotWaveLengthBins= - NumPhotWaveLengthBins -2* PhotEnerBinEdgeForSafety; +const G4double PhotEnerStep = (PhotonMaxEnergy - PhotonMinEnergy) / (NumPhotWaveLengthBins); +const G4int PhotEnerBinEdgeForSafety = 2; +// const G4int PhotEnerBinEdgeForSafety=20; +const G4double PhotonCkvProdMinEnergy = PhotonMinEnergy + PhotEnerBinEdgeForSafety * PhotEnerStep; +const G4double PhotonCkvProdMaxEnergy = PhotonMaxEnergy - PhotEnerBinEdgeForSafety * PhotEnerStep; +const G4int CkvProdNumPhotWaveLengthBins = NumPhotWaveLengthBins - 2 * PhotEnerBinEdgeForSafety; const G4int NumPhotonRichMirrorReflWaveLengthBins = 26; // Defintion of STP pressure and temp -//static const G4double Pressure_STP=1.013*bar; -//static const G4double Temperature_STP=273.*CLHEP::kelvin +// static const G4double Pressure_STP=1.013*bar; +// static const G4double Temperature_STP=273.*CLHEP::kelvin const G4double GasPressure_STP = CLHEP::STP_Pressure; const G4double GasTemperature_STP = CLHEP::STP_Temperature; // sellmeir coef for nitrogen // Ref Index of nitrogen using sellmeir parametrization -const G4double SellN2E1=13.414; -const G4double SellN2E2=23.215; -const G4double SellN2F1=921.28; -const G4double SellN2F2=3569.60; -const G4double GasMolWeightN2=28.02; //unit is grams -const G4double GasRhoN2atSTP=0.00125053; //unit is gramPercm3 +const G4double SellN2E1 = 13.414; +const G4double SellN2E2 = 23.215; +const G4double SellN2F1 = 921.28; +const G4double SellN2F2 = 3569.60; +const G4double GasMolWeightN2 = 28.02; // unit is grams +const G4double GasRhoN2atSTP = 0.00125053; // unit is gramPercm3 // Ref Index of c4f10 using sellmeir parametrization -const G4double SellC4F10E1=18.938; -const G4double SellC4F10E2=50.0; -const G4double SellC4F10F1=12305.3; -const G4double SellC4F10F2=0.0; -const G4double GasMolWeightC4F10=138.0; //unit is grams -const G4double GasRhoC4F10atSTP=0.00964; //unit is gramPercm3 +const G4double SellC4F10E1 = 18.938; +const G4double SellC4F10E2 = 50.0; +const G4double SellC4F10F1 = 12305.3; +const G4double SellC4F10F2 = 0.0; +const G4double GasMolWeightC4F10 = 138.0; // unit is grams +const G4double GasRhoC4F10atSTP = 0.00964; // unit is gramPercm3 // Now for HPD // CHANGED JDICKENS (25/07/05) FOR TESTING const G4double PixelPMTPSFSigma = 50.0 * CLHEP::micrometer; // default -//const G4double PixelPMTPSFSigma = 0.0 * CLHEP::micrometer; +// const G4double PixelPMTPSFSigma = 0.0 * CLHEP::micrometer; // END OF CHANGE -//static const G4int NumDemagnificationParam=4; +// static const G4int NumDemagnificationParam=4; // The following change in March 2004. -//static const G4int NumDemagnificationParam=5; -//static const G4int NumDemagnificationParam=2; +// static const G4int NumDemagnificationParam=5; +// static const G4int NumDemagnificationParam=2; -const G4double PixelPMTDemagConstShift=0.04323*CLHEP::mm; +const G4double PixelPMTDemagConstShift = 0.04323 * CLHEP::mm; // The following shifts for constant term made in March 2004. SE -const G4double PixelPMTDemagNominalConstShiftX[]={0.0*CLHEP::mm,0.0*CLHEP::mm,0.0*CLHEP::mm,0.0*CLHEP::mm,0.0*CLHEP::mm,0.0*CLHEP::mm}; -const G4double PixelPMTDemagNominalConstShiftY[]={0.0*CLHEP::mm,0.0*CLHEP::mm,0.0*CLHEP::mm,0.0*CLHEP::mm,0.0*CLHEP::mm,0.0*CLHEP::mm}; +const G4double PixelPMTDemagNominalConstShiftX[] = {0.0 * CLHEP::mm, 0.0 * CLHEP::mm, 0.0 * CLHEP::mm, + 0.0 * CLHEP::mm, 0.0 * CLHEP::mm, 0.0 * CLHEP::mm}; +const G4double PixelPMTDemagNominalConstShiftY[] = {0.0 * CLHEP::mm, 0.0 * CLHEP::mm, 0.0 * CLHEP::mm, + 0.0 * CLHEP::mm, 0.0 * CLHEP::mm, 0.0 * CLHEP::mm}; // CHANGED JDICKENS 20/06/05 -//const G4double PixelPMTDemagLinearFactor=-0.2018; // *default* -//const G4double PixelPMTDemagLinearFactor=-0.1994; // Thierry Data +// const G4double PixelPMTDemagLinearFactor=-0.2018; // *default* +// const G4double PixelPMTDemagLinearFactor=-0.1994; // Thierry Data const G4double PixelPMTDemagLinearFactor = -0.1772; // make rings match -//const G4double PixelPMTDemagQuadraticFactor=0.000741*(1.0/CLHEP::mm); // *default* -//const G4double PixelPMTDemagQuadraticFactor=0.0007*(1.0/CLHEP::mm); // Thierry Data -const G4double PixelPMTDemagQuadraticFactor=0.0*(1.0/CLHEP::mm); // make rings match +// const G4double PixelPMTDemagQuadraticFactor=0.000741*(1.0/CLHEP::mm); // *default* +// const G4double PixelPMTDemagQuadraticFactor=0.0007*(1.0/CLHEP::mm); // Thierry Data +const G4double PixelPMTDemagQuadraticFactor = 0.0 * (1.0 / CLHEP::mm); // make rings match // END OF CHANGE -const G4double PixelPMTDemagErrorLinearFactor=0.0; +const G4double PixelPMTDemagErrorLinearFactor = 0.0; -//static const G4int PmtQENumBins= 18; //SILICON TEST -static const G4int PmtQENumBins= 60; -//static const G4int PMTQENumBins= 31; +// static const G4int PmtQENumBins= 18; //SILICON TEST +static const G4int PmtQENumBins = 60; +// static const G4int PMTQENumBins= 31; -const G4double PMTQEReductionFactor=1.0; -const G4double PmtQEWaveLenUnits= 1.0*CLHEP::nanometer; +const G4double PMTQEReductionFactor = 1.0; +const G4double PmtQEWaveLenUnits = 1.0 * CLHEP::nanometer; // since the quartz window of hpd cuts off at 200 nm. // now use the QE values measured in June 2004. SE Sept 6,2004. // PMT labels L0= 0, L1=1, C0=2, C1=3, R0=4, R1=5 // nominal values for PMT QE in 2014 testbeam +const G4double PmtQEWaveLen[] = {180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, + 330, 340, 350, 360, 370, 380, 390, 400, 410, 420, 430, 440, 450, 460, 470, + 480, 490, 500, 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, 610, 620, + 630, 640, 650, 660, 670, 680, 690, 700, 710, 720, 730, 740, 750, 760, 770}; -const G4double PmtQEWaveLen[] = -{ 180,190,200,210, 220,230,240,250,260,270, 280, 290, - 300,310, 320,330,340,350,360,370, 380, 390, - 400,410, 420,430,440,450,460,470, 480, 490, - 500,510, 520,530,540,550,560,570, 580, 590, - 600,610, 620,630,640,650,660,670, 680, 690, - 700,710, 720,730,740,750,760,770 }; - -//for testing of silicon pmts -//const G4double PmtQEWaveLen[] = +// for testing of silicon pmts +// const G4double PmtQEWaveLen[] = // {200,208,220,243,255,273,293,315,344,373,410,460,500, // 555,623,685,760,800,831,860,881,910,931,950,968,990}; -//const G4double PmtQEWaveLen[] = +// const G4double PmtQEWaveLen[] = // {321,335,352,374,400,421,448,476,510,549,592,625, // 673,715,766,821,854,899}; -//const G4double PmtSiliconQEPerCent1[] = +// const G4double PmtSiliconQEPerCent1[] = // {1.6,10,21,27,34,44,57,65,72,76,79,80.6,81.3,80.3,80,79.2, // 78.3,77.5,73,66.3,59,47.5,37,29.5,21.7,13.7 //}; -//const G4double PmtSiliconQEPerCent2[] = +// const G4double PmtSiliconQEPerCent2[] = // {4.1,12.6,24.5,34.5,41.8,45.0,47.1,47.5,44.5,39.3,33.4, // 28.0,22.7,17.9,13.2,8.0,6.8,5.0 //}; -//const G4double PmtQEPerCent[] = +// const G4double PmtQEPerCent[] = //{0,0,0,0.5,1,1.5,10,13,16.5,20,23.6,27.2, // 31,32,33,34,35,35,35,34.5,34,33.5, // 33,32.5,32,31.2,30,28,25.9,23.8,21.7,19.6, @@ -149,226 +142,161 @@ const G4double PmtQEWaveLen[] = // 2.29,1.71,1.21,0.77,0.49,0.3,0.18,0.1,0.06,0.03, // 0.0181,0.01,0.0056,0.0028,0.0014,0.0007,0,0 //}; -//BS entrance window -const G4double Pmt2QEPerCent[] = -{0,0,0,0,0,0,0,6.3,13.7,19.8,24.3,28.3, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; - -const G4double PmtQEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; -//UV entrance window -const G4double Pmt0QEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; -const G4double Pmt1QEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; - -const G4double Pmt3QEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; - -const G4double Pmt4QEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; - - -const G4double Pmt5QEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; -const G4double Pmt6QEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; - -const G4double Pmt7QEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; - -const G4double Pmt8QEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; -const G4double Pmt9QEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; - -const G4double Pmt10QEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; - -const G4double Pmt11QEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; - -const G4double Pmt12QEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; - -const G4double Pmt13QEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; - -const G4double Pmt14QEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; - -const G4double Pmt15QEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; - -const G4double Pmt16QEPerCent[] = -{0,0,11.5,13.2,15.2,17.0,19.3,21.3,23.1,24.7,27.2,29.4, - 31.2,33.2,34.3,35.0,35.1,35.2,35.0,34.6,34.4,34.4, - 33.6,32.8,31.8,31.0,29.5,28.2,26.6,24.4,22.6,20.9, - 19.6,18.3,16.5,13.4,10.4,8.3,7.0,5.9,4.9,4.1, - 3.3,2.5,1.8,1.3,0.9,0.5,0.3,0.2,0.1,0.1, - 0.0,0.0,0.0,0.0,0.0,0.0,0,0 -}; - -//std::vector<G4double> Pmt0QEPerCent= PmtQEPerCent; -//std::vector<G4double> Pmt1QEPerCent= PmtQEPerCent; -//std::vector<G4double> Pmt2QEPerCent= PmtQEPerCent; -//std::vector<G4double> Pmt3QEPerCent= PmtQEPerCent; -//std::vector<G4double> Pmt4QEPerCent= PmtQEPerCent; -//std::vector<G4double> Pmt5QEPerCent= PmtQEPerCent; -//std::vector<G4double> Pmt6QEPerCent= PmtQEPerCent; -//std::vector<G4double> Pmt7QEPerCent= PmtQEPerCent; - - - - - -//const G4double PMTQEWaveLen[]= +// BS entrance window +const G4double Pmt2QEPerCent[] = {0, 0, 0, 0, 0, 0, 0, 6.3, 13.7, 19.8, 24.3, 28.3, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; + +const G4double PmtQEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; +// UV entrance window +const G4double Pmt0QEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; +const G4double Pmt1QEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; + +const G4double Pmt3QEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; + +const G4double Pmt4QEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; + +const G4double Pmt5QEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; +const G4double Pmt6QEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; + +const G4double Pmt7QEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; + +const G4double Pmt8QEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; +const G4double Pmt9QEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; + +const G4double Pmt10QEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; + +const G4double Pmt11QEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; + +const G4double Pmt12QEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; + +const G4double Pmt13QEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; + +const G4double Pmt14QEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; + +const G4double Pmt15QEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; + +const G4double Pmt16QEPerCent[] = {0, 0, 11.5, 13.2, 15.2, 17.0, 19.3, 21.3, 23.1, 24.7, 27.2, 29.4, + 31.2, 33.2, 34.3, 35.0, 35.1, 35.2, 35.0, 34.6, 34.4, 34.4, 33.6, 32.8, + 31.8, 31.0, 29.5, 28.2, 26.6, 24.4, 22.6, 20.9, 19.6, 18.3, 16.5, 13.4, + 10.4, 8.3, 7.0, 5.9, 4.9, 4.1, 3.3, 2.5, 1.8, 1.3, 0.9, 0.5, + 0.3, 0.2, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0}; + +// std::vector<G4double> Pmt0QEPerCent= PmtQEPerCent; +// std::vector<G4double> Pmt1QEPerCent= PmtQEPerCent; +// std::vector<G4double> Pmt2QEPerCent= PmtQEPerCent; +// std::vector<G4double> Pmt3QEPerCent= PmtQEPerCent; +// std::vector<G4double> Pmt4QEPerCent= PmtQEPerCent; +// std::vector<G4double> Pmt5QEPerCent= PmtQEPerCent; +// std::vector<G4double> Pmt6QEPerCent= PmtQEPerCent; +// std::vector<G4double> Pmt7QEPerCent= PmtQEPerCent; + +// const G4double PMTQEWaveLen[]= // {200.0, 240.0, 270.0, 300.0, 320.0, 360.0, 400.0, 440.0, 480.0, // 520.0, 560.0, 600.0, 640.0, 700.0, 750.0, 800.0, 830.0, // 850.0, 880.0, 900.0 // }; - -//const G4double PMT0QEPerCent[]= +// const G4double PMT0QEPerCent[]= // {10.21, 20.44, 23.04, 19.87, 17.61, 17.31, 19.80, 18.47, // 14.89, 12.62, 10.45, 8.38, 6.83, 4.93, 3.11,1.62,0.98,0.68,0.22,0.05 // }; -//const G4double PMT1QEPerCent[]= +// const G4double PMT1QEPerCent[]= // { 8.95, 19.44, 22.38, 19.46, 17.74, 17.24, 18.46, 15.78, 12.11, // 9.59, 7.23, 5.10, 3.57, 1.57, 0.37, 0.02, 0.01, 0.0, 0.0, 0.0 // }; -//const G4double PMT2QEPerCent[]= +// const G4double PMT2QEPerCent[]= // {8.70, 24.17, 27.90, 24.63,22.19,21.67,23.29,19.39,15.69,12.37, // 9.27,6.25,4.05,1.17,0.12,0.0,0.0,0.0,0.0,0.0 // }; -//static const G4int PMTQuartzRefIndNumBins=29; +// static const G4int PMTQuartzRefIndNumBins=29; // extra two bins added, one at each edge, // to cover the wavelength // range of other materals. -static const G4int PMTQuartzRefIndNumBins=31; -//static const G4int CrystalMatRefIndNumBins=51; -static const G4int CrystalMatRefIndNumBins=52; - -const G4double PMTQuartzRefWaveLenUnits= 1.0*CLHEP::nanometer; -const G4double CrystalMatRefWaveLenUnits= 1.0*CLHEP::nanometer; - -const G4double PMTQuartzRefWaveLenValues[]= -{150.0, 185.41, 193.53, 202.54, 206.20, 214.45, 226.50, 232.94, - 250.20, 253.70, 257.62, 274.87, 298.06, 328.36, 340.36,346.69, - 361.17, 398.84, 435.83, 486.13, 546.07, 587.56, 589.00, 589.60, - 656.27, 670.00, 680.00, 690.00, 700.00, 800.00,1200.0 -}; -const G4double PMTQuartzRefIndexValues[]= -{1.57464,1.57464, 1.56071, 1.54729, 1.54269, 1.53385, 1.52318, - 1.51834, 1.50762, 1.50590, 1.50397, 1.49634, 1.48859, - 1.48183, 1.47877, 1.47766, 1.47520, 1.47028, 1.46679, - 1.46324, 1.46021, 1.45857, 1.45853, 1.45851, 1.45646, - 1.456066, 1.455818, 1.455579, 1.455347, 1.453371,1.453371 -}; - -//const G4double CrystalMatRefWaveLenValues[]= +static const G4int PMTQuartzRefIndNumBins = 31; +// static const G4int CrystalMatRefIndNumBins=51; +static const G4int CrystalMatRefIndNumBins = 52; + +const G4double PMTQuartzRefWaveLenUnits = 1.0 * CLHEP::nanometer; +const G4double CrystalMatRefWaveLenUnits = 1.0 * CLHEP::nanometer; + +const G4double PMTQuartzRefWaveLenValues[] = {150.0, 185.41, 193.53, 202.54, 206.20, 214.45, 226.50, 232.94, + 250.20, 253.70, 257.62, 274.87, 298.06, 328.36, 340.36, 346.69, + 361.17, 398.84, 435.83, 486.13, 546.07, 587.56, 589.00, 589.60, + 656.27, 670.00, 680.00, 690.00, 700.00, 800.00, 1200.0}; +const G4double PMTQuartzRefIndexValues[] = {1.57464, 1.57464, 1.56071, 1.54729, 1.54269, 1.53385, 1.52318, 1.51834, + 1.50762, 1.50590, 1.50397, 1.49634, 1.48859, 1.48183, 1.47877, 1.47766, + 1.47520, 1.47028, 1.46679, 1.46324, 1.46021, 1.45857, 1.45853, 1.45851, + 1.45646, 1.456066, 1.455818, 1.455579, 1.455347, 1.453371, 1.453371}; + +// const G4double CrystalMatRefWaveLenValues[]= // {300,344,388,432,476,520,564,608,652,696, // 740,784,828,872,916,960,1004,1048,1092,1136, // 1180,1224,1268,1312,1356,1400,1444,1488,1532,1576, @@ -376,7 +304,7 @@ const G4double PMTQuartzRefIndexValues[]= // 2060,2104,2148,2192,2236,2280,2324,2368,2412,2456, // 2500 // }; -//const G4double CrystalMatRefIndexValues[]= +// const G4double CrystalMatRefIndexValues[]= // {1.5527702635739,1.5404466868331,1.5325277321700,1.5270784291406,1.5231331738499, // 1.5201596882463,1.5178426478869,1.5159846691816,1.5144566604975,1.5131711117948, // 1.5120668948646,1.5111002059336,1.5102389559626,1.5094591800239,1.5087426727363, @@ -391,44 +319,34 @@ const G4double PMTQuartzRefIndexValues[]= // // }; -const G4double CrystalMatRefWaveLenValues[]= -{200,300,344,388,432,476,520,564,608,652,696, - 740,784,828,872,916,960,1004,1048,1092,1136, - 1180,1224,1268,1312,1356,1400,1444,1488,1532,1576, - 1620,1664,1708,1752,1796,1840,1884,1928,1972,2016, - 2060,2104,2148,2192,2236,2280,2324,2368,2412,2456, - 2500 -}; -const G4double CrystalMatRefIndexValues[]= { 1.5727702635739, - 1.5527702635739,1.5404466868331,1.5325277321700,1.5270784291406,1.5231331738499, - 1.5201596882463,1.5178426478869,1.5159846691816,1.5144566604975,1.5131711117948, - 1.5120668948646,1.5111002059336,1.5102389559626,1.5094591800239,1.5087426727363, - 1.5080753919142,1.5074463569456,1.5068468735887,1.5062699788386,1.5057100370628, - 1.5051624419507,1.5046233936610,1.5040897301904,1.5035587983604,1.5030283541053, - 1.5024964846769,1.5019615474168,1.5014221211688,1.5008769674285,1.5003249990526, - 1.4997652548858,1.4991968790539,1.4986191039608,1.4980312362468,1.4974326451267, - 1.4968227526526,1.4962010255422,1.4955669682860,1.4949201173049,1.4942600359742, - 1.4935863103651,1.4928985455839,1.4921963626087,1.4914793955446,1.4907472892292, - 1.4899996971337,1.4892362795147,1.4884567017771,1.4876606330169,1.4868477447166, - 1.4860177095710 +const G4double CrystalMatRefWaveLenValues[] = { + 200, 300, 344, 388, 432, 476, 520, 564, 608, 652, 696, 740, 784, 828, 872, 916, 960, 1004, + 1048, 1092, 1136, 1180, 1224, 1268, 1312, 1356, 1400, 1444, 1488, 1532, 1576, 1620, 1664, 1708, 1752, 1796, + 1840, 1884, 1928, 1972, 2016, 2060, 2104, 2148, 2192, 2236, 2280, 2324, 2368, 2412, 2456, 2500}; +const G4double CrystalMatRefIndexValues[] = { + 1.5727702635739, 1.5527702635739, 1.5404466868331, 1.5325277321700, 1.5270784291406, 1.5231331738499, + 1.5201596882463, 1.5178426478869, 1.5159846691816, 1.5144566604975, 1.5131711117948, 1.5120668948646, + 1.5111002059336, 1.5102389559626, 1.5094591800239, 1.5087426727363, 1.5080753919142, 1.5074463569456, + 1.5068468735887, 1.5062699788386, 1.5057100370628, 1.5051624419507, 1.5046233936610, 1.5040897301904, + 1.5035587983604, 1.5030283541053, 1.5024964846769, 1.5019615474168, 1.5014221211688, 1.5008769674285, + 1.5003249990526, 1.4997652548858, 1.4991968790539, 1.4986191039608, 1.4980312362468, 1.4974326451267, + 1.4968227526526, 1.4962010255422, 1.4955669682860, 1.4949201173049, 1.4942600359742, 1.4935863103651, + 1.4928985455839, 1.4921963626087, 1.4914793955446, 1.4907472892292, 1.4899996971337, 1.4892362795147, + 1.4884567017771, 1.4876606330169, 1.4868477447166, 1.4860177095710 }; -//const G4double CrystalMatRefIndexValues[]= +// const G4double CrystalMatRefIndexValues[]= //{ //}; +const G4double CrystalMatAbsorptionValues[] = { + 0.0, 0.0, 55.0, 282.5, 439.9, 555.3, 644.7, 706.3, 616.9, 558.9, 546.4, 505.9, 447.4, + 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, + 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, + 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32, 1.E32}; - -const G4double CrystalMatAbsorptionValues[]= -{0.0,0.0,55.0,282.5,439.9,555.3,644.7,706.3,616.9,558.9,546.4, - 505.9,447.4,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32, - 1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32, - 1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32, - 1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32, - 1.E32}; - -//const G4double CrystalMatAbsorptionValues[]= +// const G4double CrystalMatAbsorptionValues[]= //{0,10,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32, // 1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32, // 1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32, @@ -436,99 +354,83 @@ const G4double CrystalMatAbsorptionValues[]= // 1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32,1.E32, // 1.E32}; - - - // now for the ref index of the ph cathode derived from the following // value measured by Naoko. The ref index is derived using the fresnel formula // and the ref index of PMTquartz. The derivation is done in RichMaterial.cc. -const G4double PMTQwPhReflectionProb=0.02; -const G4double HPDQwPhReflectionProb=0.02; +const G4double PMTQwPhReflectionProb = 0.02; +const G4double HPDQwPhReflectionProb = 0.02; // now for the transmission of light through the photocathode. // The results of the measurement so far show the transmission in // photocathode*reflection at silicon= 0.065 above 550nm and 0.025 below // 550 nm. Until this is disentangled, the silicon is set to be 30% reflecting // and the transmission in photocathode to be responsible for the rest of the 0.065 and 0.025 // values measured. In the following the 0.3 is for the Si surface reflectivity assumed so far. -const G4double PMTSiDetSurfaceReflectivity=0.3; +const G4double PMTSiDetSurfaceReflectivity = 0.3; -const G4double PMTPhCathodeTransRed=(0.065/PMTSiDetSurfaceReflectivity) ; -const G4double PMTPhCathodeTransBlue=(0.025/PMTSiDetSurfaceReflectivity); -const G4double PMTPhCathodeRedBlueBoundary=550.0*CLHEP::nanometer; +const G4double PMTPhCathodeTransRed = (0.065 / PMTSiDetSurfaceReflectivity); +const G4double PMTPhCathodeTransBlue = (0.025 / PMTSiDetSurfaceReflectivity); +const G4double PMTPhCathodeRedBlueBoundary = 550.0 * CLHEP::nanometer; -const G4double HPDPhCathodeTransRed=(0.065/PMTSiDetSurfaceReflectivity) ; -const G4double HPDPhCathodeTransBlue=(0.025/PMTSiDetSurfaceReflectivity); -const G4double HPDPhCathodeRedBlueBoundary=550.0*CLHEP::nanometer; +const G4double HPDPhCathodeTransRed = (0.065 / PMTSiDetSurfaceReflectivity); +const G4double HPDPhCathodeTransBlue = (0.025 / PMTSiDetSurfaceReflectivity); +const G4double HPDPhCathodeRedBlueBoundary = 550.0 * CLHEP::nanometer; const G4double backscaprob = 0.18; -const G4double bckKillFactor=0.5; +const G4double bckKillFactor = 0.5; // The following parameter can be overridden using // the values in the options file. (SE November 2004). // hence the following parameter is a default value only. -//const G4double PMTelectronicsDetAbsEff=0.9; -const G4double PMTelectronicsDetAbsEff=0.87; +// const G4double PMTelectronicsDetAbsEff=0.9; +const G4double PMTelectronicsDetAbsEff = 0.87; const G4double HpdelectronicsDetAbsEff = 0.85; // now for the nominal refractive index of Gas Quartz Window -const G4double GasQuartzWindowNominalRefIndex=1.40; +const G4double GasQuartzWindowNominalRefIndex = 1.40; // now for the gas quartzWindow transmission measurements. -const G4int numGasQuTransBins= 38; -const G4double GasQuTransWlenValues [] = -{190.0, 200.0, 210.0, 220.0, 230.0, 240.0, 250.0, 260.0, 270.0, 280.0, 290.0, 300.0, 310.0, - 320.0, 340.0, 360.0, 380.0, 400.0, 420.0, 440.0, 460.0, 480.0, 500.0, 520.0, 540.0, 560.0, - 580.0, 600.0, 620.0, 640.0, 660.0, 680.0, 700.0, 720.0, 740.0, 760.0, 780.0, 800.0}; - -const G4double GasQuTransmissionValues [] = -{0.842326088, 0.846021534, 0.873896705, 0.899239713, 0.904766085, 0.892395354, 0.905442944, - 0.916895386, 0.924896759, 0.926322055, 0.926729364, 0.92546999, 0.924850007, 0.931886665, - 0.936234369, 0.939103324, 0.936502177, 0.936451404, 0.933651249, 0.936923238, 0.937613364, - 0.93764767, 0.937041811, 0.941847013, 0.940911554, 0.942555595, 0.943165589, 0.943507436, - 0.943549418, 0.94442271, 0.944210076, 0.944153405, 0.946732578, 0.947069746, 0.945611816, - 0.943229139, 0.947273101, 0.949254646}; - +const G4int numGasQuTransBins = 38; +const G4double GasQuTransWlenValues[] = {190.0, 200.0, 210.0, 220.0, 230.0, 240.0, 250.0, 260.0, 270.0, 280.0, + 290.0, 300.0, 310.0, 320.0, 340.0, 360.0, 380.0, 400.0, 420.0, 440.0, + 460.0, 480.0, 500.0, 520.0, 540.0, 560.0, 580.0, 600.0, 620.0, 640.0, + 660.0, 680.0, 700.0, 720.0, 740.0, 760.0, 780.0, 800.0}; +const G4double GasQuTransmissionValues[] = { + 0.842326088, 0.846021534, 0.873896705, 0.899239713, 0.904766085, 0.892395354, 0.905442944, 0.916895386, + 0.924896759, 0.926322055, 0.926729364, 0.92546999, 0.924850007, 0.931886665, 0.936234369, 0.939103324, + 0.936502177, 0.936451404, 0.933651249, 0.936923238, 0.937613364, 0.93764767, 0.937041811, 0.941847013, + 0.940911554, 0.942555595, 0.943165589, 0.943507436, 0.943549418, 0.94442271, 0.944210076, 0.944153405, + 0.946732578, 0.947069746, 0.945611816, 0.943229139, 0.947273101, 0.949254646}; // now for HPD const G4double PixelHpdPSFSigma = 50.0 * CLHEP::micrometer; // default -static const G4int NumDemagnificationParam=2; -//const G4double PixelHpdDemagLinearFactor = -0.1772; // make rings match -const G4double PixelHpdDemagLinearFactor = -0.23; // make rings match -const G4double PixelHpdDemagQuadraticFactor=0.0*(1.0/CLHEP::mm); // make rings match -static const G4int HpdQENumBins= 20; -const G4double HpdQEReductionFactor=1.0; -const G4double HpdQEWaveLenUnits= 1.0*CLHEP::nanometer; -const G4double HpdQEWaveLen[]= -{200.0, 240.0, 270.0, 300.0, 320.0, 360.0, 400.0, 440.0, 480.0, 520.0, - 560.0, 600.0, 640.0, 700.0, 750.0, 800.0, 830.0, 850.0, 880.0, 900.0}; -const G4double Hpd0QEPerCent[]= -{19.0, 28.02, 31.3, 27.3, 24.7, 24.2, 24.0, 20.8, 17.5, 13.4, - 10.0, 7.3, 4.6, 1.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -static const G4int HPDQuartzRefIndNumBins=31; -const G4double HPDQuartzRefWaveLenUnits= 1.0*CLHEP::nanometer; - -const G4double HPDQuartzRefWaveLenValues[]= -{150.0, 185.41, 193.53, 202.54, 206.20, 214.45, 226.50, 232.94, - 250.20, 253.70, 257.62, 274.87, 298.06, 328.36, 340.36,346.69, - 361.17, 398.84, 435.83, 486.13, 546.07, 587.56, 589.00, 589.60, - 656.27, 670.00, 680.00, 690.00, 700.00, 800.00,1200.0 -}; -const G4double HPDQuartzRefIndexValues[]= -{1.57464,1.57464, 1.56071, 1.54729, 1.54269, 1.53385, 1.52318, - 1.51834, 1.50762, 1.50590, 1.50397, 1.49634, 1.48859, - 1.48183, 1.47877, 1.47766, 1.47520, 1.47028, 1.46679, - 1.46324, 1.46021, 1.45857, 1.45853, 1.45851, 1.45646, - 1.456066, 1.455818, 1.455579, 1.455347, 1.453371,1.453371 -}; - +static const G4int NumDemagnificationParam = 2; +// const G4double PixelHpdDemagLinearFactor = -0.1772; // make rings match +const G4double PixelHpdDemagLinearFactor = -0.23; // make rings match +const G4double PixelHpdDemagQuadraticFactor = 0.0 * (1.0 / CLHEP::mm); // make rings match +static const G4int HpdQENumBins = 20; +const G4double HpdQEReductionFactor = 1.0; +const G4double HpdQEWaveLenUnits = 1.0 * CLHEP::nanometer; +const G4double HpdQEWaveLen[] = {200.0, 240.0, 270.0, 300.0, 320.0, 360.0, 400.0, 440.0, 480.0, 520.0, + 560.0, 600.0, 640.0, 700.0, 750.0, 800.0, 830.0, 850.0, 880.0, 900.0}; +const G4double Hpd0QEPerCent[] = {19.0, 28.02, 31.3, 27.3, 24.7, 24.2, 24.0, 20.8, 17.5, 13.4, + 10.0, 7.3, 4.6, 1.3, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0}; + +static const G4int HPDQuartzRefIndNumBins = 31; +const G4double HPDQuartzRefWaveLenUnits = 1.0 * CLHEP::nanometer; + +const G4double HPDQuartzRefWaveLenValues[] = {150.0, 185.41, 193.53, 202.54, 206.20, 214.45, 226.50, 232.94, + 250.20, 253.70, 257.62, 274.87, 298.06, 328.36, 340.36, 346.69, + 361.17, 398.84, 435.83, 486.13, 546.07, 587.56, 589.00, 589.60, + 656.27, 670.00, 680.00, 690.00, 700.00, 800.00, 1200.0}; +const G4double HPDQuartzRefIndexValues[] = {1.57464, 1.57464, 1.56071, 1.54729, 1.54269, 1.53385, 1.52318, 1.51834, + 1.50762, 1.50590, 1.50397, 1.49634, 1.48859, 1.48183, 1.47877, 1.47766, + 1.47520, 1.47028, 1.46679, 1.46324, 1.46021, 1.45857, 1.45853, 1.45851, + 1.45646, 1.456066, 1.455818, 1.455579, 1.455347, 1.453371, 1.453371}; #include "RichTbMiscNames.hh" - - -#endif /*RichTbMaterialParameters_h */ +#endif /*RichTbMaterialParameters_h */ diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMirrorGeometryParamters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMirrorGeometryParamters.hh index b8189496a5dacf18ab8b165da792d55509871bda..3ceec221d6fd68bf8e8d79901e41132cb188ef8b 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMirrorGeometryParamters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMirrorGeometryParamters.hh @@ -4,57 +4,52 @@ // Include files -//const G4double MirrorGap = 1.0* CLHEP::mm; -const G4double MirrorGap = 0.0* CLHEP::mm; +// const G4double MirrorGap = 1.0* CLHEP::mm; +const G4double MirrorGap = 0.0 * CLHEP::mm; -const G4double MirrorInnerRadius = SphereRadius+MirrorGap; +const G4double MirrorInnerRadius = SphereRadius + MirrorGap; -const G4double MirrorThickness = 5.0*CLHEP::mm; +const G4double MirrorThickness = 5.0 * CLHEP::mm; -const G4double MirrorOuterRadius = MirrorInnerRadius+ MirrorThickness; +const G4double MirrorOuterRadius = MirrorInnerRadius + MirrorThickness; -const G4double MirrorSubBoxLargeXSize=500*CLHEP::mm; -const G4double MirrorSubBoxLargeYSize=500*CLHEP::mm; -const G4double MirrorSubBoxLargeZSize=500*CLHEP::mm; -const G4double MirrorSubBoxShiftY= 0.5*Box2YSize; +const G4double MirrorSubBoxLargeXSize = 500 * CLHEP::mm; +const G4double MirrorSubBoxLargeYSize = 500 * CLHEP::mm; +const G4double MirrorSubBoxLargeZSize = 500 * CLHEP::mm; +const G4double MirrorSubBoxShiftY = 0.5 * Box2YSize; -const G4double MirrorSubBoxYPosTop = 0.5*MirrorSubBoxLargeYSize+ MirrorSubBoxShiftY; -const G4double MirrorSubBoxYPosBot = -0.5*MirrorSubBoxLargeYSize - MirrorSubBoxShiftY; +const G4double MirrorSubBoxYPosTop = 0.5 * MirrorSubBoxLargeYSize + MirrorSubBoxShiftY; +const G4double MirrorSubBoxYPosBot = -0.5 * MirrorSubBoxLargeYSize - MirrorSubBoxShiftY; +// const G4double MirrorMinExtent=40.0*CLHEP::mm; +// const G4double MirrorMaxExtent=60.0*CLHEP::mm; -//const G4double MirrorMinExtent=40.0*CLHEP::mm; -//const G4double MirrorMaxExtent=60.0*CLHEP::mm; +const G4double MirrorMinExtent = 39.5 * CLHEP::mm; +const G4double MirrorMaxExtent = 58.2 * CLHEP::mm; -const G4double MirrorMinExtent=39.5*CLHEP::mm; -const G4double MirrorMaxExtent=58.2*CLHEP::mm; +const G4double MirrorMinThetaExtent = MirrorMinExtent / MirrorInnerRadius; +const G4double MirrorMaxThetaExtent = MirrorMaxExtent / MirrorInnerRadius; -const G4double MirrorMinThetaExtent = MirrorMinExtent/MirrorInnerRadius; -const G4double MirrorMaxThetaExtent = MirrorMaxExtent/MirrorInnerRadius; +const G4double MirrorPosX = 0.0; +const G4double MirrorPosZ = SphereRadius; +const G4double MirrorPosY = 0.0; - -const G4double MirrorPosX =0.0; -const G4double MirrorPosZ = SphereRadius; -const G4double MirrorPosY =0.0; - -//testbeam upgrade 2015 -const G4double MirrorGap15 = 0.0* CLHEP::mm; +// testbeam upgrade 2015 +const G4double MirrorGap15 = 0.0 * CLHEP::mm; const G4double MirrorInnerRadius15 = SphereRadius15 + MirrorGap15; -const G4double MirrorThickness15 = 5.0*CLHEP::mm; -const G4double MirrorOuterRadius15 = MirrorInnerRadius15+ MirrorThickness15; - -const G4double MirrorMinExtent15=33.0*CLHEP::mm; -const G4double MirrorMaxExtent15=55.0*CLHEP::mm; -//const G4double MirrorMinThetaExtent15 = MirrorMinExtent/MirrorInnerRadius15; -//const G4double MirrorMaxThetaExtent15 = MirrorMaxExtent/MirrorInnerRadius15; -const G4double MirrorMinThetaExtent15 = MirrorMinExtent15/MirrorInnerRadius15; -const G4double MirrorMaxThetaExtent15 = MirrorMaxExtent15/MirrorInnerRadius15; - -const G4double MirrorPosX15 =0.0; -const G4double MirrorPosY15 =0.0; -const G4double MirrorPosZ15 = SphereRadius15; -const G4double MirrorVolPosZ15 = 0.0; - - - +const G4double MirrorThickness15 = 5.0 * CLHEP::mm; +const G4double MirrorOuterRadius15 = MirrorInnerRadius15 + MirrorThickness15; + +const G4double MirrorMinExtent15 = 33.0 * CLHEP::mm; +const G4double MirrorMaxExtent15 = 55.0 * CLHEP::mm; +// const G4double MirrorMinThetaExtent15 = MirrorMinExtent/MirrorInnerRadius15; +// const G4double MirrorMaxThetaExtent15 = MirrorMaxExtent/MirrorInnerRadius15; +const G4double MirrorMinThetaExtent15 = MirrorMinExtent15 / MirrorInnerRadius15; +const G4double MirrorMaxThetaExtent15 = MirrorMaxExtent15 / MirrorInnerRadius15; + +const G4double MirrorPosX15 = 0.0; +const G4double MirrorPosY15 = 0.0; +const G4double MirrorPosZ15 = SphereRadius15; +const G4double MirrorVolPosZ15 = 0.0; #endif // INCLUDE_RICHTBMIRRORGEOMETRYPARAMTERS_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMiscNames.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMiscNames.hh index 6f5a82dabb55cd001b7bd7655cef95fc7f404fa6..cf273c5e2c36ce367fb7f8b2a3d2206254bb0982 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMiscNames.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbMiscNames.hh @@ -2,22 +2,21 @@ #ifndef INCLUDE_RICHTBMISCNAMES_HH #define INCLUDE_RICHTBMISCNAMES_HH 1 - -const G4String PMTAnodeMaterialName= "PMTAnode"; - -const G4String PmtQuartzWMaterialName="PmtWindowQuartz"; -const G4String CrystalMaterialName="CrystalMat"; -const G4String PmtPhCathodeMaterialName="S20PhCathode"; -const G4String NitrogenGasMaterialName="NitrogenGas"; -const G4String c4f10GasMaterialName="c4f10Gas"; -const G4String PMTSMasterMaterialName="Galactic"; -const G4String HPDSMasterMaterialName="Galactic"; -const G4String ROgeometryName= "RichTbROGeom"; -const G4String ROgeometryNameHpd= "RichTbROGeomHpd"; +const G4String PMTAnodeMaterialName = "PMTAnode"; + +const G4String PmtQuartzWMaterialName = "PmtWindowQuartz"; +const G4String CrystalMaterialName = "CrystalMat"; +const G4String PmtPhCathodeMaterialName = "S20PhCathode"; +const G4String NitrogenGasMaterialName = "NitrogenGas"; +const G4String c4f10GasMaterialName = "c4f10Gas"; +const G4String PMTSMasterMaterialName = "Galactic"; +const G4String HPDSMasterMaterialName = "Galactic"; +const G4String ROgeometryName = "RichTbROGeom"; +const G4String ROgeometryNameHpd = "RichTbROGeomHpd"; const G4String PMTSDname = "RichTbPMTSD"; const G4String HPDSDname = "RichTbHPDSD"; -const G4String RichTbHColname="RichTbHitsCollection"; -const G4String RichTbHColnameHpd="RichTbHpdHitsCollection"; +const G4String RichTbHColname = "RichTbHitsCollection"; +const G4String RichTbHColnameHpd = "RichTbHpdHitsCollection"; const G4String VesselPhysName = "VesselPhys"; const G4String LensPhysName = "LensPhys"; const G4String MasterPhysName = "MasterPhys"; @@ -35,31 +34,26 @@ const G4String PhDetSupName = "PhDetSupPhys"; const G4String PhDetSupPhysNameLeft = "PhDetSupFrameLeftPhys"; const G4String PhDetSupPhysNameRight = "PhDetSupFrameRightPhys"; -const G4String PhDetSupPhysNameBottomLeft = "PhDetSupFrameBottomLeftPhys"; //2015 upgrade -const G4String PhDetSupPhysNameBottomRight = "PhDetSupFrameBottomRightPhys"; //2015 upgrade - -const G4String PMTSMasterPhysName ="PMTSMasterPhys"; -const G4String PMTSiDetPhysName="PMTSiDetPhys"; -const G4String PMTQuartzPhysName="PMTQuartzPhys"; -const G4String PmtPhotElectProc="PMTPhotElectProc"; -const G4String HpdPhotElectProc="HPDPhotElectProc"; -const G4String PMTEnvelopeMaterialName="Kovar"; -const G4String GasQuWinPhysName ="GasQuWinPhys"; -const G4String RadiatorPhysName ="RadiatorPhys"; -const G4String PMTFrontRingBoxPhysName="PMTFrontRingPhys"; +const G4String PhDetSupPhysNameBottomLeft = "PhDetSupFrameBottomLeftPhys"; // 2015 upgrade +const G4String PhDetSupPhysNameBottomRight = "PhDetSupFrameBottomRightPhys"; // 2015 upgrade + +const G4String PMTSMasterPhysName = "PMTSMasterPhys"; +const G4String PMTSiDetPhysName = "PMTSiDetPhys"; +const G4String PMTQuartzPhysName = "PMTQuartzPhys"; +const G4String PmtPhotElectProc = "PMTPhotElectProc"; +const G4String HpdPhotElectProc = "HPDPhotElectProc"; +const G4String PMTEnvelopeMaterialName = "Kovar"; +const G4String GasQuWinPhysName = "GasQuWinPhys"; +const G4String RadiatorPhysName = "RadiatorPhys"; +const G4String PMTFrontRingBoxPhysName = "PMTFrontRingPhys"; const G4String PMTQwLogVolName = "PMTQuartzWLog"; -const G4String PMTPhCathLogVolName= "PMTPhCathodeLog"; -const G4String PMTNumberName[]= - {"_0","_1","_2","_3","_4","_5","_6","_7","_8","_9","_10","_11","_12","_13","_14","_15"}; - -const G4String HpdQuartzWMaterialName ="HpdQuartzPhys"; -const G4String HpdPhCathodeMaterialName ="HpdPhcathodePhys"; -const G4String HpdSiDetMaterialName = "HpdAnode"; -const G4String HpdEnvelopeMaterialName= "Kovar"; - - - - - +const G4String PMTPhCathLogVolName = "PMTPhCathodeLog"; +const G4String PMTNumberName[] = {"_0", "_1", "_2", "_3", "_4", "_5", "_6", "_7", + "_8", "_9", "_10", "_11", "_12", "_13", "_14", "_15"}; + +const G4String HpdQuartzWMaterialName = "HpdQuartzPhys"; +const G4String HpdPhCathodeMaterialName = "HpdPhcathodePhys"; +const G4String HpdSiDetMaterialName = "HpdAnode"; +const G4String HpdEnvelopeMaterialName = "Kovar"; #endif // INCLUDE_RICHTBMISCNAMES_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPEInfo.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPEInfo.hh index 9d000a7490ca811eef38f442ef8a77a05c11f0ae..342873a45e9f983b92f1a1ec34a5af32c6ce8293 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPEInfo.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPEInfo.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBPEINFO_HH +#ifndef INCLUDE_RICHTBPEINFO_HH #define INCLUDE_RICHTBPEINFO_HH 1 // Include files @@ -8,44 +8,36 @@ #include "RichTbPhotonInfo.hh" /** @class RichTbPEInfo RichTbPEInfo.hh include/RichTbPEInfo.hh - * + * * * @author Sajan EASO * @date 2004-01-20 */ class RichTbPEInfo { -public: +public: /// Standard constructor - RichTbPEInfo( ); - - virtual ~RichTbPEInfo( ); ///< Destructor - - G4ThreeVector PhOrigin(){return mPhOrigin;} - RichTbPhotonInfo* MotherPhotonInfo(){return mMotherPhotonInfo;} - G4ThreeVector PeOriginInHpdSupFrame(){return mPeOriginInHpdSupFrame;} - - - void setPhOrigin(G4ThreeVector aPhOrigin){mPhOrigin= aPhOrigin;} - - void setMotherPhotonInfo(RichTbPhotonInfo* aPhotonInfo ) - { mMotherPhotonInfo=aPhotonInfo;} - - void setPeOriginInHpdSupFrame( G4ThreeVector aPOrInPhSup ) - {mPeOriginInHpdSupFrame=aPOrInPhSup;} - - void setPhotEmisDir(G4ThreeVector aEmisDir) - { mPhotEmisDir=aEmisDir;} - G4ThreeVector getPhotEmisDir() {return mPhotEmisDir;} - -protected: + RichTbPEInfo(); -private: + virtual ~RichTbPEInfo(); ///< Destructor + + G4ThreeVector PhOrigin() { return mPhOrigin; } + RichTbPhotonInfo *MotherPhotonInfo() { return mMotherPhotonInfo; } + G4ThreeVector PeOriginInHpdSupFrame() { return mPeOriginInHpdSupFrame; } + + void setPhOrigin(G4ThreeVector aPhOrigin) { mPhOrigin = aPhOrigin; } + void setMotherPhotonInfo(RichTbPhotonInfo *aPhotonInfo) { mMotherPhotonInfo = aPhotonInfo; } + + void setPeOriginInHpdSupFrame(G4ThreeVector aPOrInPhSup) { mPeOriginInHpdSupFrame = aPOrInPhSup; } + + void setPhotEmisDir(G4ThreeVector aEmisDir) { mPhotEmisDir = aEmisDir; } + G4ThreeVector getPhotEmisDir() { return mPhotEmisDir; } + +protected: +private: G4ThreeVector mPhOrigin; - RichTbPhotonInfo* mMotherPhotonInfo; + RichTbPhotonInfo *mMotherPhotonInfo; G4ThreeVector mPeOriginInHpdSupFrame; G4ThreeVector mPhotEmisDir; - - }; #endif // INCLUDE_RICHTBPEINFO_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPMT.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPMT.hh index 316153815a0768db25d7eb45345bb58bebfed3ee..131eaa95011e3e2739eff97cfdda6e6823a6a16e 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPMT.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPMT.hh @@ -16,35 +16,28 @@ * @author Sajan EASO * @date 2003-11-19 */ -class RichTbMaster; +class RichTbMaster; class RichTbPMT { public: /// Standard constructor - RichTbPMT(RichTbUpgradeEC* aECMaster ); + RichTbPMT(RichTbUpgradeEC *aECMaster); - virtual ~RichTbPMT( ); ///< Destructor + virtual ~RichTbPMT(); ///< Destructor - void setTrackingSwitch(bool aSw) - {m_TrackingSwitch = aSw;} + void setTrackingSwitch(bool aSw) { m_TrackingSwitch = aSw; } void buildPMTGeometry(); void constructPMTComponentsLVol(); - void constructPMTComponentsPVol(int CurPMTNum) ; + void constructPMTComponentsPVol(int CurPMTNum); void constructPMTMasterTree(int CurPMTNum); void constructPMTAnode(); + std::vector<G4LogicalVolume *> getRichTbPMTMasterLVol() { return RichTbPMTMasterLVol; } - std::vector<G4LogicalVolume*> getRichTbPMTMasterLVol() - { return RichTbPMTMasterLVol;} - - std::vector<G4LogicalVolume*> getRichTbPMTSMasterLVol() - { return RichTbPMTSMasterLVol;} - - - G4LogicalVolume* getRichTbPMTEnvelopeLVol() - { return RichTbPMTEnvelopeLVol;} + std::vector<G4LogicalVolume *> getRichTbPMTSMasterLVol() { return RichTbPMTSMasterLVol; } + G4LogicalVolume *getRichTbPMTEnvelopeLVol() { return RichTbPMTEnvelopeLVol; } /* G4LogicalVolume* getRichTbPMTEnvelopeEndCapLVol() @@ -52,96 +45,53 @@ public: return RichTbPMTEnvelopeEndCapLVol; } */ - G4LogicalVolume* getRichTbPMTQuartzWLVol() - { - return RichTbPMTQuartzWLVol; - } - G4LogicalVolume* getRichTbPMTPhCathodeLVol() - { - return RichTbPMTPhCathodeLVol; - } - - std::vector<G4LogicalVolume*> getRichTbPMTAnodeLVol() - { - return RichTbPMTAnodeLVol; - } - - - - std::vector<G4VPhysicalVolume*> getRichTbPMTQuartzWPVol() - { - return RichTbPMTQuartzWPVol; - } - std::vector<G4VPhysicalVolume*> getRichTbPMTPhCathodePVol() - { - return RichTbPMTPhCathodePVol; - } + G4LogicalVolume *getRichTbPMTQuartzWLVol() { return RichTbPMTQuartzWLVol; } + G4LogicalVolume *getRichTbPMTPhCathodeLVol() { return RichTbPMTPhCathodeLVol; } - std::vector<G4VPhysicalVolume*> getRichTbPMTAnodePVol() - { - return RichTbPMTAnodePVol; - } - G4LogicalVolume* getRichTbPMTFrontRingLVol() - { return RichTbPMTFrontRingLVol; } - - std::vector<G4VPhysicalVolume*> getRichTbPMTFrontRingPVol () - { - return RichTbPMTFrontRingPVol; - - } - - std::string getPMTQwLogVolName() - { - return m_PMTQwLogVolName; - } - std::string getPMTPhCathLogVolName() - { - return m_PMTPhCathLogVolName; - } - std::string getPMTAnodeLogVolName() - { - return m_PMTAnodeLogVolName; - } - - G4int getCurNumPmts() - { return CurNumPmts;} + std::vector<G4LogicalVolume *> getRichTbPMTAnodeLVol() { return RichTbPMTAnodeLVol; } + std::vector<G4VPhysicalVolume *> getRichTbPMTQuartzWPVol() { return RichTbPMTQuartzWPVol; } + std::vector<G4VPhysicalVolume *> getRichTbPMTPhCathodePVol() { return RichTbPMTPhCathodePVol; } + std::vector<G4VPhysicalVolume *> getRichTbPMTAnodePVol() { return RichTbPMTAnodePVol; } + G4LogicalVolume *getRichTbPMTFrontRingLVol() { return RichTbPMTFrontRingLVol; } + std::vector<G4VPhysicalVolume *> getRichTbPMTFrontRingPVol() { return RichTbPMTFrontRingPVol; } + std::string getPMTQwLogVolName() { return m_PMTQwLogVolName; } + std::string getPMTPhCathLogVolName() { return m_PMTPhCathLogVolName; } + std::string getPMTAnodeLogVolName() { return m_PMTAnodeLogVolName; } + G4int getCurNumPmts() { return CurNumPmts; } protected: - private: - RichTbUpgradeEC* PmtECFrame; + RichTbUpgradeEC *PmtECFrame; bool m_TrackingSwitch; G4int CurNumPmts; - G4LogicalVolume* RichTbPMTEnvelopeLVol; - G4LogicalVolume* RichTbPMTQuartzWLVol; - G4LogicalVolume* RichTbPMTPhCathodeLVol; - G4LogicalVolume* RichTbPMTFrontRingLVol; + G4LogicalVolume *RichTbPMTEnvelopeLVol; + G4LogicalVolume *RichTbPMTQuartzWLVol; + G4LogicalVolume *RichTbPMTPhCathodeLVol; + G4LogicalVolume *RichTbPMTFrontRingLVol; - std::vector<G4VPhysicalVolume*> RichTbPMTEnvelopePVol; - std::vector<G4VPhysicalVolume*> RichTbPMTQuartzWPVol; - std::vector<G4VPhysicalVolume*> RichTbPMTPhCathodePVol; - std::vector<G4VPhysicalVolume*> RichTbPMTFrontRingPVol; + std::vector<G4VPhysicalVolume *> RichTbPMTEnvelopePVol; + std::vector<G4VPhysicalVolume *> RichTbPMTQuartzWPVol; + std::vector<G4VPhysicalVolume *> RichTbPMTPhCathodePVol; + std::vector<G4VPhysicalVolume *> RichTbPMTFrontRingPVol; - std::vector<G4LogicalVolume*> RichTbPMTMasterLVol; - std::vector<G4LogicalVolume*> RichTbPMTSMasterLVol; - std::vector<G4LogicalVolume*> RichTbPMTAnodeLVol; - std::vector<G4VPhysicalVolume*> RichTbPMTMasterPVol; - std::vector<G4VPhysicalVolume*> RichTbPMTSMasterPVol; - std::vector<G4VPhysicalVolume*> RichTbPMTAnodePVol; + std::vector<G4LogicalVolume *> RichTbPMTMasterLVol; + std::vector<G4LogicalVolume *> RichTbPMTSMasterLVol; + std::vector<G4LogicalVolume *> RichTbPMTAnodeLVol; + std::vector<G4VPhysicalVolume *> RichTbPMTMasterPVol; + std::vector<G4VPhysicalVolume *> RichTbPMTSMasterPVol; + std::vector<G4VPhysicalVolume *> RichTbPMTAnodePVol; std::string m_PMTQwLogVolName; std::string m_PMTPhCathLogVolName; std::string m_PMTAnodeLogVolName; - G4LogicalVolume* RichTbAnodePxLVol; - std::vector<std::vector<G4VPhysicalVolume*> > RichTbAnodePxPVol; - - + G4LogicalVolume *RichTbAnodePxLVol; + std::vector<std::vector<G4VPhysicalVolume *>> RichTbAnodePxPVol; }; #endif // INCLUDE_RICHTBHPD_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPMTGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPMTGeometryParameters.hh index 9864579cf2a71ff845b7eda16793fa1fe948b6ba..60ec649cef7cc15471d318f2332349a1fa9b240f 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPMTGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPMTGeometryParameters.hh @@ -2,207 +2,194 @@ #ifndef INCLUDE_RICHTBHPDGEOMETRYPARAMETERS_HH #define INCLUDE_RICHTBHPDGEOMETRYPARAMETERS_HH 1 - //#include "RichTbRunConfig.hh" /*class RichTbPMTGeometryParameters { public: - void setNumPmts(G4int pmts) { - NumPmts = pmts; - } - void setNumPmtsUpgrade(G4int pmts) { - NumPmtsUpgrade15 = pmts; - } - G4int getNumPmts() { - return NumPmts; - } - G4int getNumPmtsUpgrade() { - return NumPmtsUpgrade15; - } + void setNumPmts(G4int pmts) { + NumPmts = pmts; + } + void setNumPmtsUpgrade(G4int pmts) { + NumPmtsUpgrade15 = pmts; + } + G4int getNumPmts() { + return NumPmts; + } + G4int getNumPmtsUpgrade() { + return NumPmtsUpgrade15; + } private: - G4int NumPmts= 8; - G4int NumPmtsUpgrade15 = 16; + G4int NumPmts= 8; + G4int NumPmtsUpgrade15 = 16; };*/ -//envelope size and position - +// envelope size and position -//static G4int NumPmtsUpgrade15 = RichTbPMTGeometryParameters::getNumPmtsUpgrade(); +// static G4int NumPmtsUpgrade15 = RichTbPMTGeometryParameters::getNumPmtsUpgrade(); static const G4int NumPmtsUpgrade15 = 16; -//static G4int NumPmts = (RichTbRunConfig::getRunConfigInstance()->getRadiatorConfiguration()==3) ? NumPmtsUpgrade15 : 8; +// static G4int NumPmts = (RichTbRunConfig::getRunConfigInstance()->getRadiatorConfiguration()==3) ? NumPmtsUpgrade15 : +// 8; static const G4int NumPmts = NumPmtsUpgrade15; static const G4int NumPmtsOld = 8; -//static G4int NumPmts = RichTbPMTGeometryParameters::getNumPmts(); +// static G4int NumPmts = RichTbPMTGeometryParameters::getNumPmts(); static const G4int NumPmtsWithHpd = 4; - -static const G4int NumPmtsInAnEC=4; +static const G4int NumPmtsInAnEC = 4; static const G4int MaxPmtNumInEC0 = 3; static const G4int MaxPmtNumInEC1 = 7; static const G4int MaxPmtNumInEC2 = 11; static const G4int MaxPmtNumInEC3 = 15; - -const G4double PMTMasterBoxXSize = 26.15* CLHEP::mm; -const G4double PMTMasterBoxYSize = 26.15* CLHEP::mm; -const G4double PMTMasterBoxZSize = 19.4*CLHEP::mm; -const G4double PMTLateralTolerence=0.05*CLHEP::mm; -const G4double PMTZTolerence=0.25*CLHEP::mm; +const G4double PMTMasterBoxXSize = 26.15 * CLHEP::mm; +const G4double PMTMasterBoxYSize = 26.15 * CLHEP::mm; +const G4double PMTMasterBoxZSize = 19.4 * CLHEP::mm; +const G4double PMTLateralTolerence = 0.05 * CLHEP::mm; +const G4double PMTZTolerence = 0.25 * CLHEP::mm; const G4double PMTSMasterBoxXSize = PMTMasterBoxXSize; const G4double PMTSMasterBoxYSize = PMTMasterBoxYSize; const G4double PMTSMasterBoxZSize = PMTMasterBoxZSize; -const G4double PMTSMasterBoxXPos=0.0*CLHEP::mm; -const G4double PMTSMasterBoxYPos=0.0*CLHEP::mm; -const G4double PMTSMasterBoxZPos=0.0*CLHEP::mm; - +const G4double PMTSMasterBoxXPos = 0.0 * CLHEP::mm; +const G4double PMTSMasterBoxYPos = 0.0 * CLHEP::mm; +const G4double PMTSMasterBoxZPos = 0.0 * CLHEP::mm; const G4double PMTEnvelopeBoxXSize = PMTMasterBoxXSize - PMTLateralTolerence; const G4double PMTEnvelopeBoxYSize = PMTMasterBoxYSize - PMTLateralTolerence; -const G4double PMTEnvelopeBoxZSize = 14.0*CLHEP::mm; - +const G4double PMTEnvelopeBoxZSize = 14.0 * CLHEP::mm; -const G4double PMTEndToQuartzOuterSurface=2.7*CLHEP::mm; -const G4double PMTEnvelopeThickness = 1.0* CLHEP::mm; -const G4double PMTGapInComponents =0.2*CLHEP::mm; -const G4double PMTQuartzToAnodeSurfaceDistance = 10.0*CLHEP::mm; +const G4double PMTEndToQuartzOuterSurface = 2.7 * CLHEP::mm; +const G4double PMTEnvelopeThickness = 1.0 * CLHEP::mm; +const G4double PMTGapInComponents = 0.2 * CLHEP::mm; +const G4double PMTQuartzToAnodeSurfaceDistance = 10.0 * CLHEP::mm; const G4double PMTEnvelopeSubPartXSize = PMTEnvelopeBoxXSize - 2.0 * PMTEnvelopeThickness; const G4double PMTEnvelopeSubPartYSize = PMTEnvelopeBoxYSize - 2.0 * PMTEnvelopeThickness; -const G4double PMTEnvelopeSubPartZSize = 100.0*CLHEP::mm; +const G4double PMTEnvelopeSubPartZSize = 100.0 * CLHEP::mm; -const G4double PMTEnvelopeSubPartXLocation = 0.0*CLHEP::mm; -const G4double PMTEnvelopeSubPartYLocation = 0.0*CLHEP::mm; -const G4double PMTEnvelopeSubPartZLocation = 0.5 * (PMTEnvelopeBoxXSize - PMTEnvelopeSubPartZSize) - PMTEnvelopeThickness; +const G4double PMTEnvelopeSubPartXLocation = 0.0 * CLHEP::mm; +const G4double PMTEnvelopeSubPartYLocation = 0.0 * CLHEP::mm; +const G4double PMTEnvelopeSubPartZLocation = + 0.5 * (PMTEnvelopeBoxXSize - PMTEnvelopeSubPartZSize) - PMTEnvelopeThickness; const G4double RichTbPMTEnvBoxXLocation = 0; const G4double RichTbPMTEnvBoxYLocation = 0; -//const G4double RichTbPMTEnvBoxZLocation = 10.2*CLHEP::mm - 0.5 * PMTEnvelopeBoxZSize - 1.0*CLHEP::mm; +// const G4double RichTbPMTEnvBoxZLocation = 10.2*CLHEP::mm - 0.5 * PMTEnvelopeBoxZSize - 1.0*CLHEP::mm; -//quartz window size and position +// quartz window size and position -const G4double PMTQuartzWindowSupXSize = 25.8*CLHEP::mm; -const G4double PMTQuartzWindowSupYSize = 25.8*CLHEP::mm; -//const G4double PMTQuartzWindowSupZSize = 6.0*CLHEP::mm; -const G4double PMTQuartzWindowSupZSize = 0.8*CLHEP::mm; +const G4double PMTQuartzWindowSupXSize = 25.8 * CLHEP::mm; +const G4double PMTQuartzWindowSupYSize = 25.8 * CLHEP::mm; +// const G4double PMTQuartzWindowSupZSize = 6.0*CLHEP::mm; +const G4double PMTQuartzWindowSupZSize = 0.8 * CLHEP::mm; const G4double RichTbPMTQuartzWindowXLocation = 0; const G4double RichTbPMTQuartzWindowYLocation = 0; -//const G4double RichTbPMTQuartzWindowZLocation = -4.9*CLHEP::mm - 0.5 * PMTQuartzWindowSupZSize; +// const G4double RichTbPMTQuartzWindowZLocation = -4.9*CLHEP::mm - 0.5 * PMTQuartzWindowSupZSize; -const G4double RichTbPMTQuartzWindowZLocation = -0.5*PMTMasterBoxZSize + - PMTEndToQuartzOuterSurface + 0.5 * PMTQuartzWindowSupZSize; +const G4double RichTbPMTQuartzWindowZLocation = + -0.5 * PMTMasterBoxZSize + PMTEndToQuartzOuterSurface + 0.5 * PMTQuartzWindowSupZSize; +const G4double RichTbPMTEdgeToQuartzInsideEdgeDeltaZ = PMTEndToQuartzOuterSurface + PMTQuartzWindowSupZSize; -const G4double RichTbPMTEdgeToQuartzInsideEdgeDeltaZ= PMTEndToQuartzOuterSurface + PMTQuartzWindowSupZSize; +const G4double RichTbPMTEnvBoxZLocation = + RichTbPMTQuartzWindowZLocation + PMTGapInComponents + 0.5 * (PMTQuartzWindowSupZSize + PMTEnvelopeBoxZSize); +// const G4double RichTbGasQuartzWindowThickness= 6.0*CLHEP::mm; // unused param -const G4double RichTbPMTEnvBoxZLocation = RichTbPMTQuartzWindowZLocation + PMTGapInComponents + - 0.5 * (PMTQuartzWindowSupZSize + PMTEnvelopeBoxZSize) ; - - -//const G4double RichTbGasQuartzWindowThickness= 6.0*CLHEP::mm; // unused param - -//photocathode size and position +// photocathode size and position const G4double PMTPhCathodeSupXSize = PMTQuartzWindowSupXSize; const G4double PMTPhCathodeSupYSize = PMTQuartzWindowSupYSize; -const G4double PMTPhCathodeSupZSize = 0.1*CLHEP::mm; +const G4double PMTPhCathodeSupZSize = 0.1 * CLHEP::mm; const G4double RichTbPMTPhCathodeXLocation = 0.0; const G4double RichTbPMTPhCathodeYLocation = 0.0; -const G4double RichTbPMTPhCathodeThickness= 0.1*CLHEP::mm; -//const G4double RichTbPMTPhCathodeZLocation = -4.8*CLHEP::mm - 0.05*CLHEP::mm; -const G4double RichTbPMTPhCathodeZLocation = RichTbPMTQuartzWindowZLocation + - 0.5 * (PMTQuartzWindowSupZSize + PMTPhCathodeSupZSize ); +const G4double RichTbPMTPhCathodeThickness = 0.1 * CLHEP::mm; +// const G4double RichTbPMTPhCathodeZLocation = -4.8*CLHEP::mm - 0.05*CLHEP::mm; +const G4double RichTbPMTPhCathodeZLocation = + RichTbPMTQuartzWindowZLocation + 0.5 * (PMTQuartzWindowSupZSize + PMTPhCathodeSupZSize); +// anode size and position - -//anode size and position - -const G4double PMTAnodeSupXSize = 23.0*CLHEP::mm; -const G4double PMTAnodeSupYSize = 23.0*CLHEP::mm; -const G4double PMTAnodeSupZSize = 0.5*CLHEP::mm; +const G4double PMTAnodeSupXSize = 23.0 * CLHEP::mm; +const G4double PMTAnodeSupYSize = 23.0 * CLHEP::mm; +const G4double PMTAnodeSupZSize = 0.5 * CLHEP::mm; const G4double RichTbPMTAnodeXLocation = 0.0; const G4double RichTbPMTAnodeYLocation = 0.0; -//const G4double RichTbPMTAnodeZLocation = 6.2*CLHEP::mm; -const G4double RichTbPMTAnodeZLocation = RichTbPMTQuartzWindowZLocation + PMTQuartzToAnodeSurfaceDistance+ - 0.5 * (PMTQuartzWindowSupZSize +PMTAnodeSupZSize ); +// const G4double RichTbPMTAnodeZLocation = 6.2*CLHEP::mm; +const G4double RichTbPMTAnodeZLocation = RichTbPMTQuartzWindowZLocation + PMTQuartzToAnodeSurfaceDistance + + 0.5 * (PMTQuartzWindowSupZSize + PMTAnodeSupZSize); // front ring const G4double RichTbPMTFrontRingLateralXSize = PMTMasterBoxXSize - PMTLateralTolerence; const G4double RichTbPMTFrontRingLateralYSize = PMTMasterBoxYSize - PMTLateralTolerence; -const G4double RichTbPMTFrontRingZSize = 0.5*CLHEP::mm; - -const G4double RichTbPMTFrontRingXLocation =0.0*CLHEP::mm; -const G4double RichTbPMTFrontRingYLocation =0.0*CLHEP::mm; -const G4double RichTbPMTFrontRingZLocation = RichTbPMTQuartzWindowZLocation - - 0.5* (PMTQuartzWindowSupZSize + RichTbPMTFrontRingZSize); - - -const G4double RichTbPMTFrontRingSubHoleThickness = 1.4*CLHEP::mm; -const G4double RichTbPMTFrontRingSubHoleZSize=100*CLHEP::mm; -const G4double RichTbPMTFrontRingSubHoleXSize = RichTbPMTFrontRingLateralXSize - - 2.0*RichTbPMTFrontRingSubHoleThickness; -const G4double RichTbPMTFrontRingSubHoleYSize = RichTbPMTFrontRingLateralYSize - - 2.0*RichTbPMTFrontRingSubHoleThickness; -const G4double RichTbPMTFrontRingSubHoleXLocation= 0.0*CLHEP::mm; -const G4double RichTbPMTFrontRingSubHoleYLocation= 0.0*CLHEP::mm; -const G4double RichTbPMTFrontRingSubHoleZLocation= 0.0*CLHEP::mm; +const G4double RichTbPMTFrontRingZSize = 0.5 * CLHEP::mm; + +const G4double RichTbPMTFrontRingXLocation = 0.0 * CLHEP::mm; +const G4double RichTbPMTFrontRingYLocation = 0.0 * CLHEP::mm; +const G4double RichTbPMTFrontRingZLocation = + RichTbPMTQuartzWindowZLocation - 0.5 * (PMTQuartzWindowSupZSize + RichTbPMTFrontRingZSize); + +const G4double RichTbPMTFrontRingSubHoleThickness = 1.4 * CLHEP::mm; +const G4double RichTbPMTFrontRingSubHoleZSize = 100 * CLHEP::mm; +const G4double RichTbPMTFrontRingSubHoleXSize = + RichTbPMTFrontRingLateralXSize - 2.0 * RichTbPMTFrontRingSubHoleThickness; +const G4double RichTbPMTFrontRingSubHoleYSize = + RichTbPMTFrontRingLateralYSize - 2.0 * RichTbPMTFrontRingSubHoleThickness; +const G4double RichTbPMTFrontRingSubHoleXLocation = 0.0 * CLHEP::mm; +const G4double RichTbPMTFrontRingSubHoleYLocation = 0.0 * CLHEP::mm; +const G4double RichTbPMTFrontRingSubHoleZLocation = 0.0 * CLHEP::mm; // now for PMT Locations -const G4String PMTNamesBox[]= -{"PMT0Box","PMT1Box","PMT2Box","PMT3Box","PMT4Box","PMT5Box","PMT6Box","PMT7Box", - "PMT8Box","PMT9Box","PMT10Box","PMT11Box","PMT12Box","PMT13Box","PMT14Box","PMT15Box"}; -const G4String PMTNamesLog[]= -{"PMT0Log","PMT1Log","PMT2Log","PMT3Log","PMT4Log","PMT5Log","PMT6Log","PMT7Log", - "PMT8Log","PMT9Log","PMT10Log","PMT11Log","PMT12Log","PMT13Log","PMT14Log","PMT15Log"}; -const G4String PMTNamesPhys[]= -{"PMT0Phys","PMT1Phys","PMT2Phys","PMT3Phys","PMT4Phys","PMT5Phys","PMT6Phys","PMT7Phys", - "PMT8Phys","PMT9Phys","PMT10Phys","PMT11Phys","PMT12Phys","PMT13Phys","PMT14Phys","PMT15Phys"}; - - -const G4String PMTSMNamesBox[]= -{"PMTSM0Box","PMTSM1Box","PMTSM2Box","PMTSM3Box","PMTSM4Box","PMTSM5Box","PMTSM6Box","PMTSM7Box", - "PMTSM8Box","PMTSM9Box","PMTSM10Box","PMTSM11Box","PMTSM12Box","PMTSM13Box","PMTSM14Box","PMTSM15Box"}; -const G4String PMTSMNamesLog[]= -{"PMTSM0Log","PMTSM1Log","PMTSM2Log","PMTSM3Log","PMTSM4Log","PMTSM5Log","PMTSM6Log","PMTSM7Log", - "PMTSM8Log","PMTSM9Log","PMTSM10Log","PMTSM11Log","PMTSM12Log","PMTSM13Log","PMTSM14Log","PMTSM15Log"}; -const G4String PMTSMNamesPhys[]= -{"PMTSM0Phys","PMTSM1Phys","PMTSM2Phys","PMTSM3Phys","PMTSM4Phys","PMTSM5Phys","PMTSM6Phys","PMTSM7Phys", - "PMTSM8Phys","PMTSM9Phys","PMTSM10Phys","PMTSM11Phys","PMTSM12Phys","PMTSM13Phys","PMTSM14Phys","PMTSM15Phys"}; - -const G4String PMTANNamesBox[]= -{"PMTAN0Box","PMTAN1Box","PMTAN2Box","PMTAN3Box","PMTAN4Box","PMTAN5Box","PMTAN6Box","PMTAN7Box", - "PMTAN8Box","PMTAN9Box","PMTAN10Box","PMTAN11Box","PMTAN12Box","PMTAN13Box","PMTAN14Box","PMTAN15Box"}; -const G4String PMTANNamesLog[]= -{"PMTAN0Log","PMTAN1Log","PMTAN2Log","PMTAN3Log","PMTAN4Log","PMTAN5Log","PMTAN6Log","PMTAN7Log", - "PMTAN8Log","PMTAN9Log","PMTAN10Log","PMTAN11Log","PMTAN12Log","PMTAN13Log","PMTAN14Log","PMTAN15Log"}; -const G4String PMTANNamesPhys[]= -{"PMTAN0Phys","PMTAN1Phys","PMTAN2Phys","PMTAN3Phys","PMTAN4Phys","PMTAN5Phys","PMTAN6Phys","PMTAN7Phys", - "PMTAN8Phys","PMTAN9Phys","PMTAN10Phys","PMTAN11Phys","PMTAN12Phys","PMTAN13Phys","PMTAN14Phys","PMTAN15Phys"}; - - -const G4int NumPixelInPmtRow=8; -const G4int NumPixelInPmtCol=8; -const G4int NumPixelTotInPmt = NumPixelInPmtRow*NumPixelInPmtCol; - - -const G4double PmtAnodePixelXSize=PMTAnodeSupXSize/NumPixelInPmtRow; -const G4double PmtAnodePixelYSize=PMTAnodeSupYSize/NumPixelInPmtCol; - -const G4double RichTbPMTAnodePixelZSize =PMTAnodeSupZSize; -const G4double RichTbPMTAnodePixelPosZ=0.0*CLHEP::mm; - +const G4String PMTNamesBox[] = {"PMT0Box", "PMT1Box", "PMT2Box", "PMT3Box", "PMT4Box", "PMT5Box", + "PMT6Box", "PMT7Box", "PMT8Box", "PMT9Box", "PMT10Box", "PMT11Box", + "PMT12Box", "PMT13Box", "PMT14Box", "PMT15Box"}; +const G4String PMTNamesLog[] = {"PMT0Log", "PMT1Log", "PMT2Log", "PMT3Log", "PMT4Log", "PMT5Log", + "PMT6Log", "PMT7Log", "PMT8Log", "PMT9Log", "PMT10Log", "PMT11Log", + "PMT12Log", "PMT13Log", "PMT14Log", "PMT15Log"}; +const G4String PMTNamesPhys[] = {"PMT0Phys", "PMT1Phys", "PMT2Phys", "PMT3Phys", "PMT4Phys", "PMT5Phys", + "PMT6Phys", "PMT7Phys", "PMT8Phys", "PMT9Phys", "PMT10Phys", "PMT11Phys", + "PMT12Phys", "PMT13Phys", "PMT14Phys", "PMT15Phys"}; + +const G4String PMTSMNamesBox[] = {"PMTSM0Box", "PMTSM1Box", "PMTSM2Box", "PMTSM3Box", "PMTSM4Box", "PMTSM5Box", + "PMTSM6Box", "PMTSM7Box", "PMTSM8Box", "PMTSM9Box", "PMTSM10Box", "PMTSM11Box", + "PMTSM12Box", "PMTSM13Box", "PMTSM14Box", "PMTSM15Box"}; +const G4String PMTSMNamesLog[] = {"PMTSM0Log", "PMTSM1Log", "PMTSM2Log", "PMTSM3Log", "PMTSM4Log", "PMTSM5Log", + "PMTSM6Log", "PMTSM7Log", "PMTSM8Log", "PMTSM9Log", "PMTSM10Log", "PMTSM11Log", + "PMTSM12Log", "PMTSM13Log", "PMTSM14Log", "PMTSM15Log"}; +const G4String PMTSMNamesPhys[] = {"PMTSM0Phys", "PMTSM1Phys", "PMTSM2Phys", "PMTSM3Phys", + "PMTSM4Phys", "PMTSM5Phys", "PMTSM6Phys", "PMTSM7Phys", + "PMTSM8Phys", "PMTSM9Phys", "PMTSM10Phys", "PMTSM11Phys", + "PMTSM12Phys", "PMTSM13Phys", "PMTSM14Phys", "PMTSM15Phys"}; + +const G4String PMTANNamesBox[] = {"PMTAN0Box", "PMTAN1Box", "PMTAN2Box", "PMTAN3Box", "PMTAN4Box", "PMTAN5Box", + "PMTAN6Box", "PMTAN7Box", "PMTAN8Box", "PMTAN9Box", "PMTAN10Box", "PMTAN11Box", + "PMTAN12Box", "PMTAN13Box", "PMTAN14Box", "PMTAN15Box"}; +const G4String PMTANNamesLog[] = {"PMTAN0Log", "PMTAN1Log", "PMTAN2Log", "PMTAN3Log", "PMTAN4Log", "PMTAN5Log", + "PMTAN6Log", "PMTAN7Log", "PMTAN8Log", "PMTAN9Log", "PMTAN10Log", "PMTAN11Log", + "PMTAN12Log", "PMTAN13Log", "PMTAN14Log", "PMTAN15Log"}; +const G4String PMTANNamesPhys[] = {"PMTAN0Phys", "PMTAN1Phys", "PMTAN2Phys", "PMTAN3Phys", + "PMTAN4Phys", "PMTAN5Phys", "PMTAN6Phys", "PMTAN7Phys", + "PMTAN8Phys", "PMTAN9Phys", "PMTAN10Phys", "PMTAN11Phys", + "PMTAN12Phys", "PMTAN13Phys", "PMTAN14Phys", "PMTAN15Phys"}; + +const G4int NumPixelInPmtRow = 8; +const G4int NumPixelInPmtCol = 8; +const G4int NumPixelTotInPmt = NumPixelInPmtRow * NumPixelInPmtCol; + +const G4double PmtAnodePixelXSize = PMTAnodeSupXSize / NumPixelInPmtRow; +const G4double PmtAnodePixelYSize = PMTAnodeSupYSize / NumPixelInPmtCol; + +const G4double RichTbPMTAnodePixelZSize = PMTAnodeSupZSize; +const G4double RichTbPMTAnodePixelPosZ = 0.0 * CLHEP::mm; // Now for the gap between adjacent pixels. // The gaps changed to 0.2 CLHEP::mm following some discussions. -//const G4double RichTbPmtPixelGap = 0.1*CLHEP::mm; - -const G4double RichTbPmtPixelGap = 0.2*CLHEP::mm; +// const G4double RichTbPmtPixelGap = 0.1*CLHEP::mm; +const G4double RichTbPmtPixelGap = 0.2 * CLHEP::mm; #endif // INCLUDE_RICHTBHPDGEOMETRYPARAMETERS_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPMTSupportFrameGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPMTSupportFrameGeometryParameters.hh index 2af2409d33a66cf75462b336f5dc3a182361ce60..bff2d57bbee5e82480376f67877df2ff617f27d0 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPMTSupportFrameGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPMTSupportFrameGeometryParameters.hh @@ -1,7 +1,6 @@ #ifndef INCLUDE_RICHTBPMTSUPPORTFRAMEGEOMETRYPARAMETERS_HH #define INCLUDE_RICHTBPMTSUPPORTFRAMEGEOMETRYPARAMETERS_HH 1 -//size and location of PMTPhDetSupport frames - +// size and location of PMTPhDetSupport frames // Phot det sup frame in Test beam // Looking downstream from the origin of the beam towards +Z axis @@ -77,150 +76,153 @@ */ - //#include "RichTbRunConfig.hh" //in order to make geometry changes without recompiling -//const G4double ECXShift = RichTbRunConfig::getRunConfigInstance()->getECXShift()*CLHEP::mm; +// const G4double ECXShift = RichTbRunConfig::getRunConfigInstance()->getECXShift()*CLHEP::mm; const G4double ECXShift = -5.0; // absolute position is 70.6+ECXShift const G4int NumPhDetSupFrames = 2; -const G4int NumElementaryCell =2; +const G4int NumElementaryCell = 2; const G4int NumPhDetSupFrames15 = 4; -const G4int NumElementaryCell15 =4; +const G4int NumElementaryCell15 = 4; const G4int NumPmtsInEC = 4; const G4int RichTbTotNumPmt = NumElementaryCell * NumPmtsInEC; const G4int RichTbTotNumPmt15 = NumElementaryCell15 * NumPmtsInEC; +const G4double PhDetSupFrameXSize = 56.0 * CLHEP::mm; +const G4double PhDetSupFrameYSize = 60.0 * CLHEP::mm; -const G4double PhDetSupFrameXSize = 56.0*CLHEP::mm; -const G4double PhDetSupFrameYSize = 60.0*CLHEP::mm; - -const G4double PhDetSupFrameZSize = 70.0*CLHEP::mm; - - - +const G4double PhDetSupFrameZSize = 70.0 * CLHEP::mm; +const G4double ECXSize = 55.4 * CLHEP::mm; +const G4double ECYSize = 55.4 * CLHEP::mm; +const G4double ECZSize = 55.4 * CLHEP::mm; +const G4double ECFrontZSize = 23.55 * CLHEP::mm; +const G4double ECFrontDistFromPhDetFrameSurface = 5.0 * CLHEP::mm; -const G4double ECXSize = 55.4*CLHEP::mm; -const G4double ECYSize = 55.4*CLHEP::mm; -const G4double ECZSize = 55.4*CLHEP::mm; -const G4double ECFrontZSize = 23.55*CLHEP::mm; -const G4double ECFrontDistFromPhDetFrameSurface=5.0*CLHEP::mm; +const G4double ECXLocation = 0.0 * CLHEP::mm; +const G4double ECYLocation = 0.0 * CLHEP::mm; +const G4double ECZLocation = (-0.5 * PhDetSupFrameZSize) + ECFrontDistFromPhDetFrameSurface + 0.5 * ECZSize; - - -const G4double ECXLocation = 0.0*CLHEP::mm; -const G4double ECYLocation = 0.0*CLHEP::mm; -const G4double ECZLocation = (-0.5*PhDetSupFrameZSize) + ECFrontDistFromPhDetFrameSurface + 0.5*ECZSize; - - -const G4double RichTbPMTAdjacentGap= 1.8*CLHEP::mm; -const G4double RichTbPMTPitch = 28.0*CLHEP::mm; +const G4double RichTbPMTAdjacentGap = 1.8 * CLHEP::mm; +const G4double RichTbPMTPitch = 28.0 * CLHEP::mm; // PMT Rotation values wrt positive Z. -//The rotations are given to be consistent with Paolo scheme for anodes. +// The rotations are given to be consistent with Paolo scheme for anodes. // The information is available only for the central PMTs ( 0, 2 , 5, 7). So for now the other pmts are // rotations same as the central PMTS as shown in the list above. -const G4double RichTbPmtRotZInEC[] = {CLHEP::pi* CLHEP::rad, CLHEP::pi*CLHEP::rad ,0.5*CLHEP::pi* CLHEP::rad, 0.5*CLHEP::pi* CLHEP::rad, -0.5*CLHEP::pi* CLHEP::rad, -0.5*CLHEP::pi* CLHEP::rad, 0.0*CLHEP::rad, 0.0*CLHEP::rad, - CLHEP::pi*CLHEP::rad, CLHEP::pi*CLHEP::rad ,0.5*CLHEP::pi* CLHEP::rad, 0.5*CLHEP::pi* CLHEP::rad, -0.5*CLHEP::pi* CLHEP::rad, -0.5*CLHEP::pi* CLHEP::rad, 0.0*CLHEP::rad, 0.0*CLHEP::rad}; - - -const G4double RichTbPmtPosXInEC[] = {-0.5*RichTbPMTPitch, 0.5*RichTbPMTPitch, -0.5*RichTbPMTPitch, 0.5*RichTbPMTPitch, - -0.5*RichTbPMTPitch, 0.5*RichTbPMTPitch, -0.5*RichTbPMTPitch, 0.5*RichTbPMTPitch, - -0.5*RichTbPMTPitch, 0.5*RichTbPMTPitch, -0.5*RichTbPMTPitch, 0.5*RichTbPMTPitch, - -0.5*RichTbPMTPitch, 0.5*RichTbPMTPitch, -0.5*RichTbPMTPitch, 0.5*RichTbPMTPitch}; -const G4double RichTbPmtPosYInEC[] = {-0.5*RichTbPMTPitch, -0.5*RichTbPMTPitch, 0.5*RichTbPMTPitch, 0.5*RichTbPMTPitch, - -0.5*RichTbPMTPitch, -0.5*RichTbPMTPitch, 0.5*RichTbPMTPitch, 0.5*RichTbPMTPitch, - -0.5*RichTbPMTPitch, -0.5*RichTbPMTPitch, 0.5*RichTbPMTPitch, 0.5*RichTbPMTPitch, - -0.5*RichTbPMTPitch, -0.5*RichTbPMTPitch, 0.5*RichTbPMTPitch, 0.5*RichTbPMTPitch}; - -const G4double PMTFrontDistFromECSurface = 2.0*CLHEP::mm; - - -const G4double RichTbPmtPosZInEC = (-0.5*ECZSize) + PMTFrontDistFromECSurface + ( 0.5* PMTMasterBoxZSize) ; - -//const G4double PhotonDetPlaneGapWrtRadiatorSurface=30.0*CLHEP::mm; -//testing this change on 04-03-2015 following email discussions. -const G4double PhotonDetPlaneGapWrtRadiatorSurface=25.5*CLHEP::mm; +const G4double RichTbPmtRotZInEC[] = {CLHEP::pi * CLHEP::rad, + CLHEP::pi *CLHEP::rad, + 0.5 * CLHEP::pi *CLHEP::rad, + 0.5 * CLHEP::pi *CLHEP::rad, + -0.5 * CLHEP::pi *CLHEP::rad, + -0.5 * CLHEP::pi *CLHEP::rad, + 0.0 * CLHEP::rad, + 0.0 * CLHEP::rad, + CLHEP::pi *CLHEP::rad, + CLHEP::pi *CLHEP::rad, + 0.5 * CLHEP::pi *CLHEP::rad, + 0.5 * CLHEP::pi *CLHEP::rad, + -0.5 * CLHEP::pi *CLHEP::rad, + -0.5 * CLHEP::pi *CLHEP::rad, + 0.0 * CLHEP::rad, + 0.0 * CLHEP::rad}; + +const G4double RichTbPmtPosXInEC[] = { + -0.5 * RichTbPMTPitch, 0.5 * RichTbPMTPitch, -0.5 * RichTbPMTPitch, 0.5 * RichTbPMTPitch, + -0.5 * RichTbPMTPitch, 0.5 * RichTbPMTPitch, -0.5 * RichTbPMTPitch, 0.5 * RichTbPMTPitch, + -0.5 * RichTbPMTPitch, 0.5 * RichTbPMTPitch, -0.5 * RichTbPMTPitch, 0.5 * RichTbPMTPitch, + -0.5 * RichTbPMTPitch, 0.5 * RichTbPMTPitch, -0.5 * RichTbPMTPitch, 0.5 * RichTbPMTPitch}; +const G4double RichTbPmtPosYInEC[] = { + -0.5 * RichTbPMTPitch, -0.5 * RichTbPMTPitch, 0.5 * RichTbPMTPitch, 0.5 * RichTbPMTPitch, + -0.5 * RichTbPMTPitch, -0.5 * RichTbPMTPitch, 0.5 * RichTbPMTPitch, 0.5 * RichTbPMTPitch, + -0.5 * RichTbPMTPitch, -0.5 * RichTbPMTPitch, 0.5 * RichTbPMTPitch, 0.5 * RichTbPMTPitch, + -0.5 * RichTbPMTPitch, -0.5 * RichTbPMTPitch, 0.5 * RichTbPMTPitch, 0.5 * RichTbPMTPitch}; + +const G4double PMTFrontDistFromECSurface = 2.0 * CLHEP::mm; + +const G4double RichTbPmtPosZInEC = (-0.5 * ECZSize) + PMTFrontDistFromECSurface + (0.5 * PMTMasterBoxZSize); + +// const G4double PhotonDetPlaneGapWrtRadiatorSurface=30.0*CLHEP::mm; +// testing this change on 04-03-2015 following email discussions. +const G4double PhotonDetPlaneGapWrtRadiatorSurface = 25.5 * CLHEP::mm; // The following numbers are in the Crystal master reference frame. -const G4double PhotonDetectorPlaneX=0.0; -const G4double PhotonDetectorPlaneY=0.0; -const G4double PhotonDetectorPlaneZ= RadiatorLensThickness + PhotonDetPlaneGapWrtRadiatorSurface; -const G4double PhotonDetectorPlaneDirCosX=0.0; -const G4double PhotonDetectorPlaneDirCosY=0.0; -const G4double PhotonDetectorPlaneDirCosZ=1.0; - +const G4double PhotonDetectorPlaneX = 0.0; +const G4double PhotonDetectorPlaneY = 0.0; +const G4double PhotonDetectorPlaneZ = RadiatorLensThickness + PhotonDetPlaneGapWrtRadiatorSurface; +const G4double PhotonDetectorPlaneDirCosX = 0.0; +const G4double PhotonDetectorPlaneDirCosY = 0.0; +const G4double PhotonDetectorPlaneDirCosZ = 1.0; const G4double PhotonDetPlaneToPMTMasterSurfaceZ = -1.0 * RichTbPMTEdgeToQuartzInsideEdgeDeltaZ; -const G4double PhotonDetPlaneToPhDetSupFrameFrontSurface = PhotonDetPlaneToPMTMasterSurfaceZ - -PMTFrontDistFromECSurface- ECFrontDistFromPhDetFrameSurface; - -const G4double PhDetSupFrameZLocation = PhotonDetectorPlaneZ + PhotonDetPlaneToPhDetSupFrameFrontSurface + 0.5*PhDetSupFrameZSize; -const G4double PhDetSupFrameNominalXPos= 70.0*CLHEP::mm; -//const G4double PhDetSupFrameFinalXPos = PhDetSupFrameNominalXPos-(0.5*RichTbPMTPitch)+1.5*CLHEP::mm; -//const G4double PhDetSupFrameFinalXPos = PhDetSupFrameNominalXPos-(0.5*RichTbPMTPitch)+4.0*CLHEP::mm; -//Sajan -//const G4double PhDetSupFrameFinalXPos = PhDetSupFrameNominalXPos-(0.5*RichTbPMTPitch)+8.0*CLHEP::mm; -//mio -//const G4double PhDetSupFrameFinalXPos = 70.92; -//modified May6-2015 for test -//const G4double ECXShift = (RichTbRunConfig::getRunConfigInstance()->getRadiatorConfiguration()==3) ? ECXShift_ : 0.0; -const G4double PhDetSupFrameFinalXPos = 70.6*CLHEP::mm; -const G4double PhDetSupFrameFinalXPos15 = 70.6*CLHEP::mm + ECXShift; -//const G4double PhDetSupFrameFinalYPos = 0*CLHEP::mm/*1.3*CLHEP::mm*/; -const G4double PhDetSupFrameYGap = 0.3*CLHEP::mm; +const G4double PhotonDetPlaneToPhDetSupFrameFrontSurface = + PhotonDetPlaneToPMTMasterSurfaceZ - PMTFrontDistFromECSurface - ECFrontDistFromPhDetFrameSurface; + +const G4double PhDetSupFrameZLocation = + PhotonDetectorPlaneZ + PhotonDetPlaneToPhDetSupFrameFrontSurface + 0.5 * PhDetSupFrameZSize; +const G4double PhDetSupFrameNominalXPos = 70.0 * CLHEP::mm; +// const G4double PhDetSupFrameFinalXPos = PhDetSupFrameNominalXPos-(0.5*RichTbPMTPitch)+1.5*CLHEP::mm; +// const G4double PhDetSupFrameFinalXPos = PhDetSupFrameNominalXPos-(0.5*RichTbPMTPitch)+4.0*CLHEP::mm; +// Sajan +// const G4double PhDetSupFrameFinalXPos = PhDetSupFrameNominalXPos-(0.5*RichTbPMTPitch)+8.0*CLHEP::mm; +// mio +// const G4double PhDetSupFrameFinalXPos = 70.92; +// modified May6-2015 for test +// const G4double ECXShift = (RichTbRunConfig::getRunConfigInstance()->getRadiatorConfiguration()==3) ? ECXShift_ : 0.0; +const G4double PhDetSupFrameFinalXPos = 70.6 * CLHEP::mm; +const G4double PhDetSupFrameFinalXPos15 = 70.6 * CLHEP::mm + ECXShift; +// const G4double PhDetSupFrameFinalYPos = 0*CLHEP::mm/*1.3*CLHEP::mm*/; +const G4double PhDetSupFrameYGap = 0.3 * CLHEP::mm; const G4double PhDetSupFrameFinalYPos = 0.0; -const G4double PhDetSupFrameFinalYPos15 = 0.5*ECYSize+PhDetSupFrameYGap; -//Sajan -//const G4double PhDetSupFrameXLocation[] = { PhDetSupFrameFinalXPos , -1*PhDetSupFrameFinalXPos }; -//const G4double PhDetSupFrameXLocation[] = { 70.6 , -70.92 }; +const G4double PhDetSupFrameFinalYPos15 = 0.5 * ECYSize + PhDetSupFrameYGap; +// Sajan +// const G4double PhDetSupFrameXLocation[] = { PhDetSupFrameFinalXPos , -1*PhDetSupFrameFinalXPos }; +// const G4double PhDetSupFrameXLocation[] = { 70.6 , -70.92 }; // Modified May 6-2015 for test -const G4double PhDetSupFrameXLocation[] = {PhDetSupFrameFinalXPos ,-1*PhDetSupFrameFinalXPos}; -const G4double PhDetSupFrameXLocation15[] = {PhDetSupFrameFinalXPos15 ,-1*PhDetSupFrameFinalXPos15}; +const G4double PhDetSupFrameXLocation[] = {PhDetSupFrameFinalXPos, -1 * PhDetSupFrameFinalXPos}; +const G4double PhDetSupFrameXLocation15[] = {PhDetSupFrameFinalXPos15, -1 * PhDetSupFrameFinalXPos15}; -//const G4double PhDetSupFrameYLocation[] = { 0.0*CLHEP::mm, 0.0*CLHEP::mm}; +// const G4double PhDetSupFrameYLocation[] = { 0.0*CLHEP::mm, 0.0*CLHEP::mm}; // Moving EC up for test -const G4double PhDetSupFrameYLocation[] = {PhDetSupFrameFinalYPos, PhDetSupFrameFinalYPos}; -const G4double PhDetSupFrameYLocation15[] = {PhDetSupFrameFinalYPos15, PhDetSupFrameFinalYPos15}; - -//Upgrade 2015 -//const G4double PhDetSupFrameRadius = sqrt(pow(PhDetSupFrameFinalXPos,2) + pow(PhDetSupFrameFinalYPos,2)); -//const G4double PhDetSupFrameFinalBottomXPos = PhDetSupFrameRadius/3; //for equidistance of EC's in x -//const G4double PhDetSupFrameFinalBottomYPos = sqrt(pow(PhDetSupFrameRadius,2)-pow(PhDetSupFrameFinalBottomXPos,2)); //for same radius -//test move up and inwards -//const G4double PhDetSupFrameBottomXLocation[] = {0.5*PhDetSupFrameFinalXPos-5*CLHEP::mm, -0.5*PhDetSupFrameFinalXPos+5*CLHEP::mm}; -//const G4double PhDetSupFrameBottomYLocation[] = {-1*PhDetSupFrameFinalXPos+5*CLHEP::mm, -1*PhDetSupFrameFinalXPos+5*CLHEP::mm}; -const G4double PhDetSupFrameBottomXLocation[] = {PhDetSupFrameFinalXPos15 ,-1*PhDetSupFrameFinalXPos15}; -const G4double PhDetSupFrameBottomYLocation[] = {-1*PhDetSupFrameFinalYPos15, -1*PhDetSupFrameFinalYPos15}; - -const G4double ECSupportTolerence = 1.0*CLHEP::mm; - -const G4double ECSupportXSize = ECXSize-ECSupportTolerence; -const G4double ECSupportYSize = ECYSize-ECSupportTolerence; -const G4double ECSupportZSize = 3.0*CLHEP::mm; +const G4double PhDetSupFrameYLocation[] = {PhDetSupFrameFinalYPos, PhDetSupFrameFinalYPos}; +const G4double PhDetSupFrameYLocation15[] = {PhDetSupFrameFinalYPos15, PhDetSupFrameFinalYPos15}; + +// Upgrade 2015 +// const G4double PhDetSupFrameRadius = sqrt(pow(PhDetSupFrameFinalXPos,2) + pow(PhDetSupFrameFinalYPos,2)); +// const G4double PhDetSupFrameFinalBottomXPos = PhDetSupFrameRadius/3; //for equidistance of EC's in x +// const G4double PhDetSupFrameFinalBottomYPos = sqrt(pow(PhDetSupFrameRadius,2)-pow(PhDetSupFrameFinalBottomXPos,2)); +// //for same radius test move up and inwards const G4double PhDetSupFrameBottomXLocation[] = +// {0.5*PhDetSupFrameFinalXPos-5*CLHEP::mm, -0.5*PhDetSupFrameFinalXPos+5*CLHEP::mm}; const G4double +// PhDetSupFrameBottomYLocation[] = {-1*PhDetSupFrameFinalXPos+5*CLHEP::mm, -1*PhDetSupFrameFinalXPos+5*CLHEP::mm}; +const G4double PhDetSupFrameBottomXLocation[] = {PhDetSupFrameFinalXPos15, -1 * PhDetSupFrameFinalXPos15}; +const G4double PhDetSupFrameBottomYLocation[] = {-1 * PhDetSupFrameFinalYPos15, -1 * PhDetSupFrameFinalYPos15}; + +const G4double ECSupportTolerence = 1.0 * CLHEP::mm; + +const G4double ECSupportXSize = ECXSize - ECSupportTolerence; +const G4double ECSupportYSize = ECYSize - ECSupportTolerence; +const G4double ECSupportZSize = 3.0 * CLHEP::mm; const G4double ECSupportXLocation = ECXLocation; const G4double ECSupportYLocation = ECYLocation; -const G4double ECSupportZLocation = ECZLocation+ 0.5*(ECZSize + ECSupportZSize)+2.0*CLHEP::mm; - +const G4double ECSupportZLocation = ECZLocation + 0.5 * (ECZSize + ECSupportZSize) + 2.0 * CLHEP::mm; -//testbeam 2015 upgrade -const G4double ECXLocation15 = 0.0*CLHEP::mm; -const G4double ECYLocation15 = 0.0*CLHEP::mm; -const G4double ECZLocation15 = (-0.5*PhDetSupFrameZSize) + ECFrontDistFromPhDetFrameSurface + 0.5*ECZSize; +// testbeam 2015 upgrade +const G4double ECXLocation15 = 0.0 * CLHEP::mm; +const G4double ECYLocation15 = 0.0 * CLHEP::mm; +const G4double ECZLocation15 = (-0.5 * PhDetSupFrameZSize) + ECFrontDistFromPhDetFrameSurface + 0.5 * ECZSize; const G4double ECSupportXLocation15 = ECXLocation15; const G4double ECSupportYLocation15 = ECYLocation15; -const G4double ECSupportZLocation15 = ECZLocation15+ 0.5*(ECZSize + ECSupportZSize)+2.0*CLHEP::mm; - -const G4double PhotonDetPlaneGapWrtRadiatorSurface15=21.0*CLHEP::mm; -const G4double PhotonDetectorPlaneX15=0.0; -const G4double PhotonDetectorPlaneY15=0.0; -const G4double PhotonDetectorPlaneZ15= RadiatorLensThickness15 + PhotonDetPlaneGapWrtRadiatorSurface15; -const G4double PhDetSupFrameZLocation15 = PhotonDetectorPlaneZ15 + PhotonDetPlaneToPhDetSupFrameFrontSurface + 0.5*PhDetSupFrameZSize; - - +const G4double ECSupportZLocation15 = ECZLocation15 + 0.5 * (ECZSize + ECSupportZSize) + 2.0 * CLHEP::mm; + +const G4double PhotonDetPlaneGapWrtRadiatorSurface15 = 21.0 * CLHEP::mm; +const G4double PhotonDetectorPlaneX15 = 0.0; +const G4double PhotonDetectorPlaneY15 = 0.0; +const G4double PhotonDetectorPlaneZ15 = RadiatorLensThickness15 + PhotonDetPlaneGapWrtRadiatorSurface15; +const G4double PhDetSupFrameZLocation15 = + PhotonDetectorPlaneZ15 + PhotonDetPlaneToPhDetSupFrameFrontSurface + 0.5 * PhDetSupFrameZSize; #endif // INCLUDE_RICHTBPMTSUPPORTFRAMEGEOMETRYPARAMETERS_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPeUserInfoAttach.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPeUserInfoAttach.hh index c04f3b88c5285da9dd257a2ad99d44fd51bc46ac..6a5678ed03c01054769f56bb3bd5abf68cd91782 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPeUserInfoAttach.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPeUserInfoAttach.hh @@ -1,14 +1,13 @@ // $Id: $ -#ifndef INCLUDE_RICHTBPEUSERINFOATTACH_HH +#ifndef INCLUDE_RICHTBPEUSERINFOATTACH_HH #define INCLUDE_RICHTBPEUSERINFOATTACH_HH 1 // Include files #include "Geant4/G4Track.hh" #include "Geant4/G4ThreeVector.hh" -extern G4Track* RichTbPeInfoAttach( const G4Track& aPhotonTk, G4Track* aPETk, - G4ThreeVector aPeOriginInPhSup); +extern G4Track *RichTbPeInfoAttach(const G4Track &aPhotonTk, G4Track *aPETk, G4ThreeVector aPeOriginInPhSup); -extern G4Track* RichTbPeBckAttach( const G4Track& aphotontk, G4Track* aSecPETrack ) ; +extern G4Track *RichTbPeBckAttach(const G4Track &aphotontk, G4Track *aSecPETrack); #endif // INCLUDE_RICHTBPEUSERINFOATTACH_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhDFrameGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhDFrameGeometryParameters.hh index 6e4c751d8c7f2d1ddd7ebe171557f0f026bdb269..6276be044e6864ef04ee0109b6e2eb4fded0bec7 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhDFrameGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhDFrameGeometryParameters.hh @@ -1,30 +1,31 @@ // $Id: $ -#ifndef INCLUDE_RICHTBPHDFRAMEGEOMETRYPARAMETERS_HH +#ifndef INCLUDE_RICHTBPHDFRAMEGEOMETRYPARAMETERS_HH #define INCLUDE_RICHTBPHDFRAMEGEOMETRYPARAMETERS_HH 1 // Include files /** @class RichTbVesselGeometryParameters RichTbVesselGeometryParameters.hh include/RichTbVesselGeometryParameters.hh - * + * * * @author Sajan EASO * @date 2003-10-21 */ // first for the overall vessel. -const G4double RichTbPhDFrameXSize=600.0*CLHEP::mm; -const G4double RichTbPhDFrameYSize=600.0*CLHEP::mm; -const G4double RichTbPhDFrameZSize=30.0*CLHEP::mm; - -const G4double RichTbPhDFrameOriginShiftFromLeftEdgeX=0.0*CLHEP::mm; // for now assume middle part. to be verified. -const G4double RichTbPhDFrameOriginShiftFromFloorY=0.0*CLHEP::mm; -const G4double RichTbPhDFrameOriginShiftFromLeftZ= 30*CLHEP::mm + 15*CLHEP::mm + 22.5*CLHEP::mm; - -const G4double RichTbPhDFrameXRotation=0.0*CLHEP::rad; // for now in the following vessel Xrot is not used in Euler rotations since it is 0. -//const G4double RichTbVesselYRotation=0.4817*CLHEP::rad; -const G4double RichTbPhDFrameYRotation=0.0; +const G4double RichTbPhDFrameXSize = 600.0 * CLHEP::mm; +const G4double RichTbPhDFrameYSize = 600.0 * CLHEP::mm; +const G4double RichTbPhDFrameZSize = 30.0 * CLHEP::mm; + +const G4double RichTbPhDFrameOriginShiftFromLeftEdgeX = 0.0 * CLHEP::mm; // for now assume middle part. to be verified. +const G4double RichTbPhDFrameOriginShiftFromFloorY = 0.0 * CLHEP::mm; +const G4double RichTbPhDFrameOriginShiftFromLeftZ = 30 * CLHEP::mm + 15 * CLHEP::mm + 22.5 * CLHEP::mm; + +const G4double RichTbPhDFrameXRotation = + 0.0 * CLHEP::rad; // for now in the following vessel Xrot is not used in Euler rotations since it is 0. +// const G4double RichTbVesselYRotation=0.4817*CLHEP::rad; +const G4double RichTbPhDFrameYRotation = 0.0; const G4double RichTbPhDFrameYLocation = -RichTbPhDFrameOriginShiftFromFloorY; -const G4double RichTbPhDFrameXShiftAlongCrystal =0.0; +const G4double RichTbPhDFrameXShiftAlongCrystal = 0.0; const G4double RichTbPhDFrameZShiftAlongCrystal = +RichTbPhDFrameOriginShiftFromLeftZ; const G4double RichTbPhDFrameXLocation = RichTbPhDFrameXShiftAlongCrystal; @@ -32,20 +33,20 @@ const G4double RichTbPhDFrameZLocation = RichTbPhDFrameZShiftAlongCrystal; // now for variables used after creating the geometry in stepaction. -const G4double RichTbPhDFrameEnvPlateThickness=0.0*CLHEP::mm; +const G4double RichTbPhDFrameEnvPlateThickness = 0.0 * CLHEP::mm; // the following are not exact values. -//const G4double RichTbCrystalXNegExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX-RichTbCrystalXSize; -//const G4double RichTbCrystalXPosExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX; -//const G4double RichTbCrystalZUpsExtremeAlongCrystal= -RichTbCrystalUpsExternalPartZSize; -//const G4double RichTbCrystalZDnsExtremeAlongCrystal= -RichTbcrystalUpsExternalPartZSize+RichTbCrystalZSize; -//const G4double RichTbCrystalXNegExtreme= RichTbCrystalXNegExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ +// const G4double RichTbCrystalXNegExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX-RichTbCrystalXSize; +// const G4double RichTbCrystalXPosExtremeAlongCrystal=RichTbCrystalOriginShiftFromLeftEdgeX; +// const G4double RichTbCrystalZUpsExtremeAlongCrystal= -RichTbCrystalUpsExternalPartZSize; +// const G4double RichTbCrystalZDnsExtremeAlongCrystal= -RichTbcrystalUpsExternalPartZSize+RichTbCrystalZSize; +// const G4double RichTbCrystalXNegExtreme= RichTbCrystalXNegExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ // RichTbCrystalZDnsExtremeAlongCrystal*sin(RichTbCrystalYRotation); -//const G4double RichTbCrystalXPosExtreme= RichTbCrystalXPosExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ +// const G4double RichTbCrystalXPosExtreme= RichTbCrystalXPosExtremeAlongCrystal*cos(RichTbCrystalYRotation)+ // RichTbCrystalZUpsExtremeAlongCrystal*sin(RichTbCrystalYRotation); -//const G4double RichTbCrystalYNegExtreme= RichTbCrystalYLocation-0.5*RichTbCrystalYSize; -//const G4double RichTbCrystalYPosExtreme= RichTbCrystalYLocation+0.5*RichTbCrystalYSize; -//const G4double RichTbCrystalZDnsExtreme = -RichTbCrystalXNegExtremeAlongCrystal*sin(RichTbCrystalYRotation)+ +// const G4double RichTbCrystalYNegExtreme= RichTbCrystalYLocation-0.5*RichTbCrystalYSize; +// const G4double RichTbCrystalYPosExtreme= RichTbCrystalYLocation+0.5*RichTbCrystalYSize; +// const G4double RichTbCrystalZDnsExtreme = -RichTbCrystalXNegExtremeAlongCrystal*sin(RichTbCrystalYRotation)+ // RichTbCrystalZDnsExtremeAlongCrystal*cos(RichTbCrystalYRotation); -//const G4double RichTbCrystalDnsZEnd = RichTbCrystalZDnsExtreme; +// const G4double RichTbCrystalDnsZEnd = RichTbCrystalZDnsExtreme; #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhotoElectron.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhotoElectron.hh index 7671592acad5a2b3bf8a7c84d34b796a5a334d26..7eeecde72e90e38a25c241e651543169aa354b2e 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhotoElectron.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhotoElectron.hh @@ -24,7 +24,7 @@ // $Id: RichTbPhotoElectron.h,v 1.1 2003/04/29 15:04:49 seaso Exp $ // GEANT4 tag $Name: $ // -// +// // ------------------------------------------------------------ // GEANT 4 class header file // @@ -52,32 +52,18 @@ class G4Positron; // ### RICHPHOTOELECTRON ### // ###################################################################### -class RichTbPhotoElectron : public G4ParticleDefinition -{ +class RichTbPhotoElectron : public G4ParticleDefinition { // friend class G4Positron; - private: - static RichTbPhotoElectron* theRichTbPhotoElectronInstance; - - private: //hide constructor as private +private: + static RichTbPhotoElectron *theRichTbPhotoElectronInstance; - public: - virtual ~RichTbPhotoElectron(){} - - static RichTbPhotoElectron* Definition(); - static RichTbPhotoElectron* PhotoElectronDefinition(); - static RichTbPhotoElectron* PhotoElectron(); +private: // hide constructor as private +public: + virtual ~RichTbPhotoElectron() {} + static RichTbPhotoElectron *Definition(); + static RichTbPhotoElectron *PhotoElectronDefinition(); + static RichTbPhotoElectron *PhotoElectron(); }; #endif - - - - - - - - - - - diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhotonInfo.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhotonInfo.hh index 914ce41776374ca8a2ec153d5a7dcd18265e8f6b..1c3f5995c7d88076bd9adc4dabf8f5f90fc48b5a 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhotonInfo.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhotonInfo.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBPHOTONINFO_HH +#ifndef INCLUDE_RICHTBPHOTONINFO_HH #define INCLUDE_RICHTBPHOTONINFO_HH 1 // Include files @@ -7,87 +7,54 @@ #include "Geant4/G4ThreeVector.hh" /** @class RichTbPhotonInfo RichTbPhotonInfo.hh include/RichTbPhotonInfo.hh - * + * * * @author Sajan EASO * @date 2004-01-20 */ class RichTbPhotonInfo { -public: +public: /// Standard constructor - RichTbPhotonInfo( ); + RichTbPhotonInfo(); - virtual ~RichTbPhotonInfo( ); ///< Destructor - G4int NumRayleighScat(){return mNumRayleighScat;} - G4ThreeVector PhotonCoordPMTQWExternal() - { return mPhotonCoordPMTQWExternal;} - G4double CkvCosThetaAtProd() - { return mCkvCosThetaAtProd;} - G4double CkvPhiAtProd() - { return mCkvPhiAtProd;} - G4double CkvPhotonEnergyAtProd() - { return mCkvPhotonEnergyAtProd;} + virtual ~RichTbPhotonInfo(); ///< Destructor + G4int NumRayleighScat() { return mNumRayleighScat; } + G4ThreeVector PhotonCoordPMTQWExternal() { return mPhotonCoordPMTQWExternal; } + G4double CkvCosThetaAtProd() { return mCkvCosThetaAtProd; } + G4double CkvPhiAtProd() { return mCkvPhiAtProd; } + G4double CkvPhotonEnergyAtProd() { return mCkvPhotonEnergyAtProd; } - G4int PhotonPMTQWMultipleIncidenceFlag() - { return mPhotonPMTQWMultipleIncidenceFlag;} + G4int PhotonPMTQWMultipleIncidenceFlag() { return mPhotonPMTQWMultipleIncidenceFlag; } - - G4double ParentChTrackMomentum() - { return mParentChTrackMomentum;} - G4ThreeVector ParentChTrackThreeMom() - { return mParentChTrackThreeMom;} - G4ThreeVector PhotonCrystalDnsTIRCoord() - { return mPhotonCrystalDnsTIRCoord;} - G4ThreeVector PhotonSphMirrReflCoord() - { return mPhotonSphMirrReflCoord;} - G4ThreeVector PhotonCrystalDnsExitCoord() - { return mPhotonCrystalDnsExitCoord;} + G4double ParentChTrackMomentum() { return mParentChTrackMomentum; } + G4ThreeVector ParentChTrackThreeMom() { return mParentChTrackThreeMom; } + G4ThreeVector PhotonCrystalDnsTIRCoord() { return mPhotonCrystalDnsTIRCoord; } + G4ThreeVector PhotonSphMirrReflCoord() { return mPhotonSphMirrReflCoord; } + G4ThreeVector PhotonCrystalDnsExitCoord() { return mPhotonCrystalDnsExitCoord; } + G4int PhotonRadiatorMultipleIncidenceFlag() { return mPhotonRadiatorMultipleIncidenceFlag; } - G4int PhotonRadiatorMultipleIncidenceFlag() - { return mPhotonRadiatorMultipleIncidenceFlag;} + void BumpNumRaylieghScat() { mNumRayleighScat++; } + void setNumRaylieghScat(G4int aNum) { mNumRayleighScat = aNum; } + void setPhotonCoordPMTQWExternal(G4ThreeVector aCoorde) { mPhotonCoordPMTQWExternal = aCoorde; } + void setCkvCosThetaAtProd(G4double aCosTheta) { mCkvCosThetaAtProd = aCosTheta; } + void setCkvPhiAtProd(G4double aPhi) { mCkvPhiAtProd = aPhi; } + void setCkvPhotonEnergyAtProd(G4double aEnergy) { mCkvPhotonEnergyAtProd = aEnergy; } - + void BumpPhotonPMTQWMultipleIncidenceFlag() { mPhotonPMTQWMultipleIncidenceFlag++; } + void setPhotonPMTQWMultipleIncidenceFlag(G4int amFlag) { mPhotonPMTQWMultipleIncidenceFlag = amFlag; } - void BumpNumRaylieghScat() {mNumRayleighScat++;} - void setNumRaylieghScat(G4int aNum) {mNumRayleighScat=aNum;} - void setPhotonCoordPMTQWExternal(G4ThreeVector aCoorde ) - {mPhotonCoordPMTQWExternal=aCoorde;} - void setCkvCosThetaAtProd(G4double aCosTheta ) - {mCkvCosThetaAtProd=aCosTheta;} - void setCkvPhiAtProd(G4double aPhi) - { mCkvPhiAtProd=aPhi;} - void setCkvPhotonEnergyAtProd(G4double aEnergy) - { mCkvPhotonEnergyAtProd=aEnergy;} - - void BumpPhotonPMTQWMultipleIncidenceFlag() - {mPhotonPMTQWMultipleIncidenceFlag++;} - - void setPhotonPMTQWMultipleIncidenceFlag( G4int amFlag ) - {mPhotonPMTQWMultipleIncidenceFlag=amFlag;} + void setParentChTrackMomentum(G4double aMom) { mParentChTrackMomentum = aMom; } + void setParentChTrackThreeMom(G4ThreeVector aTMom) { mParentChTrackThreeMom = aTMom; } + void setPhotonCrystalDnsTIRCoord(G4ThreeVector aTC) { mPhotonCrystalDnsTIRCoord = aTC; } + void setPhotonSphMirrReflCoord(G4ThreeVector aMiC) { mPhotonSphMirrReflCoord = aMiC; } + void setPhotonCrystalDnsExitCoord(G4ThreeVector aDC) { mPhotonCrystalDnsExitCoord = aDC; } - void setParentChTrackMomentum( G4double aMom ) - {mParentChTrackMomentum= aMom;} - void setParentChTrackThreeMom(G4ThreeVector aTMom) - { mParentChTrackThreeMom=aTMom;} - void setPhotonCrystalDnsTIRCoord(G4ThreeVector aTC) - { mPhotonCrystalDnsTIRCoord= aTC;} - void setPhotonSphMirrReflCoord(G4ThreeVector aMiC) - { mPhotonSphMirrReflCoord = aMiC;} - void setPhotonCrystalDnsExitCoord(G4ThreeVector aDC) - {mPhotonCrystalDnsExitCoord = aDC;} - - void BumpPhotonRadiatorMultipleIncidenceFlag() - { mPhotonRadiatorMultipleIncidenceFlag++;} - - - + void BumpPhotonRadiatorMultipleIncidenceFlag() { mPhotonRadiatorMultipleIncidenceFlag++; } protected: - private: - G4int mNumRayleighScat; G4ThreeVector mPhotonCoordPMTQWExternal; G4int mPhotonPMTQWMultipleIncidenceFlag; @@ -100,6 +67,5 @@ private: G4ThreeVector mPhotonSphMirrReflCoord; G4ThreeVector mPhotonCrystalDnsExitCoord; G4int mPhotonRadiatorMultipleIncidenceFlag; - }; #endif // INCLUDE_RICHTBPHOTONINFO_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhotonProdHisto.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhotonProdHisto.hh index eb80382fbeb191f93e14b9feec507c159254ef6a..0ddaa1c322888f0e3e6198fb65d9267f7dd196ed 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhotonProdHisto.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhotonProdHisto.hh @@ -1,15 +1,12 @@ // $Id: $ -#ifndef INCLUDE_RICHTBPHOTONPRODHISTO_HH +#ifndef INCLUDE_RICHTBPHOTONPRODHISTO_HH #define INCLUDE_RICHTBPHOTONPRODHISTO_HH 1 // Include files #include "Geant4/globals.hh" #include "Geant4/G4Track.hh" -extern void RichTbPhotonProductionHisto( const G4Track& aChTrack, - const G4Track* aPhotTrack, - const G4double CkvCosTh, - const G4double CkvPhi, - const G4double CkvPhEner); +extern void RichTbPhotonProductionHisto(const G4Track &aChTrack, const G4Track *aPhotTrack, const G4double CkvCosTh, + const G4double CkvPhi, const G4double CkvPhEner); #endif // INCLUDE_RICHTBPHOTONPRODHISTO_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhotonUserInfoAttach.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhotonUserInfoAttach.hh index 81e246211aeb9390941fea1862157c9b7c00eb01..2aeecd5c6957e104cc09b0769caff809445ec069 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhotonUserInfoAttach.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhotonUserInfoAttach.hh @@ -1,18 +1,13 @@ // $Id: $ -#ifndef INCLUDE_RICHTBPHOTONUSERINFOATTACH_HH +#ifndef INCLUDE_RICHTBPHOTONUSERINFOATTACH_HH #define INCLUDE_RICHTBPHOTONUSERINFOATTACH_HH 1 #include "Geant4/G4Track.hh" -extern void RichTbPMTQWIncidenceInfoAttach(G4Track* aPhTrack, - G4ThreeVector aQWPos); -extern void RichTbRadiatorBoundaryInfoAttach(G4Track* aPhTrack, G4ThreeVector aBoundaryPos, G4int RFROption ); - -extern void RichTbRayleighInfoAttach( const G4Track& aPhotonTrack); -extern G4Track* RichTbCkvProdInfoAttach(const G4Track& aChTrack, - G4Track* aPhotTrack, - const G4double CkvCosTheta, - const G4double CkvPhi, - const G4double CkvPhotEnergy); +extern void RichTbPMTQWIncidenceInfoAttach(G4Track *aPhTrack, G4ThreeVector aQWPos); +extern void RichTbRadiatorBoundaryInfoAttach(G4Track *aPhTrack, G4ThreeVector aBoundaryPos, G4int RFROption); +extern void RichTbRayleighInfoAttach(const G4Track &aPhotonTrack); +extern G4Track *RichTbCkvProdInfoAttach(const G4Track &aChTrack, G4Track *aPhotTrack, const G4double CkvCosTheta, + const G4double CkvPhi, const G4double CkvPhotEnergy); #endif // INCLUDE_RICHTBPHOTONUSERINFOATTACH_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhysicsList.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhysicsList.hh index 9e230134e3ca4a41c6842018d2c97d06af365ee2..8637c0b82ad4dcc2c9bd38d8088d8d10c875c1a4 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhysicsList.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPhysicsList.hh @@ -5,37 +5,35 @@ #include "Geant4/G4VUserPhysicsList.hh" #include "Geant4/G4ParticleTable.hh" -class RichTbPhysicsList:public G4VUserPhysicsList { - public: - RichTbPhysicsList(); - virtual ~ RichTbPhysicsList(); - - protected: - // Construct particles and processes - virtual void ConstructParticle(); - virtual void ConstructProcess(); - - // - virtual void SetCuts(); - - protected: - // these methods Construct particles - virtual void ConstructBosons(); - virtual void ConstructLeptons(); - virtual void ConstructMesons(); - virtual void ConstructBaryons(); - - protected: - // these methods Construct physics processes and register them - virtual void ConstructGeneral(); - virtual void ConstructEM(); - virtual void ConstructOp(); - - private: - - // the particle table has the complete List of existing particle types - G4ParticleTable *theParticleTable; - G4ParticleTable::G4PTblDicIterator * theParticleIterator; - +class RichTbPhysicsList : public G4VUserPhysicsList { +public: + RichTbPhysicsList(); + virtual ~RichTbPhysicsList(); + +protected: + // Construct particles and processes + void ConstructParticle() override; + void ConstructProcess() override; + + // + void SetCuts() override; + +protected: + // these methods Construct particles + virtual void ConstructBosons(); + virtual void ConstructLeptons(); + virtual void ConstructMesons(); + virtual void ConstructBaryons(); + +protected: + // these methods Construct physics processes and register them + virtual void ConstructGeneral(); + virtual void ConstructEM(); + virtual void ConstructOp(); + +private: + // the particle table has the complete List of existing particle types + G4ParticleTable *theParticleTable; + G4ParticleTable::G4PTblDicIterator *theParticleIterator; }; -#endif /* RichTbPhysicsList_h */ +#endif /* RichTbPhysicsList_h */ diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPmtPixelEfficiency.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPmtPixelEfficiency.hh index 31092bbd607cdb83f2d56368a4acdda70db26744..c8b65e20a5250ef8f613854dad87dd2a3e7ea8c6 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPmtPixelEfficiency.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPmtPixelEfficiency.hh @@ -7,8 +7,6 @@ #include <cmath> #include <map> - - /** @class RichTbPmtPixelEfficiency RichTbPmtPixelEfficiency.hh include/RichTbPmtPixelEfficiency.hh * * @@ -19,31 +17,27 @@ class RichTbPmtPixelEfficiency { public: /// Standard constructor // RichTbPmtPixelEfficiency( ); - static RichTbPmtPixelEfficiency* getRichTbPmtPixelEfficiencyInstance(); + static RichTbPmtPixelEfficiency *getRichTbPmtPixelEfficiencyInstance(); - virtual ~RichTbPmtPixelEfficiency( ); ///< Destructor + virtual ~RichTbPmtPixelEfficiency(); ///< Destructor void PmtPixelEffInitialize(); - G4double getPixelEff(G4int aPmt, G4int aPixel) - { return mPmtPixelEff [aPmt] [aPixel]; } - G4bool PmtPixelEffOK (G4int aPmtNum, G4int aPixelNum); + G4double getPixelEff(G4int aPmt, G4int aPixel) { return mPmtPixelEff[aPmt][aPixel]; } + G4bool PmtPixelEffOK(G4int aPmtNum, G4int aPixelNum); void ReadPixelEfficiency(); - void ReadAndCopyPixelEffFromFile(G4String aInpFileName ); + void ReadAndCopyPixelEffFromFile(G4String aInpFileName); void FillPixelEfficiency(); - protected: - private: - RichTbPmtPixelEfficiency( ); - static RichTbPmtPixelEfficiency* RichTbPmtPixelEfficiencyInstance; + RichTbPmtPixelEfficiency(); + static RichTbPmtPixelEfficiency *RichTbPmtPixelEfficiencyInstance; - std::vector <std::vector <G4double> > mPmtPixelEff; - std::vector <std::vector <G4String> > mPmtPixelLabel; + std::vector<std::vector<G4double>> mPmtPixelEff; + std::vector<std::vector<G4String>> mPmtPixelLabel; - std::multimap<G4String,G4double> mPmtAnodeEffMap; + std::multimap<G4String, G4double> mPmtAnodeEffMap; G4int RichTbTotNumPmtFinal = 0; - }; #endif // INCLUDE_RICHTBPMTPIXELEFFICIENCY_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPmtSteppingAction.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPmtSteppingAction.hh index c4c1b5163a3a20459e235307d6ab32757d85d9bd..02244f2b987d90cce3ac7906c92a9926a68a3a0f 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPmtSteppingAction.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPmtSteppingAction.hh @@ -6,17 +6,14 @@ #include "Geant4/G4ParticleChange.hh" #include "RichTbMiscNames.hh" - -class RichTbPmtSteppingAction:public G4UserSteppingAction { +class RichTbPmtSteppingAction : public G4UserSteppingAction { public: RichTbPmtSteppingAction(); - virtual ~ RichTbPmtSteppingAction(); - void UserSteppingAction(const G4Step * aStep); + virtual ~RichTbPmtSteppingAction(); + void UserSteppingAction(const G4Step *aStep) override; private: G4double mChTrackMinMomFactorForHisto; - - }; #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPrimaryGeneratorAction.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPrimaryGeneratorAction.hh index cbf51bc495b6ab7c54abce9186cda9e994fa6c18..8fb2933bcedcd754bc51cc4c1088c780b4c3dd4f 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPrimaryGeneratorAction.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbPrimaryGeneratorAction.hh @@ -9,27 +9,24 @@ class G4ParticleGun; class G4Event; -class RichTbPrimaryGeneratorAction:public G4VUserPrimaryGeneratorAction { - public: - - RichTbPrimaryGeneratorAction(); - virtual ~ RichTbPrimaryGeneratorAction(); - - public: - - void GeneratePrimaries(G4Event * anEvent); - G4ParticleDefinition* SetParticleType(); - void SetParticleStartPos(); - void SetParticleKineticEnergy(G4ParticleDefinition * CurPart); - void SetParticleDirection(); +class RichTbPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { +public: + RichTbPrimaryGeneratorAction(); + virtual ~RichTbPrimaryGeneratorAction(); + +public: + void GeneratePrimaries(G4Event *anEvent) override; + G4ParticleDefinition *SetParticleType(); + void SetParticleStartPos(); + void SetParticleKineticEnergy(G4ParticleDefinition *CurPart); + void SetParticleDirection(); // G4double GetCurGenPartEnergy() { // return CurGenPartEnergy; // } - private: - - G4ParticleGun * particleGun; +private: + G4ParticleGun *particleGun; // G4double CurGenPartEnergy; - G4ParticleDefinition *CurrentBeamParticle; + G4ParticleDefinition *CurrentBeamParticle; }; -#endif /*RichTbPrimaryGeneratorAction_h */ +#endif /*RichTbPrimaryGeneratorAction_h */ diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbRODummySD.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbRODummySD.hh index aaf5a3cf0e0c778d19f7d642b70f68b3b37f94f1..1f45bcfd281fd853c01bf30ae6db19c3fc92caec 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbRODummySD.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbRODummySD.hh @@ -1,35 +1,32 @@ // $Id: $ -#ifndef INCLUDE_RICHTBRODUMMYSD_HH +#ifndef INCLUDE_RICHTBRODUMMYSD_HH #define INCLUDE_RICHTBRODUMMYSD_HH 1 // Include files #include "Geant4/G4VSensitiveDetector.hh" /** @class RichTbRODummySD RichTbRODummySD.hh include/RichTbRODummySD.hh - * + * * * @author Sajan EASO * @date 2003-12-12 */ class G4Step; -class RichTbRODummySD: public G4VSensitiveDetector { -public: +class RichTbRODummySD : public G4VSensitiveDetector { +public: /// Standard constructor - RichTbRODummySD( ); + RichTbRODummySD(); - virtual ~RichTbRODummySD( ); ///< Destructor - void Initialize(G4HCofThisEvent* /* HCE */) {} - G4bool ProcessHits(G4Step* /* aStep */,G4TouchableHistory* /* ROhist */) {return false;} - void EndOfEvent(G4HCofThisEvent* /* HCE */) {} - void clear() {} - void DrawAll() {} - void PrintAll() {} + virtual ~RichTbRODummySD(); ///< Destructor + void Initialize(G4HCofThisEvent * /* HCE */) override {} + G4bool ProcessHits(G4Step * /* aStep */, G4TouchableHistory * /* ROhist */) override { return false; } + void EndOfEvent(G4HCofThisEvent * /* HCE */) override {} + void clear() override {} + void DrawAll() override {} + void PrintAll() override {} }; +RichTbRODummySD::RichTbRODummySD() : G4VSensitiveDetector("RichTbROdummySD") {} -RichTbRODummySD::RichTbRODummySD() - : G4VSensitiveDetector("RichTbROdummySD") {} - - RichTbRODummySD::~RichTbRODummySD() - { } +RichTbRODummySD::~RichTbRODummySD() {} #endif // INCLUDE_RICHTBRODUMMYSD_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbROGeometry.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbROGeometry.hh index 0dcefb975cd1aaa1f7addf1102e5d140ca26d089..f1d625ac409b3ffb497ff5be575afb93cecba26c 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbROGeometry.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbROGeometry.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBROGEOMETRY_HH +#ifndef INCLUDE_RICHTBROGEOMETRY_HH #define INCLUDE_RICHTBROGEOMETRY_HH 1 // Include files @@ -8,31 +8,26 @@ #include "Geant4/G4VPhysicalVolume.hh" /** @class RichTbROGeometry RichTbROGeometry.hh include/RichTbROGeometry.hh - * + * * * @author Sajan EASO * @date 2003-12-11 */ class RichTbDetectorConstruction; -class RichTbROGeometry:public G4VReadOutGeometry { -public: +class RichTbROGeometry : public G4VReadOutGeometry { +public: /// Standard constructor - RichTbROGeometry(G4String, RichTbDetectorConstruction* ); + RichTbROGeometry(G4String, RichTbDetectorConstruction *); - virtual ~RichTbROGeometry( ); ///< Destructor + virtual ~RichTbROGeometry(); ///< Destructor - G4VPhysicalVolume* Build(); + G4VPhysicalVolume *Build() override; - RichTbDetectorConstruction* getCurDet() - { - return CurDet; - } - -protected: + RichTbDetectorConstruction *getCurDet() { return CurDet; } +protected: private: - RichTbDetectorConstruction* CurDet; - + RichTbDetectorConstruction *CurDet; }; #endif // INCLUDE_RICHTBROGEOMETRY_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbROGeometryHpd.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbROGeometryHpd.hh index 84ff3ac99c2a9fa721e0169f921c11e65f313e28..0fe7c69c56342a9a7654f786f7a114f9ce5a47ef 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbROGeometryHpd.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbROGeometryHpd.hh @@ -1,4 +1,4 @@ -#ifndef INCLUDE_RICHTBROGEOMETRYHPD_HH +#ifndef INCLUDE_RICHTBROGEOMETRYHPD_HH #define INCLUDE_RICHTBROGEOMETRYHPD_HH 1 // Include files @@ -8,30 +8,24 @@ class RichTbDetectorConstruction; - /** @class RichTbROGeometryHpd RichTbROGeometryHpd.hh include/RichTbROGeometryHpd.hh - * + * * * @author Sajan Easo * @date 2015-05-16 */ -class RichTbROGeometryHpd:public G4VReadOutGeometry { -public: +class RichTbROGeometryHpd : public G4VReadOutGeometry { +public: /// Standard constructor - RichTbROGeometryHpd(G4String, RichTbDetectorConstruction* ); + RichTbROGeometryHpd(G4String, RichTbDetectorConstruction *); - virtual ~RichTbROGeometryHpd( ); ///< Destructor - - G4VPhysicalVolume* Build(); - RichTbDetectorConstruction* getCurDet() - { - return CurDet; - } + virtual ~RichTbROGeometryHpd(); ///< Destructor + G4VPhysicalVolume *Build() override; + RichTbDetectorConstruction *getCurDet() { return CurDet; } protected: - private: - RichTbDetectorConstruction* CurDet; + RichTbDetectorConstruction *CurDet; }; #endif // INCLUDE_RICHTBROGEOMETRYHPD_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbRadiatorGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbRadiatorGeometryParameters.hh index 0024a84aa90412e9fdbddb8cf1e0145be244982f..a729096ebaaaff659bfdad6dc4ca495c56363241 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbRadiatorGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbRadiatorGeometryParameters.hh @@ -10,28 +10,25 @@ * @date 2003-10-21 */ -const G4double Box1XSize=600.0*CLHEP::mm; -const G4double Box1YSize=600.0*CLHEP::mm; -const G4double Box1ZSize=600.0*CLHEP::mm; +const G4double Box1XSize = 600.0 * CLHEP::mm; +const G4double Box1YSize = 600.0 * CLHEP::mm; +const G4double Box1ZSize = 600.0 * CLHEP::mm; -const G4double Box2XSize=151.7*CLHEP::mm; -const G4double Box2YSize=70.0*CLHEP::mm; -const G4double Box2ZSize=500.0*CLHEP::mm; - -//const G4double SphereRadius=138.4*CLHEP::mm; -//Didier radius -const G4double SphereRadius=144.6*CLHEP::mm; -//Laser radius -//const G4double SphereRadius=141.3*CLHEP::mm; -const G4double RadiatorLensThickness = 27.0*CLHEP::mm; +const G4double Box2XSize = 151.7 * CLHEP::mm; +const G4double Box2YSize = 70.0 * CLHEP::mm; +const G4double Box2ZSize = 500.0 * CLHEP::mm; +// const G4double SphereRadius=138.4*CLHEP::mm; +// Didier radius +const G4double SphereRadius = 144.6 * CLHEP::mm; +// Laser radius +// const G4double SphereRadius=141.3*CLHEP::mm; +const G4double RadiatorLensThickness = 27.0 * CLHEP::mm; const G4double Box2XLocation = 0.0; const G4double Box2YLocation = 0.0; -//const G4double Box2ZLocation = +0.5* Box2ZSize + SphereRadius - 27.0*CLHEP::mm; -const G4double Box2ZLocation = -0.5* Box2ZSize - SphereRadius + RadiatorLensThickness ; - - +// const G4double Box2ZLocation = +0.5* Box2ZSize + SphereRadius - 27.0*CLHEP::mm; +const G4double Box2ZLocation = -0.5 * Box2ZSize - SphereRadius + RadiatorLensThickness; const G4double BigBoxXLocation = 0.0; const G4double BigBoxYLocation = 0.0; @@ -43,67 +40,66 @@ const G4double RichTbUpgradeRadiatorZLocation = SphereRadius; // now for variables used after creating the geometry in stepaction analysis. // These are not used for geometry construction. -const G4double RichTbUpgradeRadiatorEnvPlateThickness=0.0*CLHEP::mm; +const G4double RichTbUpgradeRadiatorEnvPlateThickness = 0.0 * CLHEP::mm; -const G4double RichTbRadiatorLensSizeLateralTolerence=5.0*CLHEP::mm; -const G4double RichTbRadiatorLensSizeLongitudeTolerence=10.0*CLHEP::mm; +const G4double RichTbRadiatorLensSizeLateralTolerence = 5.0 * CLHEP::mm; +const G4double RichTbRadiatorLensSizeLongitudeTolerence = 10.0 * CLHEP::mm; -const G4double RichTbRadiatorXPosExtreme= RichTbUpgradeRadiatorXLocation + SphereRadius - + RichTbRadiatorLensSizeLateralTolerence; -const G4double RichTbRadiatorXNegExtreme= RichTbUpgradeRadiatorXLocation - SphereRadius - - RichTbRadiatorLensSizeLateralTolerence; +const G4double RichTbRadiatorXPosExtreme = + RichTbUpgradeRadiatorXLocation + SphereRadius + RichTbRadiatorLensSizeLateralTolerence; +const G4double RichTbRadiatorXNegExtreme = + RichTbUpgradeRadiatorXLocation - SphereRadius - RichTbRadiatorLensSizeLateralTolerence; -const G4double RichTbRadiatorYPosExtreme= RichTbUpgradeRadiatorYLocation + SphereRadius - + RichTbRadiatorLensSizeLateralTolerence; -const G4double RichTbRadiatorYNegExtreme= RichTbUpgradeRadiatorYLocation - SphereRadius - - RichTbRadiatorLensSizeLateralTolerence; -const G4double RichTbRadiatorZNegExtreme = RichTbCrystalMasterZLocation - RichTbRadiatorLensSizeLongitudeTolerence; -const G4double RichTbRadiatorZPosExtreme = RichTbCrystalMasterZLocation + RadiatorLensThickness - + RichTbRadiatorLensSizeLongitudeTolerence; +const G4double RichTbRadiatorYPosExtreme = + RichTbUpgradeRadiatorYLocation + SphereRadius + RichTbRadiatorLensSizeLateralTolerence; +const G4double RichTbRadiatorYNegExtreme = + RichTbUpgradeRadiatorYLocation - SphereRadius - RichTbRadiatorLensSizeLateralTolerence; +const G4double RichTbRadiatorZNegExtreme = RichTbCrystalMasterZLocation - RichTbRadiatorLensSizeLongitudeTolerence; +const G4double RichTbRadiatorZPosExtreme = + RichTbCrystalMasterZLocation + RadiatorLensThickness + RichTbRadiatorLensSizeLongitudeTolerence; const G4double RichTbRadiatorDnsZLocation = RichTbCrystalMasterZLocation + RadiatorLensThickness; -const G4double RichTbRadiatorDnsZLocationTolerence = 2.0*CLHEP::mm; +const G4double RichTbRadiatorDnsZLocationTolerence = 2.0 * CLHEP::mm; -//testbeam 2015 upgrade parameters -const G4double SphereRadius15=155.96*CLHEP::mm; -const G4double RadiatorLensThickness15 = 24.397*CLHEP::mm; //centre thickness of the lens +// testbeam 2015 upgrade parameters +const G4double SphereRadius15 = 155.96 * CLHEP::mm; +const G4double RadiatorLensThickness15 = 24.397 * CLHEP::mm; // centre thickness of the lens -const G4double RichTbRadiatorXPosExtreme15 = RichTbUpgradeRadiatorXLocation + SphereRadius15 - + RichTbRadiatorLensSizeLateralTolerence; -const G4double RichTbRadiatorXNegExtreme15 = RichTbUpgradeRadiatorXLocation - SphereRadius15 - - RichTbRadiatorLensSizeLateralTolerence; +const G4double RichTbRadiatorXPosExtreme15 = + RichTbUpgradeRadiatorXLocation + SphereRadius15 + RichTbRadiatorLensSizeLateralTolerence; +const G4double RichTbRadiatorXNegExtreme15 = + RichTbUpgradeRadiatorXLocation - SphereRadius15 - RichTbRadiatorLensSizeLateralTolerence; -const G4double RichTbRadiatorYPosExtreme15 = RichTbUpgradeRadiatorYLocation + SphereRadius15 - + RichTbRadiatorLensSizeLateralTolerence; -const G4double RichTbRadiatorYNegExtreme15= RichTbUpgradeRadiatorYLocation - SphereRadius15 - - RichTbRadiatorLensSizeLateralTolerence; -const G4double RichTbRadiatorZNegExtreme15 = RichTbCrystalMasterZLocation - RichTbRadiatorLensSizeLongitudeTolerence; -const G4double RichTbRadiatorZPosExtreme15 = RichTbCrystalMasterZLocation + RadiatorLensThickness15 - + RichTbRadiatorLensSizeLongitudeTolerence; +const G4double RichTbRadiatorYPosExtreme15 = + RichTbUpgradeRadiatorYLocation + SphereRadius15 + RichTbRadiatorLensSizeLateralTolerence; +const G4double RichTbRadiatorYNegExtreme15 = + RichTbUpgradeRadiatorYLocation - SphereRadius15 - RichTbRadiatorLensSizeLateralTolerence; +const G4double RichTbRadiatorZNegExtreme15 = RichTbCrystalMasterZLocation - RichTbRadiatorLensSizeLongitudeTolerence; +const G4double RichTbRadiatorZPosExtreme15 = + RichTbCrystalMasterZLocation + RadiatorLensThickness15 + RichTbRadiatorLensSizeLongitudeTolerence; const G4double RichTbRadiatorDnsZLocation15 = RichTbCrystalMasterZLocation + RadiatorLensThickness15; -const G4double Box2XSize15=151.7*CLHEP::mm; -const G4double Box2YSize15=150.0*CLHEP::mm; -const G4double Box2ZSize15=500.0*CLHEP::mm; +const G4double Box2XSize15 = 151.7 * CLHEP::mm; +const G4double Box2YSize15 = 150.0 * CLHEP::mm; +const G4double Box2ZSize15 = 500.0 * CLHEP::mm; -const G4double cylRmin = 0.0*CLHEP::mm; -const G4double cylRmax = 149.845/2*CLHEP::mm; -const G4double cylDarkRmin = 0.0*CLHEP::mm; -const G4double cylDarkRmax = 11*CLHEP::mm; -const G4double cylDarkHalfLength = 1.0*CLHEP::mm; -const G4double cylHalfLength = 250.0*CLHEP::mm; +const G4double cylRmin = 0.0 * CLHEP::mm; +const G4double cylRmax = 149.845 / 2 * CLHEP::mm; +const G4double cylDarkRmin = 0.0 * CLHEP::mm; +const G4double cylDarkRmax = 11 * CLHEP::mm; +const G4double cylDarkHalfLength = 1.0 * CLHEP::mm; +const G4double cylHalfLength = 250.0 * CLHEP::mm; const G4double cylSPhi = 0.0; -const G4double cylDPhi = 2*M_PI; +const G4double cylDPhi = 2 * M_PI; const G4double Cyl1XLocation = 0.0; const G4double Cyl1YLocation = 0.0; -//const G4double Box2ZLocation = +0.5* Box2ZSize + SphereRadius - 27.0*CLHEP::mm; +// const G4double Box2ZLocation = +0.5* Box2ZSize + SphereRadius - 27.0*CLHEP::mm; const G4double Cyl1ZLocation = -cylHalfLength - SphereRadius15 + RadiatorLensThickness15; const G4double RichTbUpgradeRadiatorXLocation15 = 0.0; const G4double RichTbUpgradeRadiatorYLocation15 = 0.0; const G4double RichTbUpgradeRadiatorZLocation15 = SphereRadius15; - #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbRunAction.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbRunAction.hh index 9b2d030671bb9df2d6751e220aa28f43fb7537bb..af9837e0910a3fe02c56a8e94cb82824f865211e 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbRunAction.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbRunAction.hh @@ -8,22 +8,18 @@ class G4Timer; class G4Run; -class RichTbRunAction:public G4UserRunAction { - public: +class RichTbRunAction : public G4UserRunAction { +public: + RichTbRunAction(); + virtual ~RichTbRunAction(); - RichTbRunAction(); - virtual ~ RichTbRunAction(); +public: + void BeginOfRunAction(const G4Run *aRun) override; + void EndOfRunAction(const G4Run *aRun) override; + RichTbAnalysisManager *getAnalysisMRun() { return ranalysisManager; } - public: - - virtual void BeginOfRunAction(const G4Run * aRun); - virtual void EndOfRunAction(const G4Run * aRun); - RichTbAnalysisManager *getAnalysisMRun() { - return ranalysisManager; - } - private: - - G4Timer * timer; - RichTbAnalysisManager *ranalysisManager; +private: + G4Timer *timer; + RichTbAnalysisManager *ranalysisManager; }; -#endif /*RichTbRunAction_h */ +#endif /*RichTbRunAction_h */ diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbRunConfig.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbRunConfig.hh index 2b44d89bf14579fe6632ead000d16ac211393329..d97f34ec0b4b3b21eeb91322ff67b99e50479726 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbRunConfig.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbRunConfig.hh @@ -8,452 +8,274 @@ #include "Geant4/G4ThreeVector.hh" #include "CLHEP/Units/SystemOfUnits.h" - class RichTbRunConfig { - public: - //RichTbRunConfig(); - virtual ~ RichTbRunConfig(); - - static RichTbRunConfig* getRunConfigInstance(); +public: + // RichTbRunConfig(); + virtual ~RichTbRunConfig(); - G4int getRichTbHall_visib() - {return RichTbHall_visib;} + static RichTbRunConfig *getRunConfigInstance(); - G4int getRichTbUpgradeVessel_visib() - { return RichTbUpgradeVessel_visib; } + G4int getRichTbHall_visib() { return RichTbHall_visib; } - G4int getRichTbCrystal_visib() - { return RichTbCrystal_visib; } + G4int getRichTbUpgradeVessel_visib() { return RichTbUpgradeVessel_visib; } - G4int getRichTbLens_visib() - { return RichTbLens_visib; } + G4int getRichTbCrystal_visib() { return RichTbCrystal_visib; } - G4int getRichTbUpgradeRadiator_visib() - { return RichTbUpgradeRadiator_visib; } + G4int getRichTbLens_visib() { return RichTbLens_visib; } - G4int getRichTbUpgradeMirror_visib() - { return RichTbUpgradeMirror_visib; } + G4int getRichTbUpgradeRadiator_visib() { return RichTbUpgradeRadiator_visib; } - G4int getRichTbUpgradeDarkCover_visib() - { return RichTbUpgradeDarkCover_visib; } + G4int getRichTbUpgradeMirror_visib() { return RichTbUpgradeMirror_visib; } - G4int getRichTbUpgradeUpsDarkCover_visib() - { return RichTbUpgradeUpsDarkCover_visib; } - G4int getRichTbUpgradeSideDarkCover_visib() - { return RichTbUpgradeSideDarkCover_visib; } + G4int getRichTbUpgradeDarkCover_visib() { return RichTbUpgradeDarkCover_visib; } - G4int getRichTbUpgradeDnsDarkCover_visib() - { return RichTbUpgradeDnsDarkCover_visib; } + G4int getRichTbUpgradeUpsDarkCover_visib() { return RichTbUpgradeUpsDarkCover_visib; } + G4int getRichTbUpgradeSideDarkCover_visib() { return RichTbUpgradeSideDarkCover_visib; } + G4int getRichTbUpgradeDnsDarkCover_visib() { return RichTbUpgradeDnsDarkCover_visib; } - G4int getRichTbCrystalCover_visib() - { return RichTbCrystalCover_visib; } + G4int getRichTbCrystalCover_visib() { return RichTbCrystalCover_visib; } // G4int getRichTbMaster_visib() // { return RichTbMaster_visib; } - G4int getRichTbPMTEnvelope_visib() - { return RichTbPMTEnvelope_visib; } - - G4int getRichTbPMTQuartzW_visib() - { return RichTbPMTQuartzW_visib; } - - G4int getRichTbPMTPhCathode_visib() - { return RichTbPMTPhCathode_visib; } + G4int getRichTbPMTEnvelope_visib() { return RichTbPMTEnvelope_visib; } - G4int getRichTbPMTAnode_visib() - { return RichTbPMTAnode_visib; } + G4int getRichTbPMTQuartzW_visib() { return RichTbPMTQuartzW_visib; } - G4int getRichTbPhDFrame_visib() - { return RichTbPhDFrame_visib; } + G4int getRichTbPMTPhCathode_visib() { return RichTbPMTPhCathode_visib; } + G4int getRichTbPMTAnode_visib() { return RichTbPMTAnode_visib; } - G4int getRichTbPhDetSupFrame_visib() - { return RichTbPhDetSupFrame_visib;} - - G4int getRichTbEC_visib() - { - return RichTbEC_visib; - } + G4int getRichTbPhDFrame_visib() { return RichTbPhDFrame_visib; } + G4int getRichTbPhDetSupFrame_visib() { return RichTbPhDetSupFrame_visib; } + G4int getRichTbEC_visib() { return RichTbEC_visib; } - G4int getRichTbGasQuWin_visib() {return RichTbGasQuWin_visib;} + G4int getRichTbGasQuWin_visib() { return RichTbGasQuWin_visib; } - G4int getRichTbPMTMaster_visib() - { return RichTbPMTMaster_visib;} - G4int getRichTbPMTSMaster_visib() - { return RichTbPMTSMaster_visib;} + G4int getRichTbPMTMaster_visib() { return RichTbPMTMaster_visib; } + G4int getRichTbPMTSMaster_visib() { return RichTbPMTSMaster_visib; } // G4int getRichTbPMTEnvelope_visib() // { return RichTbPMTEnvelope_visib;} - G4int getRichTbPMTEndCap_visib() - { return RichTbPMTEndCap_visib;} + G4int getRichTbPMTEndCap_visib() { return RichTbPMTEndCap_visib; } // G4int getRichTbPMTQuartzW_visib() // { return RichTbPMTQuartzW_visib; } // G4int getRichTbPMTPhCathode_visib() // { return RichTbPMTPhCathode_visib;} - G4int getRichTbPMTFrontRing_visib() - { return RichTbPMTFrontRing_visib; } + G4int getRichTbPMTFrontRing_visib() { return RichTbPMTFrontRing_visib; } + G4int getGasTypeCode() { return GasTypeCode; } + G4double getNitrogenPressure() { return NitrogenPressure; } + G4double getNitrogenTemperature() { return NitrogenTemperature; } + G4double getNominalNitrogenPressure() { return NominalNitrogenPressure; } + G4double getNominalNitrogenTemperature() { return NominalNitrogenTemperature; } - G4int getGasTypeCode() {return GasTypeCode;} + G4double getc4f10Pressure() { return c4f10Pressure; } + G4double getc4f10Temperature() { return c4f10Temperature; } - G4double getNitrogenPressure() - { return NitrogenPressure;} - G4double getNitrogenTemperature() - { return NitrogenTemperature;} + G4double getNominalc4f10Pressure() { return Nominalc4f10Pressure; } + G4double getNominalc4f10Temperature() { return Nominalc4f10Temperature; } - G4double getNominalNitrogenPressure() - { return NominalNitrogenPressure;} - G4double getNominalNitrogenTemperature() - { return NominalNitrogenTemperature;} + G4int getMirrorOrientCode() { return MirrorOrientCode; } - G4double getc4f10Pressure() - { return c4f10Pressure;} - G4double getc4f10Temperature() - { return c4f10Temperature;} + G4double getMirrorAddTiltX() { return MirrorAddTiltX; } - G4double getNominalc4f10Pressure() - { return Nominalc4f10Pressure;} - G4double getNominalc4f10Temperature() - { return Nominalc4f10Temperature;} + G4double getMirrorAddTiltY() { return MirrorAddTiltY; } + G4int getNonOptimalPMTCondition() { return mNonOptimalPMTCondition; } + void setNonOptimalPMTCondition(G4int acond) { mNonOptimalPMTCondition = acond; } + G4double getNonOptimalPMTAbsEff() { return mNonOptimalPMTAbsEff; } + void setNonOptimalPMTAbsEff(G4double ahpdeff) { mNonOptimalPMTAbsEff = ahpdeff; } + G4double getHpdpeBackScaProb() { return mHpdpeBackScaProb; } - G4int getMirrorOrientCode() { - return MirrorOrientCode; - } + G4int getRichTbNumPartEvent() { return RichTbNumPartEvent; } + G4int getRichTbParticleTypeCode() { return RichTbParticleTypeCode; } + G4int getRichTbParticleStartPosCode() { return RichTbParticleStartPosCode; } + G4int getRichTbParticleDirectionCode() { return RichTbParticleDirectionCode; } + G4int getRichTbParticleEnergyCode() { return RichTbParticleEnergyCode; } + G4double getRichTbParticleMomentum() { return RichTbParticleMomentum; } + G4double getPosBeamFraction() { return PosBeamFraction; } - G4double getMirrorAddTiltX() - { return MirrorAddTiltX;} + G4double getBeamDirX() { return mBeamDirX; } + G4double getBeamDirY() { return mBeamDirY; } + G4double getBeamDivergenceX() { return mBeamDivergenceX; } + G4double getBeamDivergenceY() { return mBeamDivergenceY; } - G4double getMirrorAddTiltY() - { return MirrorAddTiltY;} + G4double getPMTPEMomInit() { return PMTPEMomInit; } + G4double getHpdPEMomInit() { return PMTPEMomInit; } + G4int getHitCreationOption() { return HitCreationOption; } - G4int getNonOptimalPMTCondition() {return mNonOptimalPMTCondition;} - void setNonOptimalPMTCondition(G4int acond) - {mNonOptimalPMTCondition=acond;} - G4double getNonOptimalPMTAbsEff() {return mNonOptimalPMTAbsEff;} - void setNonOptimalPMTAbsEff(G4double ahpdeff) - {mNonOptimalPMTAbsEff= ahpdeff;} + G4double getECXShift() { return ECXShift; } - G4double getHpdpeBackScaProb() {return mHpdpeBackScaProb;} + G4String getOutputFileName() { return OutputFileName; } + G4int DoWriteOutputFile() { return WriteOutputFile; } + G4String getMirrorReflFileName() { return MirrorReflFileName; } + G4String getOutputHistoFileName() { return OutputHistoFileName; } + G4String getOutputNtupleFileName() { return OutputNtupleFileName; } + G4int VerboseInfoFlag() { return mVerboseInfoFlag; } + void setVerboseInfoFlag(G4int aVerboseFlag) { mVerboseInfoFlag = aVerboseFlag; } + G4int VerboseOutputFileFlag() { return mVerboseOutputFileFlag; } + void setVerboseOutputFileFlag(G4int aVouf) { mVerboseOutputFileFlag = aVouf; } + G4int getBatchModeFlag() { return mBatchModeFlag; } + void setBatchModeFlag(G4int abatchFlag) { mBatchModeFlag = abatchFlag; } - G4int getRichTbNumPartEvent() - { - return RichTbNumPartEvent; - } - G4int getRichTbParticleTypeCode() - { - return RichTbParticleTypeCode; - } - G4int getRichTbParticleStartPosCode() - { - return RichTbParticleStartPosCode; - } - G4int getRichTbParticleDirectionCode() - { - return RichTbParticleDirectionCode; - } - G4int getRichTbParticleEnergyCode() - { - return RichTbParticleEnergyCode; - } - G4double getRichTbParticleMomentum() - { - return RichTbParticleMomentum; - } - G4double getPosBeamFraction() - { - return PosBeamFraction; + G4int getNumEventInBatchMode() { return mNumEventInBatchMode; } + void setNumEventInBatchMode(G4int aNumEv) { mNumEventInBatchMode = aNumEv; } - } + G4double getBeamXPosShift() { return mBeamXPosShift; } + G4double getBeamYPosShift() { return mBeamYPosShift; } + void setBeamXPosShift(G4double abeamXs) { mBeamXPosShift = abeamXs; } + void setBeamYPosShift(G4double abeamYs) { mBeamYPosShift = abeamYs; } - G4double getBeamDirX() - { return mBeamDirX; } - G4double getBeamDirY() - { return mBeamDirY;} - G4double getBeamDivergenceX() - { return mBeamDivergenceX;} - G4double getBeamDivergenceY() - { return mBeamDivergenceY;} + G4double getBeamSpecialXPos() { return mBeamSpecialXPos; } + G4double getBeamSpecialYPos() { return mBeamSpecialYPos; } + G4double getBeamSpecialZPos() { return mBeamSpecialZPos; } + void setBeamSpecialXPos(G4double asPosX) { mBeamSpecialXPos = asPosX; } + void setBeamSpecialYPos(G4double asPosY) { mBeamSpecialYPos = asPosY; } + void setBeamSpecialZPos(G4double asPosZ) { mBeamSpecialZPos = asPosZ; } + void setBeamSpecialXRange(G4double aBeamSpecialXRange) { mBeamSpecialXRange = aBeamSpecialXRange; } - G4double getPMTPEMomInit() - { - return PMTPEMomInit; - } - G4double getHpdPEMomInit () - { - return PMTPEMomInit; - } - + G4double getBeamSpecialXRange() { return mBeamSpecialXRange; } - G4int getHitCreationOption() - { - return HitCreationOption; + G4int getActivateBeamShiftNtuple() { return mActivateBeamShiftNtuple; } + void setActivateBeamShiftNtuple(G4int aAc) { mActivateBeamShiftNtuple = aAc; } - } + G4double getConstPhotWlenBeam() { return mConstPhotWlenBeam; } + G4double getPhotWlenMinBeam() { return mPhotWlenMinBeam; } + G4double getPhotWlenMaxBeam() { return mPhotWlenMaxBeam; } - G4double getECXShift() { - return ECXShift; - } + void setConstPhotWlenBeam(G4double aPhw) { mConstPhotWlenBeam = aPhw; } + void setPhotWlenMinBeam(G4double aPhwMin) { mPhotWlenMinBeam = aPhwMin; } + void setPhotWlenMaxBeam(G4double aPhwMax) { mPhotWlenMaxBeam = aPhwMax; } - G4String getOutputFileName() - { - return OutputFileName; + G4int getSpecialStudyVesselRotation() { return mSpecialStudyVesselRotation; } - } - G4int DoWriteOutputFile() {return WriteOutputFile; } - - G4String getMirrorReflFileName() { - return MirrorReflFileName; - } + G4int getSpecialStudyCrystalRotation() { return mSpecialStudyCrystalRotation; } + G4double getSpecialStudyCrystalRotationX() { return mSpecialStudyCrystalRotationX; } + G4double getSpecialStudyCrystalRotationY() { return mSpecialStudyCrystalRotationY; } - G4String getOutputHistoFileName() - { - return OutputHistoFileName; - } - G4String getOutputNtupleFileName() - { - return OutputNtupleFileName; - } + G4int getSpecialStudyMasterRotation() { return mSpecialStudyMasterRotation; } + G4double getSpecialStudyMasterRotationX() { return mSpecialStudyMasterRotationX; } + G4double getSpecialStudyMasterRotationY() { return mSpecialStudyMasterRotationY; } + std::vector<G4double> getDemagConstShiftAtAnodeX() { return mDemagConstShiftAtAnodeX; } + std::vector<G4double> getDemagConstShiftAtAnodeY() { return mDemagConstShiftAtAnodeY; } + std::vector<G4double> getPMTAdditionalLocalRotationZ() { return mPMTAdditionalLocalRotationZ; } - G4int VerboseInfoFlag() - { - return mVerboseInfoFlag; - } - void setVerboseInfoFlag(G4int aVerboseFlag) - { - mVerboseInfoFlag=aVerboseFlag; - - } - G4int VerboseOutputFileFlag() - { return mVerboseOutputFileFlag;} - void setVerboseOutputFileFlag(G4int aVouf ) - {mVerboseOutputFileFlag=aVouf ;} - - G4int getBatchModeFlag() { return mBatchModeFlag;} - void setBatchModeFlag( G4int abatchFlag ){ mBatchModeFlag=abatchFlag;} - - G4int getNumEventInBatchMode(){ return mNumEventInBatchMode;} - void setNumEventInBatchMode(G4int aNumEv ) - {mNumEventInBatchMode=aNumEv;} - - G4double getBeamXPosShift() { return mBeamXPosShift;} - G4double getBeamYPosShift() { return mBeamYPosShift;} - void setBeamXPosShift(G4double abeamXs ) - {mBeamXPosShift= abeamXs;} - void setBeamYPosShift(G4double abeamYs ) - {mBeamYPosShift= abeamYs;} - - G4double getBeamSpecialXPos() - { - return mBeamSpecialXPos; - } - G4double getBeamSpecialYPos() - { - return mBeamSpecialYPos; - } - G4double getBeamSpecialZPos() - { - return mBeamSpecialZPos; - } - void setBeamSpecialXPos (G4double asPosX) - { mBeamSpecialXPos= asPosX; } - void setBeamSpecialYPos (G4double asPosY) - { mBeamSpecialYPos= asPosY; } - void setBeamSpecialZPos (G4double asPosZ) - { mBeamSpecialZPos= asPosZ; } - - void setBeamSpecialXRange(G4double aBeamSpecialXRange) - {mBeamSpecialXRange=aBeamSpecialXRange;} - - - G4double getBeamSpecialXRange() - {return mBeamSpecialXRange; } - - G4int getActivateBeamShiftNtuple() {return mActivateBeamShiftNtuple; } - void setActivateBeamShiftNtuple(G4int aAc ) {mActivateBeamShiftNtuple=aAc;} - - G4double getConstPhotWlenBeam() - { return mConstPhotWlenBeam;} - G4double getPhotWlenMinBeam() - { return mPhotWlenMinBeam;} - G4double getPhotWlenMaxBeam() - { return mPhotWlenMaxBeam;} - - void setConstPhotWlenBeam( G4double aPhw) - { mConstPhotWlenBeam= aPhw;} - void setPhotWlenMinBeam(G4double aPhwMin) - {mPhotWlenMinBeam=aPhwMin;} - void setPhotWlenMaxBeam(G4double aPhwMax) - {mPhotWlenMaxBeam=aPhwMax;} - - G4int getSpecialStudyVesselRotation() - {return mSpecialStudyVesselRotation ;} - - G4int getSpecialStudyCrystalRotation() - {return mSpecialStudyCrystalRotation ;} - G4double getSpecialStudyCrystalRotationX() - {return mSpecialStudyCrystalRotationX ;} - G4double getSpecialStudyCrystalRotationY() - {return mSpecialStudyCrystalRotationY ;} - - G4int getSpecialStudyMasterRotation() - {return mSpecialStudyMasterRotation ;} - G4double getSpecialStudyMasterRotationX() - {return mSpecialStudyMasterRotationX ;} - G4double getSpecialStudyMasterRotationY() - {return mSpecialStudyMasterRotationY ;} - - std::vector<G4double> getDemagConstShiftAtAnodeX() - { return mDemagConstShiftAtAnodeX;} - std::vector<G4double> getDemagConstShiftAtAnodeY() - { return mDemagConstShiftAtAnodeY;} - std::vector<G4double> getPMTAdditionalLocalRotationZ() - { return mPMTAdditionalLocalRotationZ;} - - G4double getCurrentPMTAdditionalLocalRotationZ (G4int aPMTNum) - { - G4double aAdRot=0.0; - if(aPMTNum < (G4int) mPMTAdditionalLocalRotationZ.size() ) - aAdRot= mPMTAdditionalLocalRotationZ[aPMTNum]; + G4double getCurrentPMTAdditionalLocalRotationZ(G4int aPMTNum) { + G4double aAdRot = 0.0; + if (aPMTNum < (G4int)mPMTAdditionalLocalRotationZ.size()) + aAdRot = mPMTAdditionalLocalRotationZ[aPMTNum]; return aAdRot; } - std::vector<G4double> getPMTAlignmentLocalShiftX() - { return mPMTAlignmentLocalShiftX;} + std::vector<G4double> getPMTAlignmentLocalShiftX() { return mPMTAlignmentLocalShiftX; } - G4double getCurrentPMTAlignmentLocalShiftX(G4int bPMTNum) - { - G4double bShiftX=0.0*CLHEP::mm; - if( bPMTNum < (G4int) mPMTAlignmentLocalShiftX.size() ) - bShiftX= mPMTAlignmentLocalShiftX[bPMTNum]; - return bShiftX; + G4double getCurrentPMTAlignmentLocalShiftX(G4int bPMTNum) { + G4double bShiftX = 0.0 * CLHEP::mm; + if (bPMTNum < (G4int)mPMTAlignmentLocalShiftX.size()) + bShiftX = mPMTAlignmentLocalShiftX[bPMTNum]; + return bShiftX; } - std::vector<G4double> getPMTAlignmentLocalShiftY() - { return mPMTAlignmentLocalShiftY;} + std::vector<G4double> getPMTAlignmentLocalShiftY() { return mPMTAlignmentLocalShiftY; } - G4double getCurrentPMTAlignmentLocalShiftY(G4int cPMTNum) - { - G4double cShiftY=0.0*CLHEP::mm; - if( cPMTNum < (G4int) mPMTAlignmentLocalShiftY.size() ) - cShiftY= mPMTAlignmentLocalShiftY[cPMTNum]; - return cShiftY; + G4double getCurrentPMTAlignmentLocalShiftY(G4int cPMTNum) { + G4double cShiftY = 0.0 * CLHEP::mm; + if (cPMTNum < (G4int)mPMTAlignmentLocalShiftY.size()) + cShiftY = mPMTAlignmentLocalShiftY[cPMTNum]; + return cShiftY; } - std::vector<G4double> getPhSupFrameAdditionalShift() { - return mPhSupFrameAdditionalShift;} - void setPhSupFrameAdditionalShift(std::vector<G4double> aPhSupFrameAdditionalShift){ - mPhSupFrameAdditionalShift=aPhSupFrameAdditionalShift;} - G4double getPhSupFrameAdditionalVertTilt() { - return mPhSupFrameAdditionalVertTilt;} + std::vector<G4double> getPhSupFrameAdditionalShift() { return mPhSupFrameAdditionalShift; } + void setPhSupFrameAdditionalShift(std::vector<G4double> aPhSupFrameAdditionalShift) { + mPhSupFrameAdditionalShift = aPhSupFrameAdditionalShift; + } + G4double getPhSupFrameAdditionalVertTilt() { return mPhSupFrameAdditionalVertTilt; } void setPhSupFrameAdditionalVertTilt(G4double aPhSupFrameAdditionalVertTilt) { - mPhSupFrameAdditionalVertTilt=aPhSupFrameAdditionalVertTilt;} - G4double getPhSupFrameAdditionalZRot(){ - return mPhSupFrameAdditionalZRot;} + mPhSupFrameAdditionalVertTilt = aPhSupFrameAdditionalVertTilt; + } + G4double getPhSupFrameAdditionalZRot() { return mPhSupFrameAdditionalZRot; } void setPhSupFrameAdditionalZRot(G4double aPhSupFrameAdditionalZRot) { - mPhSupFrameAdditionalZRot=aPhSupFrameAdditionalZRot;} + mPhSupFrameAdditionalZRot = aPhSupFrameAdditionalZRot; + } - G4int getPMTSiReflFlag() { - return mPMTSiReflFlag;} + G4int getPMTSiReflFlag() { return mPMTSiReflFlag; } - G4int getRadiatorConfiguration() { - return mRadiatorConfiguration;} + G4int getRadiatorConfiguration() { return mRadiatorConfiguration; } - G4double getMapmtDetectionEfficiency() - {return mMapmtDetectionEfficiency;} + G4double getMapmtDetectionEfficiency() { return mMapmtDetectionEfficiency; } // G4double getMapmtPixelGap() // { return mMapmtPixelGap;} - G4bool ApplyPixelEff() { - return (mMapmtPixelEfficiencyFlag == 0 ) ? false : true; - } - - G4int MapmtPixelEfficiencyFlag () - { return mMapmtPixelEfficiencyFlag;} - + G4bool ApplyPixelEff() { return (mMapmtPixelEfficiencyFlag == 0) ? false : true; } + G4int MapmtPixelEfficiencyFlag() { return mMapmtPixelEfficiencyFlag; } - G4String MapmtPixelOptEffFileNameJura() - { return mMapmtPixelOptEffFileNameJura;} + G4String MapmtPixelOptEffFileNameJura() { return mMapmtPixelOptEffFileNameJura; } - G4String MapmtPixelThr7EffFileNameJura() - { return mMapmtPixelThr7EffFileNameJura;} + G4String MapmtPixelThr7EffFileNameJura() { return mMapmtPixelThr7EffFileNameJura; } - G4String MapmtPixelOptEffFileNameSaleve() - { return mMapmtPixelOptEffFileNameSaleve;} + G4String MapmtPixelOptEffFileNameSaleve() { return mMapmtPixelOptEffFileNameSaleve; } - G4String MapmtPixelThr7EffFileNameSaleve() - { return mMapmtPixelThr7EffFileNameSaleve;} + G4String MapmtPixelThr7EffFileNameSaleve() { return mMapmtPixelThr7EffFileNameSaleve; } - //tesbeam 2015 upgrade - G4String MapmtPixelOptEffFileNameJuraUpgr() - { return mMapmtPixelOptEffFileNameJuraUpgradeDummy;} - G4String MapmtPixelOptEffFileNameSaleveUpgr() - { return mMapmtPixelOptEffFileNameSaleveUpgradeDummy;} + // tesbeam 2015 upgrade + G4String MapmtPixelOptEffFileNameJuraUpgr() { return mMapmtPixelOptEffFileNameJuraUpgradeDummy; } + G4String MapmtPixelOptEffFileNameSaleveUpgr() { return mMapmtPixelOptEffFileNameSaleveUpgradeDummy; } - G4String MapmtPixelEffFileNameJuraTop100() - { return mMapmtPixelEffFileNameJuraTop100;} - G4String MapmtPixelEffFileNameSaleveTop100() - { return mMapmtPixelEffFileNameSaleveTop100;} - G4String MapmtPixelEffFileNameJuraBottom100() - { return mMapmtPixelEffFileNameJuraBottom100;} - G4String MapmtPixelEffFileNameSaleveBottom100() - { return mMapmtPixelEffFileNameSaleveBottom100;} + G4String MapmtPixelEffFileNameJuraTop100() { return mMapmtPixelEffFileNameJuraTop100; } + G4String MapmtPixelEffFileNameSaleveTop100() { return mMapmtPixelEffFileNameSaleveTop100; } + G4String MapmtPixelEffFileNameJuraBottom100() { return mMapmtPixelEffFileNameJuraBottom100; } + G4String MapmtPixelEffFileNameSaleveBottom100() { return mMapmtPixelEffFileNameSaleveBottom100; } - G4int getRichTbHpdQW_visib() {return RichTbHpdQW_visib;} + G4int getRichTbHpdQW_visib() { return RichTbHpdQW_visib; } + G4int getRichTbHpdPHC_visib() { return RichTbHpdPHC_visib; } - G4int getRichTbHpdPHC_visib() {return RichTbHpdPHC_visib; } + G4int getRichTbHpdSID_visib() { return RichTbHpdSID_visib; } - G4int getRichTbHpdSID_visib() {return RichTbHpdSID_visib; } + G4int getRichTbHpdENV_visib() { return RichTbHpdENV_visib; } - G4int getRichTbHpdENV_visib() {return RichTbHpdENV_visib; } + G4int getRichTbHpdENVCAP_visib() { return RichTbHpdENVCAP_visib; } - G4int getRichTbHpdENVCAP_visib() {return RichTbHpdENVCAP_visib; } + G4int getRichTbHpdSM_visib() { return RichTbHpdSM_visib; } - G4int getRichTbHpdSM_visib() {return RichTbHpdSM_visib; } + G4int getRichTbHpdMas_visib() { return RichTbHpdMas_visib; } - G4int getRichTbHpdMas_visib() {return RichTbHpdMas_visib; } + G4int getRichTbHpdSiPix_visib() { return RichTbHpdSiPix_visib; } - G4int getRichTbHpdSiPix_visib() { return RichTbHpdSiPix_visib;} + G4long getRandomSeedInput() { return mRandomSeedInput; } +private: + RichTbRunConfig(); + static RichTbRunConfig *RunConfigInstance; - G4long getRandomSeedInput () { return mRandomSeedInput;} + // Graphics setups + // For Following variables 0 means make the volume invisible; + // 1 means make it visible as a solid. + // 2 means make it visible as a wireframe. - - - - private: - - RichTbRunConfig(); - static RichTbRunConfig* RunConfigInstance; - - //Graphics setups - //For Following variables 0 means make the volume invisible; - // 1 means make it visible as a solid. - // 2 means make it visible as a wireframe. - - // for the hpdsipix visib : <5 means it is not activated at all (default) - // >=5 activated for special interactive session (not for creating hits. - // 10 means make the volume invisible, even though activated - // 11 means make it visible as a solid. - // 12 means make it visible as a wireframe. - // - G4int RichTbHall_visib; + // for the hpdsipix visib : <5 means it is not activated at all (default) + // >=5 activated for special interactive session (not for creating hits. + // 10 means make the volume invisible, even though activated + // 11 means make it visible as a solid. + // 12 means make it visible as a wireframe. + // + G4int RichTbHall_visib; G4int RichTbUpgradeVessel_visib; G4int RichTbCrystal_visib; G4int RichTbLens_visib; @@ -462,7 +284,7 @@ class RichTbRunConfig { G4int RichTbUpgradeDarkCover_visib; G4int RichTbUpgradeUpsDarkCover_visib; G4int RichTbUpgradeSideDarkCover_visib; - G4int RichTbUpgradeDnsDarkCover_visib; + G4int RichTbUpgradeDnsDarkCover_visib; G4int RichTbPMTEnvelope_visib; G4int RichTbPMTQuartzW_visib; @@ -471,29 +293,23 @@ class RichTbRunConfig { G4int RichTbPhDFrame_visib; G4int RichTbUpgradeMirror_visib; G4int RichTbPhDetSupFrame_visib; - G4int RichTbEC_visib; + G4int RichTbEC_visib; G4int RichTbPMTMaster_visib; G4int RichTbPMTSMaster_visib; G4int RichTbPMTEndCap_visib; G4int RichTbPMTFrontRing_visib; - - G4int RichTbGasQuWin_visib; - - - + G4int RichTbGasQuWin_visib; G4int RichTbHpdQW_visib; G4int RichTbHpdPHC_visib; G4int RichTbHpdSID_visib; G4int RichTbHpdENV_visib; - G4int RichTbHpdENVCAP_visib ; + G4int RichTbHpdENVCAP_visib; G4int RichTbHpdSM_visib; G4int RichTbHpdMas_visib; G4int RichTbHpdSiPix_visib; - - G4int GasTypeCode; G4double NitrogenPressure; @@ -514,14 +330,12 @@ class RichTbRunConfig { G4double mHpdpeBackScaProb; G4long mRandomSeedInput; - - - G4int RichTbNumPartEvent; - G4int RichTbParticleTypeCode; - G4int RichTbParticleStartPosCode; - G4int RichTbParticleDirectionCode; - G4int RichTbParticleEnergyCode; - G4double RichTbParticleMomentum; + G4int RichTbNumPartEvent; + G4int RichTbParticleTypeCode; + G4int RichTbParticleStartPosCode; + G4int RichTbParticleDirectionCode; + G4int RichTbParticleEnergyCode; + G4double RichTbParticleMomentum; G4double PosBeamFraction; G4double mBeamDirX; G4double mBeamDirY; @@ -551,13 +365,12 @@ class RichTbRunConfig { G4String OutputHistoFileName; G4String OutputNtupleFileName; - G4int mVerboseInfoFlag ; + G4int mVerboseInfoFlag; G4int mBatchModeFlag; G4int mNumEventInBatchMode; G4int mVerboseOutputFileFlag; G4int mPMTSiReflFlag; - G4double mConstPhotWlenBeam; G4double mPhotWlenMinBeam; G4double mPhotWlenMaxBeam; @@ -580,10 +393,11 @@ class RichTbRunConfig { G4double mPhSupFrameAdditionalZRot; G4double mPhSupFrameAdditionalVertTilt; G4double mMapmtDetectionEfficiency; - G4int mMapmtPixelEfficiencyFlag; // 1 means the optimized pixel efficiency applied.The overall detection efficiency not applied. - // 2 means the threshold7 pixel efficiency applied. The overall detection efficiency not applied. - // 0 means the pixel efficiency not applied. The overall detectione efficiency applied. - + G4int mMapmtPixelEfficiencyFlag; // 1 means the optimized pixel efficiency applied.The overall detection efficiency + // not applied. + // 2 means the threshold7 pixel efficiency applied. The overall detection + // efficiency not applied. + // 0 means the pixel efficiency not applied. The overall detectione efficiency applied. G4String mMapmtPixelOptEffFileNameJura; G4String mMapmtPixelThr7EffFileNameJura; @@ -595,10 +409,5 @@ class RichTbRunConfig { G4String mMapmtPixelEffFileNameJuraBottom100; G4String mMapmtPixelEffFileNameSaleveTop100; G4String mMapmtPixelEffFileNameSaleveBottom100; - - - - - }; -#endif /*RichTbRunConfig_h */ +#endif /*RichTbRunConfig_h */ diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbStackingAction.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbStackingAction.hh index fd76e3340b4dea7856e372a247f6b039a249f6e4..5e73062c8571a2a1a30b54cda19408d4ea75b3d2 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbStackingAction.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbStackingAction.hh @@ -2,15 +2,14 @@ #define RichTbStackingAction_h 1 #include "Geant4/G4UserStackingAction.hh" -class RichTbStackingAction:public G4UserStackingAction { +class RichTbStackingAction : public G4UserStackingAction { - public: - RichTbStackingAction(); - virtual ~ RichTbStackingAction(); - void NewStage() {; - } void PrepareNewEvent() {; - } +public: + RichTbStackingAction(); + virtual ~RichTbStackingAction(); + void NewStage() override { ; } + void PrepareNewEvent() override { ; } - private: +private: }; #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSteppingAction.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSteppingAction.hh index 8bac7df908de42760c13a892b159c804bed8460b..007b340cec51c653fbfa609375230c5fc9e1a68b 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSteppingAction.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSteppingAction.hh @@ -7,35 +7,32 @@ #include "Geant4/G4ParticleChange.hh" #include "RichTbMiscNames.hh" -class RichTbSteppingAction:public G4UserSteppingAction { - - public: - RichTbSteppingAction(); - virtual ~ RichTbSteppingAction(); - void UserSteppingAction(const G4Step * aStep); - void RichTbGenericHisto(const G4Step * aStep); - void RichTbDebugHisto(const G4Step * aStep); - void RichTbPMTIncidenceStep(const G4Step * aStep); - void RichTbAgelIncidenceStep(const G4Step * aStep); - void RichTbRadiatorLensBoundaryIncidenceStep(const G4Step * aStep); - +class RichTbSteppingAction : public G4UserSteppingAction { + +public: + RichTbSteppingAction(); + virtual ~RichTbSteppingAction(); + void UserSteppingAction(const G4Step *aStep) override; + void RichTbGenericHisto(const G4Step *aStep); + void RichTbDebugHisto(const G4Step *aStep); + void RichTbPMTIncidenceStep(const G4Step *aStep); + void RichTbAgelIncidenceStep(const G4Step *aStep); + void RichTbRadiatorLensBoundaryIncidenceStep(const G4Step *aStep); // G4double getPMTPhElectronKE() { // return PMTPhElectronKE; // } - private: +private: // G4double PMTPhElectronKE; // G4VParticleChange *uParticleChange; - double RichTbRadiatorXNegExtreme_; - double RichTbRadiatorXPosExtreme_; - double RichTbRadiatorYNegExtreme_; - double RichTbRadiatorYPosExtreme_; - double RichTbRadiatorZNegExtreme_; - double RichTbRadiatorZPosExtreme_; - double RichTbRadiatorDnsZLocation_; - - + double RichTbRadiatorXNegExtreme_; + double RichTbRadiatorXPosExtreme_; + double RichTbRadiatorYNegExtreme_; + double RichTbRadiatorYPosExtreme_; + double RichTbRadiatorZNegExtreme_; + double RichTbRadiatorZPosExtreme_; + double RichTbRadiatorDnsZLocation_; }; #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSteppingActionBase.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSteppingActionBase.hh index be99794541235d2452d4116b7ac7bb3466e65363..b6ffc14a05a6913036c0eadcfb5f05276817369a 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSteppingActionBase.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSteppingActionBase.hh @@ -1,4 +1,4 @@ -#ifndef INCLUDE_RICHTBSTEPPINGACTIONBASE_HH +#ifndef INCLUDE_RICHTBSTEPPINGACTIONBASE_HH #define INCLUDE_RICHTBSTEPPINGACTIONBASE_HH 1 // Include files @@ -12,27 +12,23 @@ #include "RichTbPmtSteppingAction.hh" /** @class RichTbSteppingActionBase RichTbSteppingActionBase.hh include/RichTbSteppingActionBase.hh - * + * * * @author Sajan Easo * @date 2015-03-06 */ -class RichTbSteppingActionBase:public G4UserSteppingAction { -public: +class RichTbSteppingActionBase : public G4UserSteppingAction { +public: /// Standard constructor - RichTbSteppingActionBase( ); + RichTbSteppingActionBase(); - virtual ~RichTbSteppingActionBase( ); ///< Destructor - void UserSteppingAction(const G4Step * aStep); + virtual ~RichTbSteppingActionBase(); ///< Destructor + void UserSteppingAction(const G4Step *aStep) override; void InitRichTbStepActions(); - -protected: +protected: private: - - RichTbSteppingAction* mRichTbSteppingAction; - RichTbPmtSteppingAction* mRichTbPmtSteppingAction; - - + RichTbSteppingAction *mRichTbSteppingAction; + RichTbPmtSteppingAction *mRichTbPmtSteppingAction; }; #endif // INCLUDE_RICHTBSTEPPINGACTIONBASE_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSurface.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSurface.hh index 560ac88f1a1d51d46df94694bced95e36dbad5f8..20655d8287dc37424d9648617b2becb8ca66f7de 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSurface.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSurface.hh @@ -1,13 +1,12 @@ // $Id: $ -#ifndef INCLUDE_RICHTBSURFACE_HH +#ifndef INCLUDE_RICHTBSURFACE_HH #define INCLUDE_RICHTBSURFACE_HH 1 // Include files #include "RichTbSurfaceDefinition.hh" - /** @class RichTbSurface RichTbSurface.hh include/RichTbSurface.hh - * + * * * @author Sajan EASO * @date 2003-11-25 @@ -17,22 +16,16 @@ class RichTbDetectorConstruction; class RichTbSurface { public: /// Standard constructor - RichTbSurface(RichTbDetectorConstruction* ); + RichTbSurface(RichTbDetectorConstruction *); - virtual ~RichTbSurface( ); ///< Destructor + virtual ~RichTbSurface(); ///< Destructor - RichTbDetectorConstruction* getcurDet() - { return curDet; } + RichTbDetectorConstruction *getcurDet() { return curDet; } void createBorderSurfaces(); - - -protected: +protected: private: - - RichTbDetectorConstruction* curDet; - - + RichTbDetectorConstruction *curDet; }; #endif // INCLUDE_RICHTBSURFACE_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSurfaceDefinition.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSurfaceDefinition.hh index 5364350cdd8d13d05eb9323681f34ff6f532e3bd..16f0789ba4eca31a15a55b5995a4f1248c08c9a0 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSurfaceDefinition.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSurfaceDefinition.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBSURFACEDEFINITION_HH +#ifndef INCLUDE_RICHTBSURFACEDEFINITION_HH #define INCLUDE_RICHTBSURFACEDEFINITION_HH 1 // Include files @@ -12,39 +12,23 @@ #include <vector> /** @class RichTbSurfaceDefinition RichTbSurfaceDefinition.hh include/RichTbSurfaceDefinition.hh - * + * * * @author Sajan EASO * @date 2003-11-24 */ class RichTbSurfaceDefinition { public: + virtual ~RichTbSurfaceDefinition(); ///< Destructor - virtual ~RichTbSurfaceDefinition( ); ///< Destructor - - static RichTbSurfaceDefinition* getRichTbSurfaceDefinitionInstance(); - + static RichTbSurfaceDefinition *getRichTbSurfaceDefinitionInstance(); - G4OpticalSurface* getRichTbSphMirrorSurface() - { - return RichTbSphMirrorSurface; - } - G4OpticalSurface* getRichTbVesselSurface() - { - return RichTbVesselSurface; - } - G4OpticalSurface* getRichTbPMTMasterQuartzWSurface() - { - return RichTbPMTMasterQuartzWSurface; - } - G4OpticalSurface* getRichTbPMTQuartzWPhCathodeSurface() - { - return RichTbPMTQuartzWPhCathodeSurface; - } - G4OpticalSurface* getRichTbKovarSurface() { - return RichTbKovarSurface;} - G4OpticalSurface* getRichTbSiDetSurface() { - return RichTbSiDetSurface;} + G4OpticalSurface *getRichTbSphMirrorSurface() { return RichTbSphMirrorSurface; } + G4OpticalSurface *getRichTbVesselSurface() { return RichTbVesselSurface; } + G4OpticalSurface *getRichTbPMTMasterQuartzWSurface() { return RichTbPMTMasterQuartzWSurface; } + G4OpticalSurface *getRichTbPMTQuartzWPhCathodeSurface() { return RichTbPMTQuartzWPhCathodeSurface; } + G4OpticalSurface *getRichTbKovarSurface() { return RichTbKovarSurface; } + G4OpticalSurface *getRichTbSiDetSurface() { return RichTbSiDetSurface; } void createMirrorOpticalSurface(); void createVesselSurface(); @@ -53,24 +37,21 @@ public: void ReadMirrorReflectivity(); void createRichTbKovarSurface(); void createtRichTbSiDetSurface(); - -protected: +protected: private: - /// Standard constructor - RichTbSurfaceDefinition( ); + RichTbSurfaceDefinition(); + + static RichTbSurfaceDefinition *RichTbSurfaceDefinitionInstance; - static RichTbSurfaceDefinition* RichTbSurfaceDefinitionInstance; - - G4OpticalSurface* RichTbSphMirrorSurface; - G4OpticalSurface* RichTbVesselSurface; - G4OpticalSurface* RichTbPMTMasterQuartzWSurface; - G4OpticalSurface* RichTbPMTQuartzWPhCathodeSurface; - G4OpticalSurface* RichTbKovarSurface; - G4OpticalSurface* RichTbSiDetSurface; + G4OpticalSurface *RichTbSphMirrorSurface; + G4OpticalSurface *RichTbVesselSurface; + G4OpticalSurface *RichTbPMTMasterQuartzWSurface; + G4OpticalSurface *RichTbPMTQuartzWPhCathodeSurface; + G4OpticalSurface *RichTbKovarSurface; + G4OpticalSurface *RichTbSiDetSurface; std::vector<G4double> MirrorSurfWlen; std::vector<G4double> MirrorSurfReflect; - }; #endif // INCLUDE_RICHTBSURFACEDEFINITION_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSurfaceParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSurfaceParameters.hh index 49c3ca5f0aadbdc9c8a7083cb8ebbe0fc3371739..b75e56916e3d0cae5d417469e9da86d303568e77 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSurfaceParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbSurfaceParameters.hh @@ -1,22 +1,19 @@ // $Id: $ -#ifndef INCLUDE_RICHTBSURFACEPARAMETERS_HH +#ifndef INCLUDE_RICHTBSURFACEPARAMETERS_HH #define INCLUDE_RICHTBSURFACEPARAMETERS_HH 1 // Include files - - -static G4int NumPhotMirrorReflectBins=403; +static G4int NumPhotMirrorReflectBins = 403; // in the above 401 is from the file and 2 bins added at the ends. // depending upon the wavelength range of measurements. -// this is redefined while reading the file. - +// this is redefined while reading the file. -const G4double PhotonMirrReflWavelengthUnits= 1.0*CLHEP::nanometer; +const G4double PhotonMirrReflWavelengthUnits = 1.0 * CLHEP::nanometer; // for testbem in 2004 a file is read with mirror reflectivity values. -//const G4double PhotonWavelengthMirrRefl[] = +// const G4double PhotonWavelengthMirrRefl[] = // // // {140.0,145.0,150.0,155.0,160.0,165.0,170.0, @@ -28,7 +25,7 @@ const G4double PhotonMirrReflWavelengthUnits= 1.0*CLHEP::nanometer; // 350.0,355.0,360.0,400.0,900.0,1000.0,1200.0 // }; // -//const G4double MirrorReflectivity[]= +// const G4double MirrorReflectivity[]= // {51.34108,53.09734,50.90585,49.3188,66.75388, // 68.24143,70.30895,72.34739,73.85167,75.23763, // 77.33105,79.52776,81.00301,82.8635,84.10011, @@ -41,7 +38,4 @@ const G4double PhotonMirrReflWavelengthUnits= 1.0*CLHEP::nanometer; // 86.36691,86.36691,86.36691,86.36691 // }; - - - #endif // INCLUDE_RICHTBSURFACEPARAMETERS_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbTrackingAction.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbTrackingAction.hh index 80778a94298fc9753ff96df60f4ff109102de089..978f4bbf2e2c9d5f67350e1f3985df1c3f1fe8e9 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbTrackingAction.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbTrackingAction.hh @@ -4,16 +4,15 @@ #include "Geant4/G4UserTrackingAction.hh" #include "Geant4/G4Track.hh" -class RichTbTrackingAction:public G4UserTrackingAction { +class RichTbTrackingAction : public G4UserTrackingAction { - public: - RichTbTrackingAction(); - virtual ~ RichTbTrackingAction(); - void PreUserTrackingAction(const G4Track * aTrack); - - void PostUserTrackingAction(const G4Track * aTrack); - +public: + RichTbTrackingAction(); + virtual ~RichTbTrackingAction(); + void PreUserTrackingAction(const G4Track *aTrack) override; - private: + void PostUserTrackingAction(const G4Track *aTrack) override; + +private: }; #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeCrystal.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeCrystal.hh index cde071d709e9807e756ea0df495a56b08f0f8818..ce22f732d5c1938008a4ca03ee00998a3bfe2f64 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeCrystal.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeCrystal.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBUPGRADECRYSTAL_HH +#ifndef INCLUDE_RICHTBUPGRADECRYSTAL_HH #define INCLUDE_RICHTBUPGRADECRYSTAL_HH 1 // Include files @@ -12,7 +12,7 @@ #include "RichTbUpgradeCrystalMaster.hh" /** @class RichTbVessel RichTbVessel.hh include/RichTbVessel.hh - * + * * * @author Sajan EASO * @date 2003-11-05 @@ -20,49 +20,28 @@ class RichTbCrystal { public: /// Standard constructor - RichTbCrystal(RichTbUpgradeCrystalMaster* rTbCrystalMaster ); + RichTbCrystal(RichTbUpgradeCrystalMaster *rTbCrystalMaster); - virtual ~RichTbCrystal( ); ///< Destructor + virtual ~RichTbCrystal(); ///< Destructor - void constructRichTbCrystal(); - void constructRichTbCrystalEnvelope(); - - G4LogicalVolume* getRichTbCrystalLVol() - { - return RichTbCrystalLVol; - } - G4LogicalVolume* getRichTbCrystalEnvelopeBottomLVol() - { - return RichTbCrystalEnvelopeBottomLVol; - - } + void constructRichTbCrystal(); + void constructRichTbCrystalEnvelope(); - G4VPhysicalVolume* getRichTbCrystalPVol() - { - return RichTbCrystalPVol; - } - G4VPhysicalVolume* getRichTbCrystalEnvelopeBottomPVol() - { - return RichTbCrystalEnvelopeBottomPVol; - } - RichTbUpgradeCrystalMaster* getaRTbCrystalMaster() - { - return aRTbCrystalMaster; - - } - -protected: + G4LogicalVolume *getRichTbCrystalLVol() { return RichTbCrystalLVol; } + G4LogicalVolume *getRichTbCrystalEnvelopeBottomLVol() { return RichTbCrystalEnvelopeBottomLVol; } + G4VPhysicalVolume *getRichTbCrystalPVol() { return RichTbCrystalPVol; } + G4VPhysicalVolume *getRichTbCrystalEnvelopeBottomPVol() { return RichTbCrystalEnvelopeBottomPVol; } + RichTbUpgradeCrystalMaster *getaRTbCrystalMaster() { return aRTbCrystalMaster; } + +protected: private: - RichTbUpgradeCrystalMaster* aRTbCrystalMaster; - - G4LogicalVolume* RichTbCrystalLVol; - G4LogicalVolume* RichTbCrystalEnvelopeBottomLVol; - + RichTbUpgradeCrystalMaster *aRTbCrystalMaster; - G4VPhysicalVolume* RichTbCrystalPVol; - G4VPhysicalVolume* RichTbCrystalEnvelopeBottomPVol; + G4LogicalVolume *RichTbCrystalLVol; + G4LogicalVolume *RichTbCrystalEnvelopeBottomLVol; - + G4VPhysicalVolume *RichTbCrystalPVol; + G4VPhysicalVolume *RichTbCrystalEnvelopeBottomPVol; }; -#endif +#endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeCrystalCover.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeCrystalCover.hh index 790d386d5d7e58c419ec8f24b63ebdeae9040929..48210ac301ab552116b10f4d348c9606a98f3229 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeCrystalCover.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeCrystalCover.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBUPGRADECRYSTALCOVER_HH +#ifndef INCLUDE_RICHTBUPGRADECRYSTALCOVER_HH #define INCLUDE_RICHTBUPGRADECRYSTALCOVER_HH 1 // Include files @@ -10,9 +10,9 @@ #include "RichTbHall.hh" #include "RichTbUpgradeCrystalMaster.hh" -/** @class (RichTbCrystalMaster (RichTbCrystalMaster.hh include/RichTbCrystalMaster.hh +/** @class (RichTbCrystalMaster (RichTbCrystalMaster.hh include/RichTbCrystalMaster.hh - * + * * * @author Sajan EASO * @date 2003-11-05 @@ -20,52 +20,38 @@ class RichTbCrystalCover { public: /// Standard constructor - RichTbCrystalCover(RichTbUpgradeCrystalMaster* rTbCrystalMaster ); + RichTbCrystalCover(RichTbUpgradeCrystalMaster *rTbCrystalMaster); - virtual ~RichTbCrystalCover( ); ///< Destructor + virtual ~RichTbCrystalCover(); ///< Destructor - void constructRichTbCrystalCover(); - void constructRichTbCrystalCoverEnvelope(); - - G4LogicalVolume* getRichTbCrystalCoverLVol() - { - return RichTbCrystalCoverLVol; - } + void constructRichTbCrystalCover(); + void constructRichTbCrystalCoverEnvelope(); + + G4LogicalVolume *getRichTbCrystalCoverLVol() { return RichTbCrystalCoverLVol; } /* G4LogicalVolume* getRichTbCrystalCoverEnvelopeBottomLVol() { return RichTbCrystalCoverEnvelopeBottomLVol; - + } */ - G4VPhysicalVolume* getRichTbCrystalCoverPVol() - { - return RichTbCrystalCoverPVol; - } + G4VPhysicalVolume *getRichTbCrystalCoverPVol() { return RichTbCrystalCoverPVol; } /* G4VPhysicalVolume* getRichTbCrystalCoverEnvelopeBottomPVol() { return RichTbVesselEnvelopeBottomPVol; } */ - RichTbUpgradeCrystalMaster* getaRTbCrystalMaster() - { - return aRTbCrystalMaster; - - } - -protected: + RichTbUpgradeCrystalMaster *getaRTbCrystalMaster() { return aRTbCrystalMaster; } +protected: private: - RichTbUpgradeCrystalMaster* aRTbCrystalMaster; - - G4LogicalVolume* RichTbCrystalCoverLVol; - // G4LogicalVolume* RichTbVesselEnvelopeBottomLVol; - + RichTbUpgradeCrystalMaster *aRTbCrystalMaster; - G4VPhysicalVolume* RichTbCrystalCoverPVol; - // G4VPhysicalVolume* RichTbVesselEnvelopeBottomPVol; + G4LogicalVolume *RichTbCrystalCoverLVol; + // G4LogicalVolume* RichTbVesselEnvelopeBottomLVol; - + G4VPhysicalVolume *RichTbCrystalCoverPVol; + // G4VPhysicalVolume* RichTbVesselEnvelopeBottomPVol; }; -#endif +#endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeCrystalMaster.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeCrystalMaster.hh index 7f7a4c6396191a43938a5fccf00c937d9ec47d39..2bf93f0d049dcc23f5ec36374a8a363065ab2f7f 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeCrystalMaster.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeCrystalMaster.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBUPGRADECRYSTALMASTER_HH +#ifndef INCLUDE_RICHTBUPGRADECRYSTALMASTER_HH #define INCLUDE_RICHTBUPGRADECRYSTALMASTER_HH 1 // Include files @@ -11,7 +11,7 @@ #include "RichTbUpgradeVessel.hh" /** @class RichTbUpgradeVessel RichTbUpgradeVessel.hh include/RichTbUpgradeVessel.hh - * + * * * @author Sajan EASO * @date 2003-11-05 @@ -19,49 +19,32 @@ class RichTbUpgradeCrystalMaster { public: /// Standard constructor - RichTbUpgradeCrystalMaster(RichTbUpgradeVessel* rTbVessel ); + RichTbUpgradeCrystalMaster(RichTbUpgradeVessel *rTbVessel); - virtual ~RichTbUpgradeCrystalMaster( ); ///< Destructor + virtual ~RichTbUpgradeCrystalMaster(); ///< Destructor - void constructRichTbUpgradeCrystalMaster(); - void constructRichTbUpgradeCrystalMasterEnvelope(); - - G4LogicalVolume* getRichTbUpgradeCrystalMasterLVol() - { - return RichTbUpgradeCrystalMasterLVol; - } - G4LogicalVolume* getRichTbUpgradeCrystalMasterEnvelopeBottomLVol() - { + void constructRichTbUpgradeCrystalMaster(); + void constructRichTbUpgradeCrystalMasterEnvelope(); + + G4LogicalVolume *getRichTbUpgradeCrystalMasterLVol() { return RichTbUpgradeCrystalMasterLVol; } + G4LogicalVolume *getRichTbUpgradeCrystalMasterEnvelopeBottomLVol() { return RichTbUpgradeCrystalMasterEnvelopeBottomLVol; - } - G4VPhysicalVolume* getRichTbUpgradeCrystalMasterPVol() - { - return RichTbUpgradeCrystalMasterPVol; - } - G4VPhysicalVolume* getRichTbUpgradeCrystalMasterEnvelopeBottomPVol() - { + G4VPhysicalVolume *getRichTbUpgradeCrystalMasterPVol() { return RichTbUpgradeCrystalMasterPVol; } + G4VPhysicalVolume *getRichTbUpgradeCrystalMasterEnvelopeBottomPVol() { return RichTbUpgradeCrystalMasterEnvelopeBottomPVol; } - RichTbUpgradeVessel* getaRTbVessel() - { - return aRTbVessel; - - } - -protected: + RichTbUpgradeVessel *getaRTbVessel() { return aRTbVessel; } +protected: private: - RichTbUpgradeVessel * aRTbVessel; - - G4LogicalVolume* RichTbUpgradeCrystalMasterLVol; - G4LogicalVolume* RichTbUpgradeCrystalMasterEnvelopeBottomLVol; - + RichTbUpgradeVessel *aRTbVessel; - G4VPhysicalVolume* RichTbUpgradeCrystalMasterPVol; - G4VPhysicalVolume* RichTbUpgradeCrystalMasterEnvelopeBottomPVol; + G4LogicalVolume *RichTbUpgradeCrystalMasterLVol; + G4LogicalVolume *RichTbUpgradeCrystalMasterEnvelopeBottomLVol; - + G4VPhysicalVolume *RichTbUpgradeCrystalMasterPVol; + G4VPhysicalVolume *RichTbUpgradeCrystalMasterEnvelopeBottomPVol; }; -#endif +#endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeDarkCover.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeDarkCover.hh index 31df7c33e3024c0d965da5752652f8ad5e7b55bf..3ccba7d8a9e38a34ea251fe109b58c06dad0513d 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeDarkCover.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeDarkCover.hh @@ -20,67 +20,43 @@ class RichTbUpgradeDarkCover { public: /// Standard constructor - RichTbUpgradeDarkCover(RichTbUpgradeRadiator* rTbRadiator ); + RichTbUpgradeDarkCover(RichTbUpgradeRadiator *rTbRadiator); - virtual ~RichTbUpgradeDarkCover( ); ///< Destructor + virtual ~RichTbUpgradeDarkCover(); ///< Destructor - void constructRichTbUpgradeDarkCover(); - void constructRichTbUpgradeUpsDarkCoverEnvelope(RichTbUpgradeCrystalMaster* aMaster); - void constructRichTbUpgradeSideDarkCoverEnvelope(RichTbUpgradeCrystalMaster* aMasterC); + void constructRichTbUpgradeDarkCover(); + void constructRichTbUpgradeUpsDarkCoverEnvelope(RichTbUpgradeCrystalMaster *aMaster); + void constructRichTbUpgradeSideDarkCoverEnvelope(RichTbUpgradeCrystalMaster *aMasterC); - //testbeam 2015 upgrade - void constructRichTbUpgradeDarkCover15(); - void constructRichTbUpgradeUpsDarkCoverEnvelope15(RichTbUpgradeCrystalMaster* aMaster); - void constructRichTbUpgradeSideDarkCoverEnvelope15(RichTbUpgradeCrystalMaster* aMasterC); + // testbeam 2015 upgrade + void constructRichTbUpgradeDarkCover15(); + void constructRichTbUpgradeUpsDarkCoverEnvelope15(RichTbUpgradeCrystalMaster *aMaster); + void constructRichTbUpgradeSideDarkCoverEnvelope15(RichTbUpgradeCrystalMaster *aMasterC); - G4LogicalVolume* getRichTbUpgradeDarkCoverLVol() - { - return RichTbUpgradeDarkCoverLVol; - } - G4LogicalVolume* getRichTbUpgradeDarkCoverEnvelopeBottomLVol() - { - return RichTbUpgradeDarkCoverEnvelopeBottomLVol; + G4LogicalVolume *getRichTbUpgradeDarkCoverLVol() { return RichTbUpgradeDarkCoverLVol; } + G4LogicalVolume *getRichTbUpgradeDarkCoverEnvelopeBottomLVol() { return RichTbUpgradeDarkCoverEnvelopeBottomLVol; } - } - - G4VPhysicalVolume* getRichTbUpgradeDarkCoverPVol() - { - return RichTbUpgradeDarkCoverPVol; - } - G4VPhysicalVolume* getRichTbUpgradeDarkCoverEnvelopeBottomPVol() - { - return RichTbUpgradeDarkCoverEnvelopeBottomPVol; - } - RichTbUpgradeRadiator* getaRTbUpgradeRadiator() - { - return aRTbUpgradeRadiator; - } - - G4LogicalVolume* getRichTbUpgradeUpsDarkCoverLVol() - { return RichTbUpgradeUpsDarkCoverLVol; } - - G4LogicalVolume* getRichTbUpgradeSideDarkCoverLVol() - { return RichTbUpgradeSideDarkCoverLVol ;} + G4VPhysicalVolume *getRichTbUpgradeDarkCoverPVol() { return RichTbUpgradeDarkCoverPVol; } + G4VPhysicalVolume *getRichTbUpgradeDarkCoverEnvelopeBottomPVol() { return RichTbUpgradeDarkCoverEnvelopeBottomPVol; } + RichTbUpgradeRadiator *getaRTbUpgradeRadiator() { return aRTbUpgradeRadiator; } + G4LogicalVolume *getRichTbUpgradeUpsDarkCoverLVol() { return RichTbUpgradeUpsDarkCoverLVol; } + G4LogicalVolume *getRichTbUpgradeSideDarkCoverLVol() { return RichTbUpgradeSideDarkCoverLVol; } protected: - private: - RichTbUpgradeRadiator* aRTbUpgradeRadiator; - - G4LogicalVolume* RichTbUpgradeDarkCoverLVol; - G4LogicalVolume* RichTbUpgradeUpsDarkCoverLVol; - G4LogicalVolume* RichTbUpgradeDarkCoverEnvelopeBottomLVol; - G4LogicalVolume* RichTbUpgradeSideDarkCoverLVol; - - - G4VPhysicalVolume* RichTbUpgradeDarkCoverPVol; - G4VPhysicalVolume* RichTbUpgradeUpsDarkCoverPVol; - G4VPhysicalVolume* RichTbUpgradeDarkCoverEnvelopeBottomPVol; - G4VPhysicalVolume* RichTbUpgradeSideTopDarkCoverPVol; - G4VPhysicalVolume* RichTbUpgradeSideBotDarkCoverPVol; - - + RichTbUpgradeRadiator *aRTbUpgradeRadiator; + + G4LogicalVolume *RichTbUpgradeDarkCoverLVol; + G4LogicalVolume *RichTbUpgradeUpsDarkCoverLVol; + G4LogicalVolume *RichTbUpgradeDarkCoverEnvelopeBottomLVol; + G4LogicalVolume *RichTbUpgradeSideDarkCoverLVol; + + G4VPhysicalVolume *RichTbUpgradeDarkCoverPVol; + G4VPhysicalVolume *RichTbUpgradeUpsDarkCoverPVol; + G4VPhysicalVolume *RichTbUpgradeDarkCoverEnvelopeBottomPVol; + G4VPhysicalVolume *RichTbUpgradeSideTopDarkCoverPVol; + G4VPhysicalVolume *RichTbUpgradeSideBotDarkCoverPVol; }; #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeDetectorConstruction.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeDetectorConstruction.hh index 4acbd1d3d50e9f3e88b6f2ca23d2e79addd41efe..03b534521972af38f958142c35a8dab0236977aa 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeDetectorConstruction.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeDetectorConstruction.hh @@ -1,5 +1,5 @@ -//This is the definition of the LHCb RICH Testbeam Detector Construction -//Author SE 1-3-2001 +// This is the definition of the LHCb RICH Testbeam Detector Construction +// Author SE 1-3-2001 // #ifndef RichTbUpgradeDetectorConstruction_h #define RichTbUpgradeDetectorConstruction_h 1 @@ -35,122 +35,76 @@ #include "RichTbGraphics.hh" -class RichTbDetectorConstruction:public G4VUserDetectorConstruction { +class RichTbDetectorConstruction : public G4VUserDetectorConstruction { - public: - RichTbDetectorConstruction(); - virtual ~ RichTbDetectorConstruction(); - G4VPhysicalVolume *Construct(); +public: + RichTbDetectorConstruction(); + virtual ~RichTbDetectorConstruction(); + G4VPhysicalVolume *Construct() override; - RichTbHall *getRichTbHall() { - return rTbHall; - } - RichTbUpgradeVessel* getRichTbUpgradeVessel() - { - return rTbVessel; - } + RichTbHall *getRichTbHall() { return rTbHall; } + RichTbUpgradeVessel *getRichTbUpgradeVessel() { return rTbVessel; } /* - RichTbMaster* getRichTbMaster1() + RichTbMaster* getRichTbMaster1() { return rTbMaster1; } - RichTbMaster* getRichTbMaster2() + RichTbMaster* getRichTbMaster2() { return rTbMaster2; } - RichTbMaster* getRichTbMaster3() + RichTbMaster* getRichTbMaster3() { return rTbMaster3; } - RichTbMaster* getRichTbMaster4() + RichTbMaster* getRichTbMaster4() { return rTbMaster4; } */ + RichTbLens *getRichTbLens() { return rTbLens; } + RichTbCrystal *getRichTbCrystal() { return rTbCrystal; } + RichTbUpgradeRadiator *getRichTbUpgradeRadiator() { return rTbUpgradeRadiator; } - RichTbLens* getRichTbLens() - { - return rTbLens; - } - RichTbCrystal* getRichTbCrystal() - { - return rTbCrystal; - } - RichTbUpgradeRadiator* getRichTbUpgradeRadiator() - { - return rTbUpgradeRadiator; - } + RichTbUpgradeCrystalMaster *getRichTbUpgradeCrystalMaster() { return rTbCrystalMaster; } + RichTbCrystalCover *getRichTbCrystalCover() { return rTbCrystalCover; } - RichTbUpgradeCrystalMaster* getRichTbUpgradeCrystalMaster() - { - return rTbCrystalMaster; - } - RichTbCrystalCover* getRichTbCrystalCover() - { - return rTbCrystalCover; - } + RichTbUpgradeDarkCover *getRichTbUpgradeDarkCover() { return rTbUpgradeDarkCover; } - RichTbUpgradeDarkCover* getRichTbUpgradeDarkCover() - { - return rTbUpgradeDarkCover; - } + RichTbPhDFrame *getRichTbPhDFrame() { return rTbPhDFrame; } - RichTbPhDFrame* getRichTbPhDFrame() - { - return rTbPhDFrame; - } + RichTbPMT *getRichTbPMT() { return rTbPMT; } - RichTbPMT* getRichTbPMT() - { - return rTbPMT; - } + RichTbUpgradeMirror *getRichTbUpgradeMirror() { return rTbUpgradeMirror; } + RichTbUpgradePhDetSupFrame *getRichTbUpgradePhDetSupFrame() { return rTbUpgradePhotSupFrame; } - RichTbUpgradeMirror* getRichTbUpgradeMirror() - { - return rTbUpgradeMirror; - - } - - RichTbUpgradePhDetSupFrame* getRichTbUpgradePhDetSupFrame() - { return rTbUpgradePhotSupFrame; } - - RichTbUpgradeEC* getRichTbEC() - { - return rTbEC; - } - + RichTbUpgradeEC *getRichTbEC() { return rTbEC; } - /* - RichTbPhDetSupFrame* getRichTbPhDetSupFrame() + /* + RichTbPhDetSupFrame* getRichTbPhDetSupFrame() { return rTbPhotSupFrame; } */ - RichTbSurface* getRichTbSurface() - { - return rTbSurface; - } - - RichTbROGeometry *getROGeometry() { return rTbROGeom;} - RichTbROGeometryHpd *getROGeometryHpd( ){return rTbROGeomHpd;} - - - /* RichTbSD* getRichTbSD() - { return PMTSD; - } - */ + RichTbSurface *getRichTbSurface() { return rTbSurface; } + + RichTbROGeometry *getROGeometry() { return rTbROGeom; } + RichTbROGeometryHpd *getROGeometryHpd() { return rTbROGeomHpd; } + + /* RichTbSD* getRichTbSD() + { return PMTSD; + } + */ - RichTbHpd* getRichTbHpd() {return rTbHpd; } - - - private: + RichTbHpd *getRichTbHpd() { return rTbHpd; } +private: RichTbHall *rTbHall; - RichTbUpgradeVessel* rTbVessel; + RichTbUpgradeVessel *rTbVessel; /* RichTbMaster* rTbMaster1; RichTbMaster* rTbMaster2; @@ -158,34 +112,30 @@ class RichTbDetectorConstruction:public G4VUserDetectorConstruction { RichTbMaster* rTbMaster4; */ - RichTbCrystal* rTbCrystal; - RichTbUpgradeRadiator* rTbUpgradeRadiator; - RichTbUpgradeCrystalMaster* rTbCrystalMaster; - RichTbCrystalCover* rTbCrystalCover; - RichTbUpgradeDarkCover* rTbUpgradeDarkCover; - RichTbPhDFrame* rTbPhDFrame; - RichTbPMT* rTbPMT; - RichTbUpgradeMirror* rTbUpgradeMirror; - RichTbLens* rTbLens; - + RichTbCrystal *rTbCrystal; + RichTbUpgradeRadiator *rTbUpgradeRadiator; + RichTbUpgradeCrystalMaster *rTbCrystalMaster; + RichTbCrystalCover *rTbCrystalCover; + RichTbUpgradeDarkCover *rTbUpgradeDarkCover; + RichTbPhDFrame *rTbPhDFrame; + RichTbPMT *rTbPMT; + RichTbUpgradeMirror *rTbUpgradeMirror; + RichTbLens *rTbLens; // RichTbGraphics* rTbGraphics ; - - // RichTbPhDetSupFrame* rTbPhotSupFrame; - RichTbUpgradePhDetSupFrame* rTbUpgradePhotSupFrame; - RichTbUpgradeEC* rTbEC; - RichTbHpd* rTbHpd; - + // RichTbPhDetSupFrame* rTbPhotSupFrame; + RichTbUpgradePhDetSupFrame *rTbUpgradePhotSupFrame; + RichTbUpgradeEC *rTbEC; + RichTbHpd *rTbHpd; - RichTbSurface* rTbSurface; + RichTbSurface *rTbSurface; // RichTbSD* PMTSD; - + RichTbROGeometry *rTbROGeom; RichTbROGeometryHpd *rTbROGeomHpd; - }; -#endif /*RichTbDetectorConstruction_h */ +#endif /*RichTbDetectorConstruction_h */ diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeEC.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeEC.hh index 1e41ca400e694164f8b236064cf2ab66d14f323d..eee1ffccbed8bb161d4249cfdd6e69eb236f34aa 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeEC.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeEC.hh @@ -8,7 +8,6 @@ #include "Geant4/G4LogicalVolume.hh" #include "RichTbUpgradePhDetSupFrame.hh" - /** @class RichTbUpgradeEC RichTbUpgradeEC.hh include/RichTbUpgradeEC.hh * * @@ -18,66 +17,50 @@ class RichTbUpgradeEC { public: /// Standard constructor - RichTbUpgradeEC( RichTbUpgradePhDetSupFrame * rTbPhotSupFrame ); + RichTbUpgradeEC(RichTbUpgradePhDetSupFrame *rTbPhotSupFrame); - virtual ~RichTbUpgradeEC( ); ///< Destructor + virtual ~RichTbUpgradeEC(); ///< Destructor void constructRichTbUpgradeEC(); - void constructRichTbUpgradeECSupport (); - void constructRichTbUpgradeSingleEC (); - void constructRichTbUpgradeSingleECSupport (); + void constructRichTbUpgradeECSupport(); + void constructRichTbUpgradeSingleEC(); + void constructRichTbUpgradeSingleECSupport(); void constructRichTbUpgradeEC15(); void constructRichTbUpgradeECSupport15(); + G4LogicalVolume *getRichTbECLeftLVol() { return RichTbECLeftLVol; } + G4LogicalVolume *getRichTbECRightLVol() { return RichTbECRightLVol; } + G4VPhysicalVolume *getRichTbECLeftPVol() { return RichTbECLeftPVol; } + G4VPhysicalVolume *getRichTbECRightPVol() { return RichTbECRightPVol; } + // Upgrade 2015 + G4LogicalVolume *getRichTbECBottomLeftLVol() { return RichTbECBottomLeftLVol; } + G4LogicalVolume *getRichTbECBottomRightLVol() { return RichTbECBottomRightLVol; } + G4VPhysicalVolume *getRichTbECBottomLeftPVol() { return RichTbECBottomLeftPVol; } + G4VPhysicalVolume *getRichTbECBottomRightPVol() { return RichTbECBottomRightPVol; } - G4LogicalVolume* getRichTbECLeftLVol() - { return RichTbECLeftLVol; } - G4LogicalVolume* getRichTbECRightLVol() - { return RichTbECRightLVol;} - G4VPhysicalVolume* getRichTbECLeftPVol() - { return RichTbECLeftPVol;} - G4VPhysicalVolume* getRichTbECRightPVol() - { return RichTbECRightPVol;} - - //Upgrade 2015 - G4LogicalVolume* getRichTbECBottomLeftLVol() - { return RichTbECBottomLeftLVol; } - G4LogicalVolume* getRichTbECBottomRightLVol() - { return RichTbECBottomRightLVol;} - G4VPhysicalVolume* getRichTbECBottomLeftPVol() - { return RichTbECBottomLeftPVol;} - G4VPhysicalVolume* getRichTbECBottomRightPVol() - { return RichTbECBottomRightPVol;} - - RichTbUpgradePhDetSupFrame * getRTbPhotSupFrame() - { return aRTbPhotSupFrame;} + RichTbUpgradePhDetSupFrame *getRTbPhotSupFrame() { return aRTbPhotSupFrame; } - G4LogicalVolume* getRichTbECSupLVol() - { return RichTbECSupLVol;} + G4LogicalVolume *getRichTbECSupLVol() { return RichTbECSupLVol; } protected: - private: - - G4LogicalVolume* RichTbECLeftLVol; - G4LogicalVolume* RichTbECRightLVol; - G4VPhysicalVolume* RichTbECLeftPVol; - G4VPhysicalVolume* RichTbECRightPVol; - - //Upgrade 2015 - G4LogicalVolume* RichTbECBottomLeftLVol; - G4LogicalVolume* RichTbECBottomRightLVol; - G4VPhysicalVolume* RichTbECBottomLeftPVol; - G4VPhysicalVolume* RichTbECBottomRightPVol; - - RichTbUpgradePhDetSupFrame* aRTbPhotSupFrame; - G4LogicalVolume* RichTbECSupLVol; - - G4VPhysicalVolume* RichTbECSupLeftPVol ; - G4VPhysicalVolume* RichTbECSupRightPVol ; - G4VPhysicalVolume* RichTbECSupBottomLeftPVol ; - G4VPhysicalVolume* RichTbECSupBottomRightPVol ; - - + G4LogicalVolume *RichTbECLeftLVol; + G4LogicalVolume *RichTbECRightLVol; + G4VPhysicalVolume *RichTbECLeftPVol; + G4VPhysicalVolume *RichTbECRightPVol; + + // Upgrade 2015 + G4LogicalVolume *RichTbECBottomLeftLVol; + G4LogicalVolume *RichTbECBottomRightLVol; + G4VPhysicalVolume *RichTbECBottomLeftPVol; + G4VPhysicalVolume *RichTbECBottomRightPVol; + + RichTbUpgradePhDetSupFrame *aRTbPhotSupFrame; + G4LogicalVolume *RichTbECSupLVol; + + G4VPhysicalVolume *RichTbECSupLeftPVol; + G4VPhysicalVolume *RichTbECSupRightPVol; + G4VPhysicalVolume *RichTbECSupBottomLeftPVol; + G4VPhysicalVolume *RichTbECSupBottomRightPVol; }; #endif // INCLUDE_RICHTBUPGRADEEC_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeHpdSD.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeHpdSD.hh index 43d59a0e867de88525ca34c7ca8a6e728b2feeae..955451a948e9a37a016d57def6a3b544c05ce6b4 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeHpdSD.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeHpdSD.hh @@ -1,4 +1,4 @@ -#ifndef INCLUDE_RICHTBUPGRADEHPDSD_HH +#ifndef INCLUDE_RICHTBUPGRADEHPDSD_HH #define INCLUDE_RICHTBUPGRADEHPDSD_HH 1 // Include files @@ -11,37 +11,33 @@ class G4Step; class G4HCofThisEvent; /** @class RichTbUpgradeHpdSD RichTbUpgradeHpdSD.hh include/RichTbUpgradeHpdSD.hh - * + * * * @author Sajan Easo * @date 2015-05-15 */ -class RichTbUpgradeHpdSD:public G4VSensitiveDetector { -public: +class RichTbUpgradeHpdSD : public G4VSensitiveDetector { +public: /// Standard constructor - RichTbUpgradeHpdSD(G4String ); + RichTbUpgradeHpdSD(G4String); - virtual ~RichTbUpgradeHpdSD( ); ///< Destructor - void Initialize(G4HCofThisEvent*HCE); + virtual ~RichTbUpgradeHpdSD(); ///< Destructor + void Initialize(G4HCofThisEvent *HCE) override; - G4bool ProcessHits(G4Step*aStep,G4TouchableHistory*ROhist); - void EndOfEvent(G4HCofThisEvent*HCE); - void clear(); - void DrawAll(); - void PrintAll(); - G4int getCurrentHitCreationOption(){ - return CurrentHitCreationOption; - } + G4bool ProcessHits(G4Step *aStep, G4TouchableHistory *ROhist) override; + void EndOfEvent(G4HCofThisEvent *HCE) override; + void clear() override; + void DrawAll() override; + void PrintAll() override; + G4int getCurrentHitCreationOption() { return CurrentHitCreationOption; } protected: - private: - RichTbHitsCollection * RichTbHitCollectionHpd; - std::vector<G4int> HpdSDID; - G4int HCID; - G4int CurrentHitCreationOption; + RichTbHitsCollection *RichTbHitCollectionHpd; + std::vector<G4int> HpdSDID; + G4int HCID; + G4int CurrentHitCreationOption; G4int RichTbHitCollIndex; G4String RichTbSDHpdName; - }; #endif // INCLUDE_RICHTBUPGRADEHPDSD_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeLens.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeLens.hh index d0abefc8ffba2e45965a31b17af56ccdb7a11947..e35ac02ed85578ea42a8572c467558b05e818372 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeLens.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeLens.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBUPGRADELENS_HH +#ifndef INCLUDE_RICHTBUPGRADELENS_HH #define INCLUDE_RICHTBUPGRADELENS_HH 1 // Include files @@ -12,7 +12,7 @@ #include "RichTbUpgradeCrystalMaster.hh" /** @class RichTbVessel RichTbVessel.hh include/RichTbVessel.hh - * + * * * @author Sajan EASO * @date 2003-11-05 @@ -20,37 +20,25 @@ class RichTbLens { public: /// Standard constructor - RichTbLens(RichTbUpgradeCrystalMaster* rTbCrystalMaster ); - - virtual ~RichTbLens( ); ///< Destructor - - void constructRichTbLens(); - void constructRichTbLensEnvelope(); - - G4LogicalVolume* getRichTbLensLVol() - { - return RichTbLensLVol; - } - - G4VPhysicalVolume* getRichTbLensPVol() - { - return RichTbLensPVol; - } - - RichTbUpgradeCrystalMaster* getaRTbCrystalMaster() - { - return aRTbCrystalMaster; - - } - -protected: + RichTbLens(RichTbUpgradeCrystalMaster *rTbCrystalMaster); + + virtual ~RichTbLens(); ///< Destructor + + void constructRichTbLens(); + void constructRichTbLensEnvelope(); + + G4LogicalVolume *getRichTbLensLVol() { return RichTbLensLVol; } + G4VPhysicalVolume *getRichTbLensPVol() { return RichTbLensPVol; } + + RichTbUpgradeCrystalMaster *getaRTbCrystalMaster() { return aRTbCrystalMaster; } + +protected: private: - RichTbUpgradeCrystalMaster* aRTbCrystalMaster; - - G4LogicalVolume* RichTbLensLVol; - - G4VPhysicalVolume* RichTbLensPVol; - + RichTbUpgradeCrystalMaster *aRTbCrystalMaster; + + G4LogicalVolume *RichTbLensLVol; + + G4VPhysicalVolume *RichTbLensPVol; }; -#endif +#endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeMaster.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeMaster.hh index 61f7fb2b7f2620ed00855148d136906a2662d5bb..ae21cefa8b6b2d8ec8445d546e8e1b6d8267b810 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeMaster.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeMaster.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBUPGRADEMASTER_HH +#ifndef INCLUDE_RICHTBUPGRADEMASTER_HH #define INCLUDE_RICHTBUPGRADEMASTER_HH 1 // Include files @@ -12,7 +12,7 @@ #include "RichTbUpgradePhDFrame.hh" /** @class RichTbVessel RichTbVessel.hh include/RichTbVessel.hh - * + * * * @author Sajan EASO * @date 2003-11-05 @@ -20,63 +20,40 @@ class RichTbMaster { public: /// Standard constructor - RichTbMaster(RichTbPhDFrame* rTbPhDFrame, int MasterNum ); + RichTbMaster(RichTbPhDFrame *rTbPhDFrame, int MasterNum); - virtual ~RichTbMaster( ); ///< Destructor + virtual ~RichTbMaster(); ///< Destructor - void constructRichTbMaster1(); - void constructRichTbMasterEnvelope1(); - - void constructRichTbMaster2(); - void constructRichTbMasterEnvelope2(); + void constructRichTbMaster1(); + void constructRichTbMasterEnvelope1(); - void constructRichTbMaster3(); - void constructRichTbMasterEnvelope3(); + void constructRichTbMaster2(); + void constructRichTbMasterEnvelope2(); - void constructRichTbMaster4(); - void constructRichTbMasterEnvelope4(); + void constructRichTbMaster3(); + void constructRichTbMasterEnvelope3(); - G4LogicalVolume* getRichTbMasterLVol() - { - return RichTbMasterLVol; - } - G4LogicalVolume* getRichTbMasterEnvelopeBottomLVol() - { - return RichTbMasterEnvelopeBottomLVol; - } + void constructRichTbMaster4(); + void constructRichTbMasterEnvelope4(); - G4VPhysicalVolume* getRichTbMasterPVol() - { - return RichTbMasterPVol; - } - G4VPhysicalVolume* getRichTbMasterEnvelopeBottomPVol() - { - return RichTbMasterEnvelopeBottomPVol; - } + G4LogicalVolume *getRichTbMasterLVol() { return RichTbMasterLVol; } + G4LogicalVolume *getRichTbMasterEnvelopeBottomLVol() { return RichTbMasterEnvelopeBottomLVol; } - RichTbPhDFrame* getaRTbPhDFrame() - { - return aRTbPhDFrame; - - } - int getaMasterNum() - { - return aMasterNum; - - } -protected: + G4VPhysicalVolume *getRichTbMasterPVol() { return RichTbMasterPVol; } + G4VPhysicalVolume *getRichTbMasterEnvelopeBottomPVol() { return RichTbMasterEnvelopeBottomPVol; } + RichTbPhDFrame *getaRTbPhDFrame() { return aRTbPhDFrame; } + int getaMasterNum() { return aMasterNum; } + +protected: private: - RichTbPhDFrame* aRTbPhDFrame; + RichTbPhDFrame *aRTbPhDFrame; int aMasterNum; - - G4LogicalVolume* RichTbMasterLVol; - G4LogicalVolume* RichTbMasterEnvelopeBottomLVol; - - G4VPhysicalVolume* RichTbMasterPVol; - G4VPhysicalVolume* RichTbMasterEnvelopeBottomPVol; + G4LogicalVolume *RichTbMasterLVol; + G4LogicalVolume *RichTbMasterEnvelopeBottomLVol; - + G4VPhysicalVolume *RichTbMasterPVol; + G4VPhysicalVolume *RichTbMasterEnvelopeBottomPVol; }; -#endif +#endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeMirror.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeMirror.hh index 88bd9370cc7e40f06428dfb29d96d01b247fd43e..9e586a8e362f69c605f503810d72a863c26415aa 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeMirror.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeMirror.hh @@ -17,48 +17,31 @@ class RichTbUpgradeMirror { public: /// Standard constructor - RichTbUpgradeMirror( RichTbUpgradeCrystalMaster* aMaster, RichTbUpgradeRadiator* aRadiator); + RichTbUpgradeMirror(RichTbUpgradeCrystalMaster *aMaster, RichTbUpgradeRadiator *aRadiator); - virtual ~RichTbUpgradeMirror( ); ///< Destructor + virtual ~RichTbUpgradeMirror(); ///< Destructor - - G4LogicalVolume* getRichTbUpgradeMirrorLVol() - { - return RichTbUpgradeMirrorLVol; - - } - G4VPhysicalVolume* getRichTbUpgradeMirrorPVol() - { - return RichTbUpgradeMirrorPVol; - } + G4LogicalVolume *getRichTbUpgradeMirrorLVol() { return RichTbUpgradeMirrorLVol; } + G4VPhysicalVolume *getRichTbUpgradeMirrorPVol() { return RichTbUpgradeMirrorPVol; } void constructRichTbUpgradeMirror(); - void constructRichTbUpgradeMirror15(); //testbeam 2015 upgrade + void constructRichTbUpgradeMirror15(); // testbeam 2015 upgrade - RichTbUpgradeRadiator* getaRTbUpgradeRadiator() - { - return aRTbUpgradeRadiator; - } + RichTbUpgradeRadiator *getaRTbUpgradeRadiator() { return aRTbUpgradeRadiator; } protected: - private: - /// Standard constructor - //RichTbUpgradeMirror( RichTbCrystalMaster* aMaster ); + // RichTbUpgradeMirror( RichTbCrystalMaster* aMaster ); - - //static RichTbUpgradeMirror* RichTbUpgradeMirrorInstance; + // static RichTbUpgradeMirror* RichTbUpgradeMirrorInstance; G4ThreeVector MirrorCoC; + RichTbUpgradeCrystalMaster *motherMaster; + RichTbUpgradeRadiator *aRTbUpgradeRadiator; - RichTbUpgradeCrystalMaster* motherMaster; - - RichTbUpgradeRadiator* aRTbUpgradeRadiator; - - G4LogicalVolume* RichTbUpgradeMirrorLVol; - G4VPhysicalVolume* RichTbUpgradeMirrorPVol; - + G4LogicalVolume *RichTbUpgradeMirrorLVol; + G4VPhysicalVolume *RichTbUpgradeMirrorPVol; }; #endif // INCLUDE_RICHTBUPGRADEMIRROR_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradePhDFrame.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradePhDFrame.hh index 539e8e95f6ddf2e4bc50dc5dc752b4009b251135..ec1d39e693aea3707991946c214b81b8d750efb8 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradePhDFrame.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradePhDFrame.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBUPGRADEPHDFRAME_HH +#ifndef INCLUDE_RICHTBUPGRADEPHDFRAME_HH #define INCLUDE_RICHTBUPGRADEPHDFRAME_HH 1 // Include files @@ -11,7 +11,7 @@ #include "RichTbUpgradeCrystalMaster.hh" /** @class RichTbVessel RichTbVessel.hh include/RichTbVessel.hh - * + * * * @author Sajan EASO * @date 2003-11-05 @@ -19,49 +19,28 @@ class RichTbPhDFrame { public: /// Standard constructor - RichTbPhDFrame(RichTbUpgradeCrystalMaster* rTbCrystalMaster ); + RichTbPhDFrame(RichTbUpgradeCrystalMaster *rTbCrystalMaster); - virtual ~RichTbPhDFrame( ); ///< Destructor + virtual ~RichTbPhDFrame(); ///< Destructor - void constructRichTbPhDFrame(); - void constructRichTbPhDFrameEnvelope(); - - G4LogicalVolume* getRichTbPhDFrameLVol() - { - return RichTbPhDFrameLVol; - } - G4LogicalVolume* getRichTbPhDFrameEnvelopeBottomLVol() - { - return RichTbPhDFrameEnvelopeBottomLVol; - - } + void constructRichTbPhDFrame(); + void constructRichTbPhDFrameEnvelope(); - G4VPhysicalVolume* getRichTbPhDFramePVol() - { - return RichTbPhDFramePVol; - } - G4VPhysicalVolume* getRichTbPhDFrameEnvelopeBottomPVol() - { - return RichTbPhDFrameEnvelopeBottomPVol; - } - RichTbUpgradeCrystalMaster* getRTbCrystalMaster() - { - return aRTbCrystalMaster; - - } - -protected: + G4LogicalVolume *getRichTbPhDFrameLVol() { return RichTbPhDFrameLVol; } + G4LogicalVolume *getRichTbPhDFrameEnvelopeBottomLVol() { return RichTbPhDFrameEnvelopeBottomLVol; } + G4VPhysicalVolume *getRichTbPhDFramePVol() { return RichTbPhDFramePVol; } + G4VPhysicalVolume *getRichTbPhDFrameEnvelopeBottomPVol() { return RichTbPhDFrameEnvelopeBottomPVol; } + RichTbUpgradeCrystalMaster *getRTbCrystalMaster() { return aRTbCrystalMaster; } + +protected: private: - RichTbUpgradeCrystalMaster* aRTbCrystalMaster; - - G4LogicalVolume* RichTbPhDFrameLVol; - G4LogicalVolume* RichTbPhDFrameEnvelopeBottomLVol; - + RichTbUpgradeCrystalMaster *aRTbCrystalMaster; - G4VPhysicalVolume* RichTbPhDFramePVol; - G4VPhysicalVolume* RichTbPhDFrameEnvelopeBottomPVol; + G4LogicalVolume *RichTbPhDFrameLVol; + G4LogicalVolume *RichTbPhDFrameEnvelopeBottomLVol; - + G4VPhysicalVolume *RichTbPhDFramePVol; + G4VPhysicalVolume *RichTbPhDFrameEnvelopeBottomPVol; }; -#endif +#endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradePhDetSupFrame.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradePhDetSupFrame.hh index eb299995ddba230f3529f04a4adb6c259e294099..0ef53309bdbaf59c202e2873e7dc4f03c474e0db 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradePhDetSupFrame.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradePhDetSupFrame.hh @@ -17,54 +17,36 @@ class RichTbUpgradePhDetSupFrame { public: /// Standard constructor - RichTbUpgradePhDetSupFrame(RichTbUpgradeCrystalMaster* rTbCrystalMaster ); + RichTbUpgradePhDetSupFrame(RichTbUpgradeCrystalMaster *rTbCrystalMaster); - virtual ~RichTbUpgradePhDetSupFrame( ); ///< Destructor + virtual ~RichTbUpgradePhDetSupFrame(); ///< Destructor - void constructRichTbPhotoDetectorSupFrame() ; + void constructRichTbPhotoDetectorSupFrame(); void constructRichTbPhotoDetectorSupFrameWithHpd(); void constructRichTbPhotoDetectorSupFrame15(); + G4LogicalVolume *getRichTbPhDetSupFrameLeftLVol() { return RichTbPhDetSupFrameLeftLVol; } + G4LogicalVolume *getRichTbPhDetSupFrameRightLVol() { return RichTbPhDetSupFrameRightLVol; } + G4VPhysicalVolume *getRichTbPhDetSupFrameLeftPVol() { return RichTbPhDetSupFrameLeftPVol; } + G4VPhysicalVolume *getRichTbPhDetSupFrameRightPVol() { return RichTbPhDetSupFrameRightPVol; } - G4LogicalVolume* getRichTbPhDetSupFrameLeftLVol() - {return RichTbPhDetSupFrameLeftLVol;} - G4LogicalVolume* getRichTbPhDetSupFrameRightLVol() - { return RichTbPhDetSupFrameRightLVol;} - G4VPhysicalVolume* getRichTbPhDetSupFrameLeftPVol() - { return RichTbPhDetSupFrameLeftPVol ;} - G4VPhysicalVolume* getRichTbPhDetSupFrameRightPVol() - { return RichTbPhDetSupFrameRightPVol ;} - - G4LogicalVolume* getRichTbPhDetSupFrameBottomLeftLVol() - {return RichTbPhDetSupFrameBottomLeftLVol;} - G4LogicalVolume* getRichTbPhDetSupFrameBottomRightLVol() - { return RichTbPhDetSupFrameBottomRightLVol;} - G4VPhysicalVolume* getRichTbPhDetSupFrameBottomLeftPVol() - { return RichTbPhDetSupFrameBottomLeftPVol ;} - G4VPhysicalVolume* getRichTbPhDetSupFrameBottomRightPVol() - { return RichTbPhDetSupFrameBottomRightPVol ;} - - RichTbUpgradeCrystalMaster* getCrystalMaster() - {return aRTbCrystalMaster; } - - + G4LogicalVolume *getRichTbPhDetSupFrameBottomLeftLVol() { return RichTbPhDetSupFrameBottomLeftLVol; } + G4LogicalVolume *getRichTbPhDetSupFrameBottomRightLVol() { return RichTbPhDetSupFrameBottomRightLVol; } + G4VPhysicalVolume *getRichTbPhDetSupFrameBottomLeftPVol() { return RichTbPhDetSupFrameBottomLeftPVol; } + G4VPhysicalVolume *getRichTbPhDetSupFrameBottomRightPVol() { return RichTbPhDetSupFrameBottomRightPVol; } + RichTbUpgradeCrystalMaster *getCrystalMaster() { return aRTbCrystalMaster; } protected: - private: - - - G4LogicalVolume* RichTbPhDetSupFrameLeftLVol; - G4LogicalVolume* RichTbPhDetSupFrameRightLVol; - G4VPhysicalVolume* RichTbPhDetSupFrameLeftPVol ; - G4VPhysicalVolume* RichTbPhDetSupFrameRightPVol ; - G4LogicalVolume* RichTbPhDetSupFrameBottomLeftLVol; - G4LogicalVolume* RichTbPhDetSupFrameBottomRightLVol; - G4VPhysicalVolume* RichTbPhDetSupFrameBottomLeftPVol; - G4VPhysicalVolume* RichTbPhDetSupFrameBottomRightPVol; - RichTbUpgradeCrystalMaster* aRTbCrystalMaster; - - + G4LogicalVolume *RichTbPhDetSupFrameLeftLVol; + G4LogicalVolume *RichTbPhDetSupFrameRightLVol; + G4VPhysicalVolume *RichTbPhDetSupFrameLeftPVol; + G4VPhysicalVolume *RichTbPhDetSupFrameRightPVol; + G4LogicalVolume *RichTbPhDetSupFrameBottomLeftLVol; + G4LogicalVolume *RichTbPhDetSupFrameBottomRightLVol; + G4VPhysicalVolume *RichTbPhDetSupFrameBottomLeftPVol; + G4VPhysicalVolume *RichTbPhDetSupFrameBottomRightPVol; + RichTbUpgradeCrystalMaster *aRTbCrystalMaster; }; #endif // INCLUDE_RICHTBUPGRADEPHDETSUPFRAME_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeRadiator.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeRadiator.hh index 0bc8359ccf009831a2d09dc7690ed985453b75f1..8a891a25af132c9a4eace7ae552d95491b699b30 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeRadiator.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeRadiator.hh @@ -17,63 +17,37 @@ * @author Sajan EASO * @date 2003-11-05 */ -class RichTbUpgradeRadiator{ +class RichTbUpgradeRadiator { public: /// Standard constructor - RichTbUpgradeRadiator(RichTbUpgradeCrystalMaster* rTbCrystalMaster ); + RichTbUpgradeRadiator(RichTbUpgradeCrystalMaster *rTbCrystalMaster); - virtual ~RichTbUpgradeRadiator( ); ///< Destructor + virtual ~RichTbUpgradeRadiator(); ///< Destructor - void constructRichTbUpgradeRadiator(); - void constructRichTbUpgradeRadiator15(); - void constructRichTbUpgradeRadiatorEnvelope(); + void constructRichTbUpgradeRadiator(); + void constructRichTbUpgradeRadiator15(); + void constructRichTbUpgradeRadiatorEnvelope(); - G4LogicalVolume* getRichTbUpgradeRadiatorLVol() - { - return RichTbUpgradeRadiatorLVol; - } - G4LogicalVolume* getRichTbUpgradeRadiatorEnvelopeBottomLVol() - { - return RichTbUpgradeRadiatorEnvelopeBottomLVol; + G4LogicalVolume *getRichTbUpgradeRadiatorLVol() { return RichTbUpgradeRadiatorLVol; } + G4LogicalVolume *getRichTbUpgradeRadiatorEnvelopeBottomLVol() { return RichTbUpgradeRadiatorEnvelopeBottomLVol; } - } - - G4VPhysicalVolume* getRichTbUpgradeRadiatorPVol() - { - return RichTbUpgradeRadiatorPVol; - } - G4VPhysicalVolume* getRichTbUpgradeRadiatorEnvelopeBottomPVol() - { - return RichTbUpgradeRadiatorEnvelopeBottomPVol; - } - RichTbUpgradeCrystalMaster* getaRTbCrystalMaster() - { - return aRTbCrystalMaster; - - } - G4LogicalVolume* getTestLvol() - { - return testLvol; - } - G4VPhysicalVolume* getTestPvol() - { - return testPvol; - } + G4VPhysicalVolume *getRichTbUpgradeRadiatorPVol() { return RichTbUpgradeRadiatorPVol; } + G4VPhysicalVolume *getRichTbUpgradeRadiatorEnvelopeBottomPVol() { return RichTbUpgradeRadiatorEnvelopeBottomPVol; } + RichTbUpgradeCrystalMaster *getaRTbCrystalMaster() { return aRTbCrystalMaster; } + G4LogicalVolume *getTestLvol() { return testLvol; } + G4VPhysicalVolume *getTestPvol() { return testPvol; } protected: - private: - RichTbUpgradeCrystalMaster* aRTbCrystalMaster; - - G4LogicalVolume* RichTbUpgradeRadiatorLVol; - G4LogicalVolume* RichTbUpgradeRadiatorEnvelopeBottomLVol; - + RichTbUpgradeCrystalMaster *aRTbCrystalMaster; - G4VPhysicalVolume* RichTbUpgradeRadiatorPVol; - G4VPhysicalVolume* RichTbUpgradeRadiatorEnvelopeBottomPVol; + G4LogicalVolume *RichTbUpgradeRadiatorLVol; + G4LogicalVolume *RichTbUpgradeRadiatorEnvelopeBottomLVol; - G4LogicalVolume * testLvol; - G4VPhysicalVolume * testPvol; + G4VPhysicalVolume *RichTbUpgradeRadiatorPVol; + G4VPhysicalVolume *RichTbUpgradeRadiatorEnvelopeBottomPVol; + G4LogicalVolume *testLvol; + G4VPhysicalVolume *testPvol; }; #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeSD.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeSD.hh index 6be735506afbaccb161649b549e01a73f7abce81..99a437147ac33130111c1afcbf65f26e35823470 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeSD.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeSD.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBUPGRADESD_HH +#ifndef INCLUDE_RICHTBUPGRADESD_HH #define INCLUDE_RICHTBUPGRADESD_HH 1 // Include files @@ -11,46 +11,38 @@ class G4Step; class G4HCofThisEvent; - /** @class RichTbUpgradeSD RichTbUpgradeSD.hh include/RichTbUpgradeSD.hh - * + * * * @author Sajan EASO * @date 2003-12-12 * Modif: Claudia Merlassino, Sajan Easo - * date : 2014-08-21 + * date : 2014-08-21 */ -class RichTbUpgradeSD:public G4VSensitiveDetector { -public: +class RichTbUpgradeSD : public G4VSensitiveDetector { +public: /// Standard constructor - RichTbUpgradeSD(G4String ); + RichTbUpgradeSD(G4String); - virtual ~RichTbUpgradeSD( ); ///< Destructor - void Initialize(G4HCofThisEvent*HCE); + virtual ~RichTbUpgradeSD(); ///< Destructor + void Initialize(G4HCofThisEvent *HCE) override; - G4bool ProcessHits(G4Step*aStep,G4TouchableHistory*ROhist); - void EndOfEvent(G4HCofThisEvent*HCE); - void clear(); - void DrawAll(); - void PrintAll(); + G4bool ProcessHits(G4Step *aStep, G4TouchableHistory *ROhist) override; + void EndOfEvent(G4HCofThisEvent *HCE) override; + void clear() override; + void DrawAll() override; + void PrintAll() override; - G4int getCurrentHitCreationOption() - { - return CurrentHitCreationOption; - } - - -protected: + G4int getCurrentHitCreationOption() { return CurrentHitCreationOption; } +protected: private: - RichTbHitsCollection * RichTbHitCollection; - std::vector<G4int> PmtSDID; - G4int HCID; - G4int CurrentHitCreationOption; + RichTbHitsCollection *RichTbHitCollection; + std::vector<G4int> PmtSDID; + G4int HCID; + G4int CurrentHitCreationOption; G4double CurrentPmtPixelGap; G4int RichTbHitCollIndex; - G4String RichTbSensDetName; - - + G4String RichTbSensDetName; }; #endif // INCLUDE_RICHTBUPGRADESD_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeVessel.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeVessel.hh index 5f23a0fb8e06198a0d1d38928b491766c1a48e08..20cf09cb64b4b08fd1460d570b78510fd5bb0b3a 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeVessel.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUpgradeVessel.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBUPGRADEVESSEL_HH +#ifndef INCLUDE_RICHTBUPGRADEVESSEL_HH #define INCLUDE_RICHTBUPGRADEVESSEL_HH 1 // Include files @@ -10,7 +10,7 @@ #include "RichTbHall.hh" /** @class RichTbUpgradeVessel RichTbUpgradeVessel.hh include/RichTbUpgradeVessel.hh - * + * * * @author Sajan EASO * @date 2003-11-05 @@ -18,49 +18,28 @@ class RichTbUpgradeVessel { public: /// Standard constructor - RichTbUpgradeVessel(RichTbHall* rTbHall ); + RichTbUpgradeVessel(RichTbHall *rTbHall); - virtual ~RichTbUpgradeVessel( ); ///< Destructor + virtual ~RichTbUpgradeVessel(); ///< Destructor - void constructRichTbGasVessel(); - void constructRichTbUpgradeVesselEnvelope(); - - G4LogicalVolume* getRichTbGasVesselLVol() - { - return RichTbGasVesselLVol; - } - G4LogicalVolume* getRichTbUpgradeVesselEnvelopeBottomLVol() - { - return RichTbUpgradeVesselEnvelopeBottomLVol; - - } + void constructRichTbGasVessel(); + void constructRichTbUpgradeVesselEnvelope(); - G4VPhysicalVolume* getRichTbGasVesselPVol() - { - return RichTbGasVesselPVol; - } - G4VPhysicalVolume* getRichTbUpgradeVesselEnvelopeBottomPVol() - { - return RichTbUpgradeVesselEnvelopeBottomPVol; - } - RichTbHall* getaRTbHall() - { - return aRTbHall; - - } - -protected: + G4LogicalVolume *getRichTbGasVesselLVol() { return RichTbGasVesselLVol; } + G4LogicalVolume *getRichTbUpgradeVesselEnvelopeBottomLVol() { return RichTbUpgradeVesselEnvelopeBottomLVol; } + G4VPhysicalVolume *getRichTbGasVesselPVol() { return RichTbGasVesselPVol; } + G4VPhysicalVolume *getRichTbUpgradeVesselEnvelopeBottomPVol() { return RichTbUpgradeVesselEnvelopeBottomPVol; } + RichTbHall *getaRTbHall() { return aRTbHall; } + +protected: private: - RichTbHall* aRTbHall; - - G4LogicalVolume* RichTbGasVesselLVol; - G4LogicalVolume* RichTbUpgradeVesselEnvelopeBottomLVol; - + RichTbHall *aRTbHall; - G4VPhysicalVolume* RichTbGasVesselPVol; - G4VPhysicalVolume* RichTbUpgradeVesselEnvelopeBottomPVol; + G4LogicalVolume *RichTbGasVesselLVol; + G4LogicalVolume *RichTbUpgradeVesselEnvelopeBottomLVol; - + G4VPhysicalVolume *RichTbGasVesselPVol; + G4VPhysicalVolume *RichTbUpgradeVesselEnvelopeBottomPVol; }; #endif // INCLUDE_RICHTBUPGRADEVESSEL_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUserTrackInfo.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUserTrackInfo.hh index 872da0c6e6a4aa0c43ad21f587bea10c8c1f007b..fdd8ea3d21db6b80ff9eb50c7a3e4c2623cd0e6e 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUserTrackInfo.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbUserTrackInfo.hh @@ -1,5 +1,5 @@ // $Id: $ -#ifndef INCLUDE_RICHTBUSERTRACKINFO_HH +#ifndef INCLUDE_RICHTBUSERTRACKINFO_HH #define INCLUDE_RICHTBUSERTRACKINFO_HH 1 // Include files @@ -8,48 +8,40 @@ #include "RichTbPhotonInfo.hh" /** @class RichTbUserTrackInfo RichTbUserTrackInfo.hh include/RichTbUserTrackInfo.hh - * + * * * @author Sajan EASO * @date 2004-01-20 */ -class RichTbUserTrackInfo:public G4VUserTrackInformation { -public: +class RichTbUserTrackInfo : public G4VUserTrackInformation { +public: /// Standard constructor - RichTbUserTrackInfo( ); - RichTbUserTrackInfo(RichTbPhotonInfo* ); - RichTbUserTrackInfo(RichTbPEInfo* ); - - - virtual ~RichTbUserTrackInfo( ); ///< Destructor - - RichTbPhotonInfo* getRichTbPhotonInfo(){ return mRichTbPhotonInfo; } - void setRichTbPhotonInfo(RichTbPhotonInfo* aRichTbPhotonInfo) - {mRichTbPhotonInfo=aRichTbPhotonInfo;} - - RichTbPEInfo* getRichTbPEInfo(){ return mRichTbPEInfo;} - void setRichTbPEInfo(RichTbPEInfo* aRichTbPEInfo) - {mRichTbPEInfo=aRichTbPEInfo; } - - bool HasUserPhotonInfo(){return mHasUserPhotonInfo;} - void setUserPhotonInfo(bool abPhValue) {mHasUserPhotonInfo=abPhValue;} - - bool HasUserPEInfo(){return mHasUserPEInfo;} - void setUserPEInfo(bool abPeValue ) {mHasUserPEInfo = abPeValue;} - - virtual void Print () const {} - - - -protected: + RichTbUserTrackInfo(); + RichTbUserTrackInfo(RichTbPhotonInfo *); + RichTbUserTrackInfo(RichTbPEInfo *); + + virtual ~RichTbUserTrackInfo(); ///< Destructor + + RichTbPhotonInfo *getRichTbPhotonInfo() { return mRichTbPhotonInfo; } + void setRichTbPhotonInfo(RichTbPhotonInfo *aRichTbPhotonInfo) { mRichTbPhotonInfo = aRichTbPhotonInfo; } + + RichTbPEInfo *getRichTbPEInfo() { return mRichTbPEInfo; } + void setRichTbPEInfo(RichTbPEInfo *aRichTbPEInfo) { mRichTbPEInfo = aRichTbPEInfo; } + bool HasUserPhotonInfo() { return mHasUserPhotonInfo; } + void setUserPhotonInfo(bool abPhValue) { mHasUserPhotonInfo = abPhValue; } + + bool HasUserPEInfo() { return mHasUserPEInfo; } + void setUserPEInfo(bool abPeValue) { mHasUserPEInfo = abPeValue; } + + virtual void Print() const override {} + +protected: private: - RichTbPhotonInfo* mRichTbPhotonInfo; - RichTbPEInfo* mRichTbPEInfo; - + RichTbPhotonInfo *mRichTbPhotonInfo; + RichTbPEInfo *mRichTbPEInfo; + bool mHasUserPhotonInfo; bool mHasUserPEInfo; - - }; #endif // INCLUDE_RICHTBUSERTRACKINFO_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbVesselGeometryParameters.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbVesselGeometryParameters.hh index a0b9036a8b4bd9e6dfe1b43179efa3cc0d4807a5..e4feb3a7e87e281433513ba706926a1f097875d8 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbVesselGeometryParameters.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbVesselGeometryParameters.hh @@ -1,27 +1,27 @@ // $Id: $ -#ifndef INCLUDE_RICHTBVESSELGEOMETRYPARAMETERS_HH +#ifndef INCLUDE_RICHTBVESSELGEOMETRYPARAMETERS_HH #define INCLUDE_RICHTBVESSELGEOMETRYPARAMETERS_HH 1 // Include files /** @class RichTbVesselGeometryParameters RichTbVesselGeometryParameters.hh include/RichTbVesselGeometryParameters.hh - * + * * * @author Sajan EASO * @date 2003-10-21 */ // first for the overall vessel. -const G4double RichTbVesselXSize=1000.0*CLHEP::mm; -const G4double RichTbVesselYSize=600.0*CLHEP::mm; -const G4double RichTbVesselZSize=2000.0*CLHEP::mm; +const G4double RichTbVesselXSize = 1000.0 * CLHEP::mm; +const G4double RichTbVesselYSize = 600.0 * CLHEP::mm; +const G4double RichTbVesselZSize = 2000.0 * CLHEP::mm; // now for the boolean subtraction. /* -const G4double RichTbVesselUpsExternalPartXSize=500.0*CLHEP::mm; // for now assume it to be half way point. to be verified. -const G4double RichTbVesselUpsExternalPartZSize=1000.0*CLHEP::mm; -const G4double RichTbVesselUpsExternalPartYLargeSize=20000.0*CLHEP::mm; -const G4double RichTbVesselUpsExternalPartZLargeSize=20000.0*CLHEP::mm; +const G4double RichTbVesselUpsExternalPartXSize=500.0*CLHEP::mm; // for now assume it to be half way point. to be +verified. const G4double RichTbVesselUpsExternalPartZSize=1000.0*CLHEP::mm; const G4double +RichTbVesselUpsExternalPartYLargeSize=20000.0*CLHEP::mm; const G4double +RichTbVesselUpsExternalPartZLargeSize=20000.0*CLHEP::mm; const G4double RichTbVesselUpsExternalPartXShift=0.5*(RichTbVesselXSize-RichTbVesselUpsExternalPartXSize); const G4double RichTbVesselUpsExternalPartYShift=0.0*CLHEP::mm; @@ -30,40 +30,41 @@ const G4double RichTbVesselUpsExternalPartZShift=-0.5*RichTbVesselZSize+ */ // now for the location and rotation of the vessel -//const G4double RichTbVesselOriginShiftFromLeftEdgeX=250.0*CLHEP::mm; // for now assume middle part. to be verified. -//const G4double RichTbVesselOriginShiftFromFloorY=1300.0*CLHEP::mm; -const G4double RichTbVesselXRotation=0.0*CLHEP::rad; // for now in the following vessel Xrot is not used in Euler rotations since it is 0. -//const G4double RichTbVesselYRotation=0.4817*CLHEP::rad; -const G4double RichTbVesselYRotation=0.0*CLHEP::rad; +// const G4double RichTbVesselOriginShiftFromLeftEdgeX=250.0*CLHEP::mm; // for now assume middle part. to be verified. +// const G4double RichTbVesselOriginShiftFromFloorY=1300.0*CLHEP::mm; +const G4double RichTbVesselXRotation = + 0.0 * CLHEP::rad; // for now in the following vessel Xrot is not used in Euler rotations since it is 0. +// const G4double RichTbVesselYRotation=0.4817*CLHEP::rad; +const G4double RichTbVesselYRotation = 0.0 * CLHEP::rad; const G4double RichTbVesselYLocation = 0; -//const G4double RichTbVesselXShiftAlongVessel = RichTbVesselOriginShiftFromLeftEdgeX - 0.5 * RichTbVesselXSize; -//const G4double RichTbVesselZShiftAlongVessel = -RichTbVesselUpsExternalPartZSize + 0.5 * RichTbVesselZSize; +// const G4double RichTbVesselXShiftAlongVessel = RichTbVesselOriginShiftFromLeftEdgeX - 0.5 * RichTbVesselXSize; +// const G4double RichTbVesselZShiftAlongVessel = -RichTbVesselUpsExternalPartZSize + 0.5 * RichTbVesselZSize; // X and Y location shifts in the global frame using Euler rotation wrt the Y axis. -//const G4double RichTbVesselXLocation= RichTbVesselXShiftAlongVessel*cos(RichTbVesselYRotation)+ +// const G4double RichTbVesselXLocation= RichTbVesselXShiftAlongVessel*cos(RichTbVesselYRotation)+ // RichTbVesselZShiftAlongVessel*sin(RichTbVesselYRotation); -//const G4double RichTbVesselZLocation=-RichTbVesselXShiftAlongVessel*sin(RichTbVesselYRotation)+ +// const G4double RichTbVesselZLocation=-RichTbVesselXShiftAlongVessel*sin(RichTbVesselYRotation)+ // RichTbVesselZShiftAlongVessel*cos(RichTbVesselYRotation); const G4double RichTbVesselXLocation = 0; const G4double RichTbVesselZLocation = 0; // now for variables used after creating the geometry in stepaction. -const G4double RichTbVesselEnvPlateThickness=0.0*CLHEP::mm; +const G4double RichTbVesselEnvPlateThickness = 0.0 * CLHEP::mm; // the following are not exact values. -const G4double RichTbVesselXNegExtremeAlongVessel=- 0.5 * RichTbVesselXSize; -const G4double RichTbVesselXPosExtremeAlongVessel= +0.5 * RichTbVesselXSize; -const G4double RichTbVesselZUpsExtremeAlongVessel= - 0.5 * RichTbVesselZSize; -const G4double RichTbVesselZDnsExtremeAlongVessel= +0.5 * RichTbVesselZSize; -const G4double RichTbVesselXNegExtreme= RichTbVesselXNegExtremeAlongVessel*cos(RichTbVesselYRotation)+ - RichTbVesselZDnsExtremeAlongVessel*sin(RichTbVesselYRotation); -const G4double RichTbVesselXPosExtreme= RichTbVesselXPosExtremeAlongVessel*cos(RichTbVesselYRotation)+ - RichTbVesselZUpsExtremeAlongVessel*sin(RichTbVesselYRotation); +const G4double RichTbVesselXNegExtremeAlongVessel = -0.5 * RichTbVesselXSize; +const G4double RichTbVesselXPosExtremeAlongVessel = +0.5 * RichTbVesselXSize; +const G4double RichTbVesselZUpsExtremeAlongVessel = -0.5 * RichTbVesselZSize; +const G4double RichTbVesselZDnsExtremeAlongVessel = +0.5 * RichTbVesselZSize; +const G4double RichTbVesselXNegExtreme = RichTbVesselXNegExtremeAlongVessel * cos(RichTbVesselYRotation) + + RichTbVesselZDnsExtremeAlongVessel * sin(RichTbVesselYRotation); +const G4double RichTbVesselXPosExtreme = RichTbVesselXPosExtremeAlongVessel * cos(RichTbVesselYRotation) + + RichTbVesselZUpsExtremeAlongVessel * sin(RichTbVesselYRotation); -const G4double RichTbVesselYNegExtreme= RichTbVesselYLocation-0.5*RichTbVesselYSize; -const G4double RichTbVesselYPosExtreme= RichTbVesselYLocation+0.5*RichTbVesselYSize; -const G4double RichTbVesselZDnsExtreme = -RichTbVesselXNegExtremeAlongVessel*sin(RichTbVesselYRotation)+ - RichTbVesselZDnsExtremeAlongVessel*cos(RichTbVesselYRotation); -const G4double RichTbVesselDnsZEnd = RichTbVesselZDnsExtreme; +const G4double RichTbVesselYNegExtreme = RichTbVesselYLocation - 0.5 * RichTbVesselYSize; +const G4double RichTbVesselYPosExtreme = RichTbVesselYLocation + 0.5 * RichTbVesselYSize; +const G4double RichTbVesselZDnsExtreme = -RichTbVesselXNegExtremeAlongVessel * sin(RichTbVesselYRotation) + + RichTbVesselZDnsExtremeAlongVessel * cos(RichTbVesselYRotation); +const G4double RichTbVesselDnsZEnd = RichTbVesselZDnsExtreme; #endif // INCLUDE_RICHTBVESSELGEOMETRYPARAMETERS_HH diff --git a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbVisManager.hh b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbVisManager.hh index 565cd214f56f967919254e7c4fd915e075713d2e..b1c6725ceb5de0f685035ef9961f095feb84d5e6 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/include/RichTbVisManager.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/include/RichTbVisManager.hh @@ -21,21 +21,18 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -class RichTbVisManager:public G4VisManager { - - public: +class RichTbVisManager : public G4VisManager { +public: // RichTbVisManager(); - virtual ~ RichTbVisManager(); - static RichTbVisManager* getRichTbVisManagerInstance(); - - private: + virtual ~RichTbVisManager(); + static RichTbVisManager *getRichTbVisManagerInstance(); - RichTbVisManager(); - void RegisterGraphicsSystems(); +private: + RichTbVisManager(); + void RegisterGraphicsSystems() override; - static RichTbVisManager* RichTbVisManagerInstance; - + static RichTbVisManager *RichTbVisManagerInstance; }; #endif diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/includeG4/RichTbG4Cerenkov.hh b/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/includeG4/RichTbG4Cerenkov.hh index 2ff7adb838fd5cf69a70bd003e0880dd77e2fae6..e9acc05e944e77eb7478b7929fe34c0524aab15a 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/includeG4/RichTbG4Cerenkov.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/includeG4/RichTbG4Cerenkov.hh @@ -24,12 +24,12 @@ // $Id: RichTbG4Cerenkov.hh,v 1.5 2001/07/11 10:03:41 gunter Exp $ // GEANT4 tag $Name: geant4-07-00 $ // -// +// //////////////////////////////////////////////////////////////////////// -// Cerenkov Radiation Class Definition +// Cerenkov Radiation Class Definition //////////////////////////////////////////////////////////////////////// // -// File: RichTbG4Cerenkov.hh +// File: RichTbG4Cerenkov.hh // Description: Continuous Process -- Generation of Cerenkov Photons // Version: 2.0 // Created: 1996-02-21 @@ -72,135 +72,107 @@ // Class Definition ///////////////////// -class RichTbG4Cerenkov : public G4VContinuousProcess -{ +class RichTbG4Cerenkov : public G4VContinuousProcess { private: + ////////////// + // Operators + ////////////// - ////////////// - // Operators - ////////////// - - // RichTbG4Cerenkov& operator=(const RichTbG4Cerenkov &right); + // RichTbG4Cerenkov& operator=(const RichTbG4Cerenkov &right); public: // Without description + //////////////////////////////// + // Constructors and Destructor + //////////////////////////////// - //////////////////////////////// - // Constructors and Destructor - //////////////////////////////// + RichTbG4Cerenkov(const G4String &processName = "Cerenkov"); - RichTbG4Cerenkov(const G4String& processName = "Cerenkov"); + // RichTbG4Cerenkov(const RichTbG4Cerenkov &right); - // RichTbG4Cerenkov(const RichTbG4Cerenkov &right); + ~RichTbG4Cerenkov(); - ~RichTbG4Cerenkov(); - - //////////// - // Methods - //////////// + //////////// + // Methods + //////////// public: // With description + G4bool IsApplicable(const G4ParticleDefinition &aParticleType) override; + // Returns true -> 'is applicable', for all charged particles. - G4bool IsApplicable(const G4ParticleDefinition& aParticleType); - // Returns true -> 'is applicable', for all charged particles. - - G4double GetContinuousStepLimit(const G4Track& aTrack, - G4double , - G4double , - G4double& ); - // Returns the continuous step limit defined by the Cerenkov - // process. - - G4VParticleChange* AlongStepDoIt(const G4Track& aTrack, - const G4Step& aStep); - // This is the method implementing the Cerenkov process. - - void SetTrackSecondariesFirst(const G4bool state); - // If set, the primary particle tracking is interrupted and any - // produced Cerenkov photons are tracked next. When all have - // been tracked, the tracking of the primary resumes. - - void SetMaxNumPhotonsPerStep(const G4int NumPhotons); - // Set the maximum number of Cerenkov photons allowed to be - // generated during a tracking step. This is an average ONLY; - // the actual number will vary around this average. If invoked, - // the maximum photon stack will roughly be of the size set. - // If not called, the step is not limited by the number of - // photons generated. - - G4PhysicsTable* GetPhysicsTable() const; - // Returns the address of the physics table. - - void DumpPhysicsTable() const; - // Prints the physics table. + G4double GetContinuousStepLimit(const G4Track &aTrack, G4double, G4double, G4double &) override; + // Returns the continuous step limit defined by the Cerenkov + // process. -private: + G4VParticleChange *AlongStepDoIt(const G4Track &aTrack, const G4Step &aStep) override; + // This is the method implementing the Cerenkov process. - void BuildThePhysicsTable(); + void SetTrackSecondariesFirst(const G4bool state); + // If set, the primary particle tracking is interrupted and any + // produced Cerenkov photons are tracked next. When all have + // been tracked, the tracking of the primary resumes. - ///////////////////// - // Helper Functions - ///////////////////// + void SetMaxNumPhotonsPerStep(const G4int NumPhotons); + // Set the maximum number of Cerenkov photons allowed to be + // generated during a tracking step. This is an average ONLY; + // the actual number will vary around this average. If invoked, + // the maximum photon stack will roughly be of the size set. + // If not called, the step is not limited by the number of + // photons generated. - G4double GetAverageNumberOfPhotons(const G4DynamicParticle *aParticle, - const G4Material *aMaterial, - G4MaterialPropertyVector* Rindex) const; + G4PhysicsTable *GetPhysicsTable() const; + // Returns the address of the physics table. - /////////////////////// - // Class Data Members - /////////////////////// + void DumpPhysicsTable() const; + // Prints the physics table. -protected: +private: + void BuildThePhysicsTable(); - G4PhysicsTable* thePhysicsTable; - // A Physics Table can be either a cross-sections table or - // an energy table (or can be used for other specific - // purposes). + ///////////////////// + // Helper Functions + ///////////////////// -private: + G4double GetAverageNumberOfPhotons(const G4DynamicParticle *aParticle, const G4Material *aMaterial, + G4MaterialPropertyVector *Rindex) const; + + /////////////////////// + // Class Data Members + /////////////////////// - G4bool fTrackSecondariesFirst; - G4int fMaxPhotons; +protected: + G4PhysicsTable *thePhysicsTable; + // A Physics Table can be either a cross-sections table or + // an energy table (or can be used for other specific + // purposes). + +private: + G4bool fTrackSecondariesFirst; + G4int fMaxPhotons; }; //////////////////// // Inline methods //////////////////// -inline -G4bool RichTbG4Cerenkov::IsApplicable(const G4ParticleDefinition& aParticleType) -{ - return (aParticleType.GetPDGCharge() != 0); +inline G4bool RichTbG4Cerenkov::IsApplicable(const G4ParticleDefinition &aParticleType) { + return (aParticleType.GetPDGCharge() != 0); } -inline -void RichTbG4Cerenkov::SetTrackSecondariesFirst(const G4bool state) -{ - fTrackSecondariesFirst = state; -} +inline void RichTbG4Cerenkov::SetTrackSecondariesFirst(const G4bool state) { fTrackSecondariesFirst = state; } -inline -void RichTbG4Cerenkov::SetMaxNumPhotonsPerStep(const G4int NumPhotons) -{ - fMaxPhotons = NumPhotons; -} +inline void RichTbG4Cerenkov::SetMaxNumPhotonsPerStep(const G4int NumPhotons) { fMaxPhotons = NumPhotons; } -inline -void RichTbG4Cerenkov::DumpPhysicsTable() const -{ - G4int PhysicsTableSize = thePhysicsTable->entries(); - G4PhysicsOrderedFreeVector *v; - - for (G4int i = 0 ; i < PhysicsTableSize ; i++ ) - { - v = (G4PhysicsOrderedFreeVector*)(*thePhysicsTable)[i]; - v->DumpValues(); - } -} +inline void RichTbG4Cerenkov::DumpPhysicsTable() const { + G4int PhysicsTableSize = thePhysicsTable->entries(); + G4PhysicsOrderedFreeVector *v; -inline G4PhysicsTable* RichTbG4Cerenkov::GetPhysicsTable() const -{ - return thePhysicsTable; + for (G4int i = 0; i < PhysicsTableSize; i++) { + v = (G4PhysicsOrderedFreeVector *)(*thePhysicsTable)[i]; + v->DumpValues(); + } } +inline G4PhysicsTable *RichTbG4Cerenkov::GetPhysicsTable() const { return thePhysicsTable; } + #endif /* RichTbG4Cerenkov_h */ diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/includeG4/RichTbG4OpAbsorption.hh b/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/includeG4/RichTbG4OpAbsorption.hh index 8b9173d371840f8f2f2f9734e7a47d476a115122..757db8e2880e4b411584a549a9be30c4176365ca 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/includeG4/RichTbG4OpAbsorption.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/includeG4/RichTbG4OpAbsorption.hh @@ -68,59 +68,49 @@ // Class Definition ///////////////////// -class RichTbG4OpAbsorption : public G4VDiscreteProcess -{ +class RichTbG4OpAbsorption : public G4VDiscreteProcess { private: + ////////////// + // Operators + ////////////// - ////////////// - // Operators - ////////////// - - // RichTbG4OpAbsorption& operator=(const RichTbG4OpAbsorption &right); + // RichTbG4OpAbsorption& operator=(const RichTbG4OpAbsorption &right); public: // Without description + //////////////////////////////// + // Constructors and Destructor + //////////////////////////////// - //////////////////////////////// - // Constructors and Destructor - //////////////////////////////// - - RichTbG4OpAbsorption(const G4String& processName = "OpAbsorption"); + RichTbG4OpAbsorption(const G4String &processName = "OpAbsorption"); - // RichTbG4OpAbsorption(const RichTbG4OpAbsorption &right); + // RichTbG4OpAbsorption(const RichTbG4OpAbsorption &right); - ~RichTbG4OpAbsorption(); + ~RichTbG4OpAbsorption(); - //////////// - // Methods - //////////// + //////////// + // Methods + //////////// public: // With description + G4bool IsApplicable(const G4ParticleDefinition &aParticleType) override; + // Returns true -> 'is applicable' only for an optical photon. - G4bool IsApplicable(const G4ParticleDefinition& aParticleType); - // Returns true -> 'is applicable' only for an optical photon. - - G4double GetMeanFreePath(const G4Track& aTrack, - G4double , - G4ForceCondition* ); - // Returns the absorption length for bulk absorption of optical - // photons in media with a specified attenuation length. - - G4VParticleChange* PostStepDoIt(const G4Track& aTrack, - const G4Step& aStep); - // This is the method implementing bulk absorption of optical - // photons. + G4double GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *) override; + // Returns the absorption length for bulk absorption of optical + // photons in media with a specified attenuation length. + G4VParticleChange *PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override; + // This is the method implementing bulk absorption of optical + // photons. }; //////////////////// // Inline methods //////////////////// -inline -G4bool RichTbG4OpAbsorption::IsApplicable(const G4ParticleDefinition& aParticleType) -{ - return ( &aParticleType == G4OpticalPhoton::OpticalPhoton() ); +inline G4bool RichTbG4OpAbsorption::IsApplicable(const G4ParticleDefinition &aParticleType) { + return (&aParticleType == G4OpticalPhoton::OpticalPhoton()); } #endif /* RichTbG4OpAbsorption_h */ diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/includeG4/RichTbG4OpBoundaryProcess.hh b/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/includeG4/RichTbG4OpBoundaryProcess.hh index a5b43bb9f53fe9204f2cb37d58a8d41638d883e4..b1956a78dd12fc979c30d681bfcf0c17ce90d611 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/includeG4/RichTbG4OpBoundaryProcess.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/includeG4/RichTbG4OpBoundaryProcess.hh @@ -24,7 +24,7 @@ // $Id: RichTbG4OpBoundaryProcess.hh,v 1.12 2004/12/02 23:10:36 gum Exp $ // GEANT4 tag $Name: geant4-07-00 $ // -// +// //////////////////////////////////////////////////////////////////////// // Optical Photon Boundary Process Class Definition //////////////////////////////////////////////////////////////////////// @@ -35,9 +35,9 @@ // Version: 1.1 // Created: 1997-06-18 // Modified: 1999-10-29 add method and class descriptors -// 1999-10-10 - Fill NewMomentum/NewPolarization in +// 1999-10-10 - Fill NewMomentum/NewPolarization in // DoAbsorption. These members need to be -// filled since DoIt calls +// filled since DoIt calls // aParticleChange.SetMomentumChange etc. // upon return (thanks to: Clark McGrew) // @@ -45,7 +45,7 @@ // adopted from work by Werner Keil - April 2/96 // mail: gum@triumf.ca // modified and renamed to adapt to the RICH testbeam. SE 1-3-2005. -// CVS version tag: +// CVS version tag: //////////////////////////////////////////////////////////////////////// #ifndef RichTbG4OpBoundaryProcess_h @@ -71,147 +71,144 @@ // Class Description: // Discrete Process -- reflection/refraction at optical interfaces. -// Class inherits publicly from G4VDiscreteProcess. -// Class Description - End: +// Class inherits publicly from G4VDiscreteProcess. +// Class Description - End: ///////////////////// // Class Definition ///////////////////// -enum RichTbG4OpBoundaryProcessStatus { Undefined, - FresnelRefraction, FresnelReflection, - TotalInternalReflection, - LambertianReflection, LobeReflection, - SpikeReflection, BackScattering, - Absorption, Detection, NotAtBoundary, - SameMaterial, StepTooSmall, NoRINDEX }; +enum RichTbG4OpBoundaryProcessStatus { + Undefined, + FresnelRefraction, + FresnelReflection, + TotalInternalReflection, + LambertianReflection, + LobeReflection, + SpikeReflection, + BackScattering, + Absorption, + Detection, + NotAtBoundary, + SameMaterial, + StepTooSmall, + NoRINDEX +}; -class RichTbG4OpBoundaryProcess : public G4VDiscreteProcess -{ +class RichTbG4OpBoundaryProcess : public G4VDiscreteProcess { private: + ////////////// + // Operators + ////////////// - ////////////// - // Operators - ////////////// - - // RichTbG4OpBoundaryProcess& operator=(const RichTbG4OpBoundaryProcess &right); + // RichTbG4OpBoundaryProcess& operator=(const RichTbG4OpBoundaryProcess &right); - // RichTbG4OpBoundaryProcess(const RichTbG4OpBoundaryProcess &right); + // RichTbG4OpBoundaryProcess(const RichTbG4OpBoundaryProcess &right); public: // Without description + //////////////////////////////// + // Constructors and Destructor + //////////////////////////////// - //////////////////////////////// - // Constructors and Destructor - //////////////////////////////// + RichTbG4OpBoundaryProcess(const G4String &processName = "OpBoundary"); - RichTbG4OpBoundaryProcess(const G4String& processName = "OpBoundary"); + ~RichTbG4OpBoundaryProcess(); - ~RichTbG4OpBoundaryProcess(); - - //////////// - // Methods - //////////// + //////////// + // Methods + //////////// public: // With description + G4bool IsApplicable(const G4ParticleDefinition &aParticleType) override; + // Returns true -> 'is applicable' only for an optical photon. - G4bool IsApplicable(const G4ParticleDefinition& aParticleType); - // Returns true -> 'is applicable' only for an optical photon. - - G4double GetMeanFreePath(const G4Track& , - G4double , - G4ForceCondition* condition); - // Returns infinity; i. e. the process does not limit the step, - // but sets the 'Forced' condition for the DoIt to be invoked at - // every step. However, only at a boundary will any action be - // taken. + G4double GetMeanFreePath(const G4Track &, G4double, G4ForceCondition *condition) override; + // Returns infinity; i. e. the process does not limit the step, + // but sets the 'Forced' condition for the DoIt to be invoked at + // every step. However, only at a boundary will any action be + // taken. - G4VParticleChange* PostStepDoIt(const G4Track& aTrack, - const G4Step& aStep); - // This is the method implementing boundary processes. + G4VParticleChange *PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override; + // This is the method implementing boundary processes. - G4OpticalSurfaceModel GetModel() const; - // Returns the optical surface mode. + G4OpticalSurfaceModel GetModel() const; + // Returns the optical surface mode. - RichTbG4OpBoundaryProcessStatus GetStatus() const; - // Returns the current status. + RichTbG4OpBoundaryProcessStatus GetStatus() const; + // Returns the current status. - void SetModel(G4OpticalSurfaceModel model); - // Set the optical surface model to be followed - // (glisur || unified). + void SetModel(G4OpticalSurfaceModel model); + // Set the optical surface model to be followed + // (glisur || unified). private: + void G4Swap(G4double *a, G4double *b) const; - void G4Swap(G4double* a, G4double* b) const; + void G4Swap(G4Material *a, G4Material *b) const; - void G4Swap(G4Material* a, G4Material* b) const; + void G4VectorSwap(G4ThreeVector *vec1, G4ThreeVector *vec2) const; - void G4VectorSwap(G4ThreeVector* vec1, G4ThreeVector* vec2) const; + G4bool G4BooleanRand(const G4double prob) const; - G4bool G4BooleanRand(const G4double prob) const; + G4ThreeVector G4IsotropicRand() const; - G4ThreeVector G4IsotropicRand() const; + G4ThreeVector G4LambertianRand(const G4ThreeVector &normal); - G4ThreeVector G4LambertianRand(const G4ThreeVector& normal); + G4ThreeVector G4PlaneVectorRand(const G4ThreeVector &normal) const; - G4ThreeVector G4PlaneVectorRand(const G4ThreeVector& normal) const; + G4ThreeVector GetFacetNormal(const G4ThreeVector &Momentum, const G4ThreeVector &Normal) const; - G4ThreeVector GetFacetNormal(const G4ThreeVector& Momentum, - const G4ThreeVector& Normal) const; + void DielectricMetal(); + void DielectricDielectric(); - void DielectricMetal(); - void DielectricDielectric(); - - void ChooseReflection(); - void DoAbsorption(); - void DoReflection(); + void ChooseReflection(); + void DoAbsorption(); + void DoReflection(); private: + G4double thePhotonMomentum; - G4double thePhotonMomentum; - - G4ThreeVector OldMomentum; - G4ThreeVector OldPolarization; + G4ThreeVector OldMomentum; + G4ThreeVector OldPolarization; - G4ThreeVector NewMomentum; - G4ThreeVector NewPolarization; + G4ThreeVector NewMomentum; + G4ThreeVector NewPolarization; - G4ThreeVector theGlobalNormal; - G4ThreeVector theFacetNormal; + G4ThreeVector theGlobalNormal; + G4ThreeVector theFacetNormal; - G4Material* Material1; - G4Material* Material2; + G4Material *Material1; + G4Material *Material2; - G4OpticalSurface* OpticalSurface; + G4OpticalSurface *OpticalSurface; - G4double Rindex1; - G4double Rindex2; + G4double Rindex1; + G4double Rindex2; - G4double cost1, cost2, sint1, sint2; + G4double cost1, cost2, sint1, sint2; - RichTbG4OpBoundaryProcessStatus theStatus; + RichTbG4OpBoundaryProcessStatus theStatus; - G4OpticalSurfaceModel theModel; + G4OpticalSurfaceModel theModel; - G4OpticalSurfaceFinish theFinish; + G4OpticalSurfaceFinish theFinish; - G4double theReflectivity; - G4double theEfficiency; - G4double prob_sl, prob_ss, prob_bs; + G4double theReflectivity; + G4double theEfficiency; + G4double prob_sl, prob_ss, prob_bs; - G4int CurStepNum; - G4int theMaxPhotStepNumInBoundaryProc; + G4int CurStepNum; + G4int theMaxPhotStepNumInBoundaryProc; }; //////////////////// // Inline methods //////////////////// -inline -void RichTbG4OpBoundaryProcess::G4Swap(G4double* a, G4double* b) const -{ - // swaps the contents of the objects pointed - // to by 'a' and 'b'! +inline void RichTbG4OpBoundaryProcess::G4Swap(G4double *a, G4double *b) const { + // swaps the contents of the objects pointed + // to by 'a' and 'b'! G4double temp; @@ -220,24 +217,19 @@ void RichTbG4OpBoundaryProcess::G4Swap(G4double* a, G4double* b) const *b = temp; } -inline -void RichTbG4OpBoundaryProcess::G4Swap(G4Material* a, G4Material* b) const -{ - // ONLY swaps the pointers; i.e. what used to be pointed - // to by 'a' is now pointed to by 'b' and vice versa! +inline void RichTbG4OpBoundaryProcess::G4Swap(G4Material *a, G4Material *b) const { + // ONLY swaps the pointers; i.e. what used to be pointed + // to by 'a' is now pointed to by 'b' and vice versa! - G4Material* temp = a; + G4Material *temp = a; - a = b; - b = temp; + a = b; + b = temp; } -inline -void RichTbG4OpBoundaryProcess::G4VectorSwap(G4ThreeVector* vec1, - G4ThreeVector* vec2) const -{ - // swaps the contents of the objects pointed - // to by 'vec1' and 'vec2'! +inline void RichTbG4OpBoundaryProcess::G4VectorSwap(G4ThreeVector *vec1, G4ThreeVector *vec2) const { + // swaps the contents of the objects pointed + // to by 'vec1' and 'vec2'! G4ThreeVector temp; @@ -246,17 +238,13 @@ void RichTbG4OpBoundaryProcess::G4VectorSwap(G4ThreeVector* vec1, *vec2 = temp; } -inline -G4bool RichTbG4OpBoundaryProcess::G4BooleanRand(const G4double prob) const -{ +inline G4bool RichTbG4OpBoundaryProcess::G4BooleanRand(const G4double prob) const { /* Returns a random boolean variable with the specified probability */ return (G4UniformRand() < prob); } -inline -G4ThreeVector RichTbG4OpBoundaryProcess::G4IsotropicRand() const -{ +inline G4ThreeVector RichTbG4OpBoundaryProcess::G4IsotropicRand() const { /* Returns a random isotropic unit vector. */ G4ThreeVector vect; @@ -275,10 +263,7 @@ G4ThreeVector RichTbG4OpBoundaryProcess::G4IsotropicRand() const return vect.unit(); } -inline -G4ThreeVector RichTbG4OpBoundaryProcess:: - G4LambertianRand(const G4ThreeVector& normal) -{ +inline G4ThreeVector RichTbG4OpBoundaryProcess::G4LambertianRand(const G4ThreeVector &normal) { /* Returns a random lambertian unit vector. */ G4ThreeVector vect; @@ -298,119 +283,87 @@ G4ThreeVector RichTbG4OpBoundaryProcess:: return vect; } -inline -G4ThreeVector RichTbG4OpBoundaryProcess:: - G4PlaneVectorRand(const G4ThreeVector& normal) const +inline G4ThreeVector RichTbG4OpBoundaryProcess::G4PlaneVectorRand(const G4ThreeVector &normal) const - /* This function chooses a random vector within a plane given - by the unit normal */ +/* This function chooses a random vector within a plane given + by the unit normal */ { G4ThreeVector vec1 = normal.orthogonal(); G4ThreeVector vec2 = vec1.cross(normal); - G4double phi = CLHEP::twopi*G4UniformRand(); + G4double phi = CLHEP::twopi * G4UniformRand(); G4double cosphi = std::cos(phi); G4double sinphi = std::sin(phi); return cosphi * vec1 + sinphi * vec2; } -inline -G4bool RichTbG4OpBoundaryProcess::IsApplicable(const G4ParticleDefinition& - aParticleType) -{ - return ( &aParticleType == G4OpticalPhoton::OpticalPhoton() ); +inline G4bool RichTbG4OpBoundaryProcess::IsApplicable(const G4ParticleDefinition &aParticleType) { + return (&aParticleType == G4OpticalPhoton::OpticalPhoton()); } -inline -G4OpticalSurfaceModel RichTbG4OpBoundaryProcess::GetModel() const -{ - return theModel; -} +inline G4OpticalSurfaceModel RichTbG4OpBoundaryProcess::GetModel() const { return theModel; } -inline -RichTbG4OpBoundaryProcessStatus RichTbG4OpBoundaryProcess::GetStatus() const -{ - return theStatus; -} +inline RichTbG4OpBoundaryProcessStatus RichTbG4OpBoundaryProcess::GetStatus() const { return theStatus; } -inline -void RichTbG4OpBoundaryProcess::SetModel(G4OpticalSurfaceModel model) -{ - theModel = model; -} +inline void RichTbG4OpBoundaryProcess::SetModel(G4OpticalSurfaceModel model) { theModel = model; } -inline -void RichTbG4OpBoundaryProcess::ChooseReflection() -{ - G4double rand = G4UniformRand(); - if ( rand >= 0.0 && rand < prob_ss ) { - theStatus = SpikeReflection; - theFacetNormal = theGlobalNormal; - } - else if ( rand >= prob_ss && - rand <= prob_ss+prob_sl) { - theStatus = LobeReflection; - } - else if ( rand > prob_ss+prob_sl && - rand < prob_ss+prob_sl+prob_bs ) { - theStatus = BackScattering; - } - else { - theStatus = LambertianReflection; - } +inline void RichTbG4OpBoundaryProcess::ChooseReflection() { + G4double rand = G4UniformRand(); + if (rand >= 0.0 && rand < prob_ss) { + theStatus = SpikeReflection; + theFacetNormal = theGlobalNormal; + } else if (rand >= prob_ss && rand <= prob_ss + prob_sl) { + theStatus = LobeReflection; + } else if (rand > prob_ss + prob_sl && rand < prob_ss + prob_sl + prob_bs) { + theStatus = BackScattering; + } else { + theStatus = LambertianReflection; + } } -inline -void RichTbG4OpBoundaryProcess::DoAbsorption() -{ - theStatus = Absorption; - - if ( G4BooleanRand(theEfficiency) ) { - - // EnergyDeposited =/= 0 means: photon has been detected - theStatus = Detection; - aParticleChange.ProposeLocalEnergyDeposit(thePhotonMomentum); - } - else { - aParticleChange.ProposeLocalEnergyDeposit(0.0); - } - - NewMomentum = OldMomentum; - NewPolarization = OldPolarization; - - // aParticleChange.ProposeEnergy(0.0); - aParticleChange.ProposeTrackStatus(fStopAndKill); -} +inline void RichTbG4OpBoundaryProcess::DoAbsorption() { + theStatus = Absorption; -inline -void RichTbG4OpBoundaryProcess::DoReflection() -{ - if ( theStatus == LambertianReflection ) { + if (G4BooleanRand(theEfficiency)) { + + // EnergyDeposited =/= 0 means: photon has been detected + theStatus = Detection; + aParticleChange.ProposeLocalEnergyDeposit(thePhotonMomentum); + } else { + aParticleChange.ProposeLocalEnergyDeposit(0.0); + } + + NewMomentum = OldMomentum; + NewPolarization = OldPolarization; + + // aParticleChange.ProposeEnergy(0.0); + aParticleChange.ProposeTrackStatus(fStopAndKill); +} - NewMomentum = G4LambertianRand(theGlobalNormal); - theFacetNormal = (NewMomentum - OldMomentum).unit(); +inline void RichTbG4OpBoundaryProcess::DoReflection() { + if (theStatus == LambertianReflection) { - } - else if ( theFinish == ground ) { + NewMomentum = G4LambertianRand(theGlobalNormal); + theFacetNormal = (NewMomentum - OldMomentum).unit(); - theStatus = LobeReflection; - theFacetNormal = GetFacetNormal(OldMomentum,theGlobalNormal); - G4double PdotN = OldMomentum * theFacetNormal; - NewMomentum = OldMomentum - (2.*PdotN)*theFacetNormal; + } else if (theFinish == ground) { - } - else { + theStatus = LobeReflection; + theFacetNormal = GetFacetNormal(OldMomentum, theGlobalNormal); + G4double PdotN = OldMomentum * theFacetNormal; + NewMomentum = OldMomentum - (2. * PdotN) * theFacetNormal; - theStatus = SpikeReflection; - theFacetNormal = theGlobalNormal; - G4double PdotN = OldMomentum * theFacetNormal; - NewMomentum = OldMomentum - (2.*PdotN)*theFacetNormal; + } else { - } - G4double EdotN = OldPolarization * theFacetNormal; - NewPolarization = -OldPolarization + (2.*EdotN)*theFacetNormal; + theStatus = SpikeReflection; + theFacetNormal = theGlobalNormal; + G4double PdotN = OldMomentum * theFacetNormal; + NewMomentum = OldMomentum - (2. * PdotN) * theFacetNormal; + } + G4double EdotN = OldPolarization * theFacetNormal; + NewPolarization = -OldPolarization + (2. * EdotN) * theFacetNormal; } #endif /* RichTbG4OpBoundaryProcess_h */ diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/includeG4/RichTbG4OpRayleigh.hh b/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/includeG4/RichTbG4OpRayleigh.hh index 8843630ecc62293d381bb7bb549c89ff60e779ec..ca6b3dea48c911955bec6c7527bdcbaea4510709 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/includeG4/RichTbG4OpRayleigh.hh +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/includeG4/RichTbG4OpRayleigh.hh @@ -24,13 +24,13 @@ // $Id: RichTbG4OpRayleigh.hh,v 1.7 2004/04/27 00:26:34 gum Exp $ // GEANT4 tag $Name: geant4-07-00 $ // -// +// //////////////////////////////////////////////////////////////////////// // Optical Photon Rayleigh Scattering Class Definition //////////////////////////////////////////////////////////////////////// // // File: RichTbG4OpRayleigh.hh -// Description: Discrete Process -- Rayleigh scattering of optical photons +// Description: Discrete Process -- Rayleigh scattering of optical photons // Version: 1.0 // Created: 1996-05-31 // Author: Juliet Armstrong @@ -70,110 +70,90 @@ // Class Definition ///////////////////// -class RichTbG4OpRayleigh : public G4VDiscreteProcess -{ +class RichTbG4OpRayleigh : public G4VDiscreteProcess { private: - - ////////////// - // Operators - ////////////// + ////////////// + // Operators + ////////////// - // RichTbG4OpRayleigh& operator=(const RichTbG4OpRayleigh &right); + // RichTbG4OpRayleigh& operator=(const RichTbG4OpRayleigh &right); public: // Without description + //////////////////////////////// + // Constructors and Destructor + //////////////////////////////// - //////////////////////////////// - // Constructors and Destructor - //////////////////////////////// - - RichTbG4OpRayleigh(const G4String& processName = "OpRayleigh"); + RichTbG4OpRayleigh(const G4String &processName = "OpRayleigh"); - // RichTbG4OpRayleigh(const RichTbG4OpRayleigh &right); + // RichTbG4OpRayleigh(const RichTbG4OpRayleigh &right); - ~RichTbG4OpRayleigh(); + ~RichTbG4OpRayleigh(); - //////////// - // Methods - //////////// + //////////// + // Methods + //////////// public: // With description + G4bool IsApplicable(const G4ParticleDefinition &aParticleType) override; + // Returns true -> 'is applicable' only for an optical photon. - G4bool IsApplicable(const G4ParticleDefinition& aParticleType); - // Returns true -> 'is applicable' only for an optical photon. - - G4double GetMeanFreePath(const G4Track& aTrack, - G4double , - G4ForceCondition* ); - // Returns the mean free path for Rayleigh scattering in water. - // --- Not yet implemented for other materials! --- + G4double GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *) override; + // Returns the mean free path for Rayleigh scattering in water. + // --- Not yet implemented for other materials! --- - G4VParticleChange* PostStepDoIt(const G4Track& aTrack, - const G4Step& aStep); - // This is the method implementing Rayleigh scattering. + G4VParticleChange *PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override; + // This is the method implementing Rayleigh scattering. - G4PhysicsTable* GetPhysicsTable() const; - // Returns the address of the physics table. + G4PhysicsTable *GetPhysicsTable() const; + // Returns the address of the physics table. - void DumpPhysicsTable() const; - // Prints the physics table. + void DumpPhysicsTable() const; + // Prints the physics table. private: + void BuildThePhysicsTable(); - void BuildThePhysicsTable(); + ///////////////////// + // Helper Functions + ///////////////////// - ///////////////////// - // Helper Functions - ///////////////////// + G4PhysicsOrderedFreeVector *RayleighAttenuationLengthGenerator(G4MaterialPropertiesTable *aMPT); - G4PhysicsOrderedFreeVector* RayleighAttenuationLengthGenerator( - G4MaterialPropertiesTable *aMPT); - - /////////////////////// - // Class Data Members - /////////////////////// + /////////////////////// + // Class Data Members + /////////////////////// protected: - - G4PhysicsTable* thePhysicsTable; - // A Physics Table can be either a cross-sections table or - // an energy table (or can be used for other specific - // purposes). + G4PhysicsTable *thePhysicsTable; + // A Physics Table can be either a cross-sections table or + // an energy table (or can be used for other specific + // purposes). private: - - G4bool DefaultWater; - + G4bool DefaultWater; }; //////////////////// // Inline methods //////////////////// -inline -G4bool RichTbG4OpRayleigh::IsApplicable(const G4ParticleDefinition& aParticleType) -{ - return ( &aParticleType == G4OpticalPhoton::OpticalPhoton() ); +inline G4bool RichTbG4OpRayleigh::IsApplicable(const G4ParticleDefinition &aParticleType) { + return (&aParticleType == G4OpticalPhoton::OpticalPhoton()); } -inline -void RichTbG4OpRayleigh::DumpPhysicsTable() const +inline void RichTbG4OpRayleigh::DumpPhysicsTable() const { - G4int PhysicsTableSize = thePhysicsTable->entries(); - G4PhysicsOrderedFreeVector *v; - - for (G4int i = 0 ; i < PhysicsTableSize ; i++ ) - { - v = (G4PhysicsOrderedFreeVector*)(*thePhysicsTable)[i]; - v->DumpValues(); - } -} + G4int PhysicsTableSize = thePhysicsTable->entries(); + G4PhysicsOrderedFreeVector *v; -inline G4PhysicsTable* RichTbG4OpRayleigh::GetPhysicsTable() const -{ - return thePhysicsTable; + for (G4int i = 0; i < PhysicsTableSize; i++) { + v = (G4PhysicsOrderedFreeVector *)(*thePhysicsTable)[i]; + v->DumpValues(); + } } +inline G4PhysicsTable *RichTbG4OpRayleigh::GetPhysicsTable() const { return thePhysicsTable; } #endif /* RichTbG4OpRayleigh_h */ diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/proc/RichTbG4Cerenkov.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/proc/RichTbG4Cerenkov.cc index f0494642524086592261f3d6444e131443c43974..6493d7c0603c7f74931248b75603e6b5eb5ec2ce 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/proc/RichTbG4Cerenkov.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/proc/RichTbG4Cerenkov.cc @@ -28,15 +28,15 @@ // Cerenkov Radiation Class Implementation //////////////////////////////////////////////////////////////////////// // -// File: RichTbG4Cerenkov.cc +// File: RichTbG4Cerenkov.cc // Description: Continuous Process -- Generation of Cerenkov Photons // Version: 2.1 -// Created: 1996-02-21 +// Created: 1996-02-21 // Author: Juliet Armstrong -// Updated: 2001-09-17, migration of Materials to pure STL (mma) +// Updated: 2001-09-17, migration of Materials to pure STL (mma) // 2000-11-12 by Peter Gumplinger // > add check on CerenkovAngleIntegrals->IsFilledVectorExist() -// in method GetAverageNumberOfPhotons +// in method GetAverageNumberOfPhotons // > and a test for MeanNumPhotons <= 0.0 in DoIt // 2000-09-18 by Peter Gumplinger // > change: aSecondaryPosition=x0+rand*aStep.GetDeltaPosition(); @@ -52,541 +52,499 @@ // renamed the class. //////////////////////////////////////////////////////////////////////// -#include "Geant4/G4ios.hh" -#include "Geant4/G4Poisson.hh" #include "RichTbG4Cerenkov.hh" -#include "RichTbPhotonUserInfoAttach.hh" +#include "Geant4/G4Poisson.hh" +#include "Geant4/G4ios.hh" #include "RichTbPhotonProdHisto.hh" +#include "RichTbPhotonUserInfoAttach.hh" using namespace std; ///////////////////////// -// Class Implementation +// Class Implementation ///////////////////////// - ////////////// - // Operators - ////////////// +////////////// +// Operators +////////////// // RichTbG4Cerenkov::operator=(const RichTbG4Cerenkov &right) // { // } - ///////////////// - // Constructors - ///////////////// +///////////////// +// Constructors +///////////////// -RichTbG4Cerenkov::RichTbG4Cerenkov(const G4String& processName) - : G4VContinuousProcess(processName) -{ - fTrackSecondariesFirst = false; - fMaxPhotons = 0; +RichTbG4Cerenkov::RichTbG4Cerenkov(const G4String &processName) : G4VContinuousProcess(processName) { + fTrackSecondariesFirst = false; + fMaxPhotons = 0; - thePhysicsTable = NULL; + thePhysicsTable = NULL; - if (verboseLevel>0) { - G4cout << GetProcessName() << " is created " << G4endl; - } + if (verboseLevel > 0) { + G4cout << GetProcessName() << " is created " << G4endl; + } - BuildThePhysicsTable(); + BuildThePhysicsTable(); } // RichTbG4Cerenkov::RichTbG4Cerenkov(const RichTbG4Cerenkov &right) // { // } - //////////////// - // Destructors - //////////////// +//////////////// +// Destructors +//////////////// -RichTbG4Cerenkov::~RichTbG4Cerenkov() -{ - if (thePhysicsTable != NULL) { - thePhysicsTable->clearAndDestroy(); - delete thePhysicsTable; - } +RichTbG4Cerenkov::~RichTbG4Cerenkov() { + if (thePhysicsTable != NULL) { + thePhysicsTable->clearAndDestroy(); + delete thePhysicsTable; + } } - //////////// - // Methods - //////////// +//////////// +// Methods +//////////// // AlongStepDoIt // ------------- // -G4VParticleChange* -RichTbG4Cerenkov::AlongStepDoIt(const G4Track& aTrack, const G4Step& aStep) +G4VParticleChange *RichTbG4Cerenkov::AlongStepDoIt(const G4Track &aTrack, const G4Step &aStep) // This routine is called for each tracking Step of a charged particle // in a radiator. A Poisson-distributed number of photons is generated // according to the Cerenkov formula, distributed evenly along the track -// segment and uniformly azimuth w.r.t. the particle direction. The -// parameters are then transformed into the Master Reference System, and -// they are added to the particle change. +// segment and uniformly azimuth w.r.t. the particle direction. The +// parameters are then transformed into the Master Reference System, and +// they are added to the particle change. { - ////////////////////////////////////////////////////// - // Should we ensure that the material is dispersive? - ////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// + // Should we ensure that the material is dispersive? + ////////////////////////////////////////////////////// - aParticleChange.Initialize(aTrack); + aParticleChange.Initialize(aTrack); - // G4cout<<" G4Cerenkov ch trackid stepnum "<<aTrack.GetTrackID()<<" "<<aTrack.GetCurrentStepNumber() <<G4endl; - const G4DynamicParticle* aParticle = aTrack.GetDynamicParticle(); - const G4Material* aMaterial = aTrack.GetMaterial(); + // G4cout<<" G4Cerenkov ch trackid stepnum "<<aTrack.GetTrackID()<<" "<<aTrack.GetCurrentStepNumber() + // <<G4endl; + const G4DynamicParticle *aParticle = aTrack.GetDynamicParticle(); + const G4Material *aMaterial = aTrack.GetMaterial(); - G4StepPoint* pPreStepPoint = aStep.GetPreStepPoint(); - G4StepPoint* pPostStepPoint = aStep.GetPostStepPoint(); + G4StepPoint *pPreStepPoint = aStep.GetPreStepPoint(); + G4StepPoint *pPostStepPoint = aStep.GetPostStepPoint(); - G4ThreeVector x0 = pPreStepPoint->GetPosition(); - G4ThreeVector p0 = aStep.GetDeltaPosition().unit(); - G4double t0 = pPreStepPoint->GetGlobalTime(); + G4ThreeVector x0 = pPreStepPoint->GetPosition(); + G4ThreeVector p0 = aStep.GetDeltaPosition().unit(); + G4double t0 = pPreStepPoint->GetGlobalTime(); - G4MaterialPropertiesTable* aMaterialPropertiesTable = - aMaterial->GetMaterialPropertiesTable(); - if (!aMaterialPropertiesTable) - return G4VContinuousProcess::AlongStepDoIt(aTrack, aStep); + G4MaterialPropertiesTable *aMaterialPropertiesTable = aMaterial->GetMaterialPropertiesTable(); + if (!aMaterialPropertiesTable) + return G4VContinuousProcess::AlongStepDoIt(aTrack, aStep); - G4MaterialPropertyVector* Rindex = - aMaterialPropertiesTable->GetProperty("CKVRNDX"); - if (!Rindex) - return G4VContinuousProcess::AlongStepDoIt(aTrack, aStep); + G4MaterialPropertyVector *Rindex = aMaterialPropertiesTable->GetProperty("CKVRNDX"); + if (!Rindex) + return G4VContinuousProcess::AlongStepDoIt(aTrack, aStep); - G4double MeanNumPhotons = - GetAverageNumberOfPhotons(aParticle,aMaterial,Rindex); + G4double MeanNumPhotons = GetAverageNumberOfPhotons(aParticle, aMaterial, Rindex); - if (MeanNumPhotons <= 0.0) { + if (MeanNumPhotons <= 0.0) { - // return unchanged particle and no secondaries + // return unchanged particle and no secondaries - aParticleChange.SetNumberOfSecondaries(0); - - return G4VContinuousProcess::AlongStepDoIt(aTrack, aStep); + aParticleChange.SetNumberOfSecondaries(0); - } + return G4VContinuousProcess::AlongStepDoIt(aTrack, aStep); + } - G4double step_length; - step_length = aStep.GetStepLength(); - // G4cout<<"G4Cerenkov MeanNumPhot steplen zpre zpost "<< MeanNumPhotons<<" "<<step_length<<" " - // << (pPreStepPoint->GetPosition()).z()<<" "<<(pPostStepPoint->GetPosition()).z()<< G4endl; + G4double step_length; + step_length = aStep.GetStepLength(); + // G4cout<<"G4Cerenkov MeanNumPhot steplen zpre zpost "<< MeanNumPhotons<<" "<<step_length<<" " + // << (pPreStepPoint->GetPosition()).z()<<" "<<(pPostStepPoint->GetPosition()).z()<< G4endl; - MeanNumPhotons = MeanNumPhotons * step_length; + MeanNumPhotons = MeanNumPhotons * step_length; + G4int NumPhotons = (G4int)G4Poisson(MeanNumPhotons); - G4int NumPhotons = (G4int) G4Poisson(MeanNumPhotons); + if (NumPhotons <= 0) { - if (NumPhotons <= 0) { + // return unchanged particle and no secondaries - // return unchanged particle and no secondaries + aParticleChange.SetNumberOfSecondaries(0); - aParticleChange.SetNumberOfSecondaries(0); - - return G4VContinuousProcess::AlongStepDoIt(aTrack, aStep); - } + return G4VContinuousProcess::AlongStepDoIt(aTrack, aStep); + } - //////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////// - aParticleChange.SetNumberOfSecondaries(NumPhotons); + aParticleChange.SetNumberOfSecondaries(NumPhotons); - if (fTrackSecondariesFirst) { - if (aTrack.GetTrackStatus() == fAlive ) - aParticleChange.ProposeTrackStatus(fSuspend); - } - - //////////////////////////////////////////////////////////////// + if (fTrackSecondariesFirst) { + if (aTrack.GetTrackStatus() == fAlive) + aParticleChange.ProposeTrackStatus(fSuspend); + } - // G4double Pmin = Rindex->GetMinPhotonMomentum(); - // G4double Pmax = Rindex->GetMaxPhotonMomentum(); + //////////////////////////////////////////////////////////////// - G4double Pmin = Rindex->GetMinLowEdgeEnergy(); // for G4.95 onwards - G4double Pmax = Rindex->GetMaxLowEdgeEnergy(); //for G4.95.onwards + // G4double Pmin = Rindex->GetMinPhotonMomentum(); + // G4double Pmax = Rindex->GetMaxPhotonMomentum(); + G4double Pmin = Rindex->GetMinLowEdgeEnergy(); // for G4.95 onwards + G4double Pmax = Rindex->GetMaxLowEdgeEnergy(); // for G4.95.onwards - G4double dp = Pmax - Pmin; + G4double dp = Pmax - Pmin; // G4double nMax = Rindex->GetMaxProperty(); - // G4double nMin = Rindex->GetMinValue(); - G4double nMax = Rindex->GetMaxValue(); + // G4double nMin = Rindex->GetMinValue(); + G4double nMax = Rindex->GetMaxValue(); - G4double BetaInverse = aParticle->GetTotalEnergy() / - aParticle->GetTotalMomentum(); + G4double BetaInverse = aParticle->GetTotalEnergy() / aParticle->GetTotalMomentum(); - // G4cout<<" RichG4Cerenkov energy mom betainverse max refindex "<< - // aParticle->GetTotalEnergy()<<" "<<aParticle->GetTotalMomentum() - // <<" "<< BetaInverse<<" "<< nMax << G4endl; - G4double maxCos = BetaInverse / nMax; - G4double maxSin2 = (1.0 - maxCos) * (1.0 + maxCos); + // G4cout<<" RichG4Cerenkov energy mom betainverse max refindex "<< + // aParticle->GetTotalEnergy()<<" "<<aParticle->GetTotalMomentum() + // <<" "<< BetaInverse<<" "<< nMax << G4endl; + G4double maxCos = BetaInverse / nMax; + G4double maxSin2 = (1.0 - maxCos) * (1.0 + maxCos); - for (G4int i = 0; i < NumPhotons; i++) { + for (G4int i = 0; i < NumPhotons; i++) { - // Determine photon momentum + // Determine photon momentum - G4double rand; - // G4double sampledMomentum, sampledRI; + G4double rand; + // G4double sampledMomentum, sampledRI; - G4double sampledEnergy, sampledRI; + G4double sampledEnergy, sampledRI; - G4double cosTheta, sin2Theta; - - // sample a momentum + G4double cosTheta, sin2Theta; - do { - rand = G4UniformRand(); - // sampledMomentum = Pmin + rand * dp; + // sample a momentum + + do { + rand = G4UniformRand(); + // sampledMomentum = Pmin + rand * dp; // sampledRI = Rindex->GetProperty(sampledMomentum); - sampledEnergy = Pmin + rand * dp; - sampledRI = Rindex->Value(sampledEnergy); - cosTheta = BetaInverse / sampledRI; + sampledEnergy = Pmin + rand * dp; + sampledRI = Rindex->Value(sampledEnergy); + cosTheta = BetaInverse / sampledRI; // G4cout<<"RichG4cerenkov SampledMom sampledRI costh th " // <<sampledMomentum<<" "<< sampledRI<<" " // <<cosTheta<< " "<<acos(cosTheta)<<G4endl; - sin2Theta = (1.0 - cosTheta)*(1.0 + cosTheta); - rand = G4UniformRand(); + sin2Theta = (1.0 - cosTheta) * (1.0 + cosTheta); + rand = G4UniformRand(); + + } while (rand * maxSin2 > sin2Theta); - } while (rand*maxSin2 > sin2Theta); + // Generate random position of photon on cone surface + // defined by Theta - // Generate random position of photon on cone surface - // defined by Theta + rand = G4UniformRand(); - rand = G4UniformRand(); + G4double phi = CLHEP::twopi * rand; + G4double sinPhi = sin(phi); + G4double cosPhi = cos(phi); - G4double phi = CLHEP::twopi*rand; - G4double sinPhi = sin(phi); - G4double cosPhi = cos(phi); + // calculate x,y, and z components of photon momentum + // (in coord system with primary particle direction + // aligned with the z axis) - // calculate x,y, and z components of photon momentum - // (in coord system with primary particle direction - // aligned with the z axis) + G4double sinTheta = sqrt(sin2Theta); + G4double px = sinTheta * cosPhi; + G4double py = sinTheta * sinPhi; + G4double pz = cosTheta; - G4double sinTheta = sqrt(sin2Theta); - G4double px = sinTheta*cosPhi; - G4double py = sinTheta*sinPhi; - G4double pz = cosTheta; + // Create photon momentum direction vector + // The momentum direction is still with respect + // to the coordinate system where the primary + // particle direction is aligned with the z axis - // Create photon momentum direction vector - // The momentum direction is still with respect - // to the coordinate system where the primary - // particle direction is aligned with the z axis + G4ParticleMomentum photonMomentum(px, py, pz); - G4ParticleMomentum photonMomentum(px, py, pz); + // Rotate momentum direction back to global reference + // system - // Rotate momentum direction back to global reference - // system + photonMomentum.rotateUz(p0); - photonMomentum.rotateUz(p0); + // Determine polarization of new photon - // Determine polarization of new photon + G4double sx = cosTheta * cosPhi; + G4double sy = cosTheta * sinPhi; + G4double sz = -sinTheta; - G4double sx = cosTheta*cosPhi; - G4double sy = cosTheta*sinPhi; - G4double sz = -sinTheta; + G4ThreeVector photonPolarization(sx, sy, sz); - G4ThreeVector photonPolarization(sx, sy, sz); + // Rotate back to original coord system - // Rotate back to original coord system + photonPolarization.rotateUz(p0); - photonPolarization.rotateUz(p0); - - // Generate a new photon: + // Generate a new photon: - G4DynamicParticle* aCerenkovPhoton = - new G4DynamicParticle(G4OpticalPhoton::OpticalPhoton(), - photonMomentum); - aCerenkovPhoton->SetPolarization - (photonPolarization.x(), - photonPolarization.y(), - photonPolarization.z()); + G4DynamicParticle *aCerenkovPhoton = new G4DynamicParticle(G4OpticalPhoton::OpticalPhoton(), photonMomentum); + aCerenkovPhoton->SetPolarization(photonPolarization.x(), photonPolarization.y(), photonPolarization.z()); // aCerenkovPhoton->SetKineticEnergy(sampledMomentum); - aCerenkovPhoton->SetKineticEnergy(sampledEnergy); + aCerenkovPhoton->SetKineticEnergy(sampledEnergy); - // Generate new G4Track object: + // Generate new G4Track object: - rand = G4UniformRand(); + rand = G4UniformRand(); - G4double delta = rand * aStep.GetStepLength(); - G4double deltaTime = delta / - ((pPreStepPoint->GetVelocity()+ - pPostStepPoint->GetVelocity())/2.); + G4double delta = rand * aStep.GetStepLength(); + G4double deltaTime = delta / ((pPreStepPoint->GetVelocity() + pPostStepPoint->GetVelocity()) / 2.); - G4double aSecondaryTime = t0 + deltaTime; + G4double aSecondaryTime = t0 + deltaTime; - G4ThreeVector aSecondaryPosition = - x0 + rand * aStep.GetDeltaPosition(); + G4ThreeVector aSecondaryPosition = x0 + rand * aStep.GetDeltaPosition(); - G4Track* aSecondaryTrack = - new G4Track(aCerenkovPhoton,aSecondaryTime,aSecondaryPosition); + G4Track *aSecondaryTrack = new G4Track(aCerenkovPhoton, aSecondaryTime, aSecondaryPosition); - aSecondaryTrack->SetTouchableHandle((G4VTouchable*)0); + aSecondaryTrack->SetTouchableHandle((G4VTouchable *)0); - aSecondaryTrack->SetParentID(aTrack.GetTrackID()); - //Additions and modif made by SE to Tag the info regarding photon - //production. SE 1-3-2005 - G4Track* aTaggedSecondaryTrack - = RichTbCkvProdInfoAttach(aTrack,aSecondaryTrack, - cosTheta,phi,sampledEnergy); + aSecondaryTrack->SetParentID(aTrack.GetTrackID()); + // Additions and modif made by SE to Tag the info regarding photon + // production. SE 1-3-2005 + G4Track *aTaggedSecondaryTrack = RichTbCkvProdInfoAttach(aTrack, aSecondaryTrack, cosTheta, phi, sampledEnergy); // aParticleChange.AddSecondary(aSecondaryTrack); - aParticleChange.AddSecondary(aTaggedSecondaryTrack); - // now for histograms - RichTbPhotonProductionHisto(aTrack, aTaggedSecondaryTrack, - cosTheta,phi,sampledEnergy); - //end of modif by SE - - } + aParticleChange.AddSecondary(aTaggedSecondaryTrack); + // now for histograms + RichTbPhotonProductionHisto(aTrack, aTaggedSecondaryTrack, cosTheta, phi, sampledEnergy); + // end of modif by SE + } - if (verboseLevel>0) { - G4cout << "\n Exiting from RichTbG4Cerenkov::DoIt -- NumberOfSecondaries = " - << aParticleChange.GetNumberOfSecondaries() << G4endl; - } + if (verboseLevel > 0) { + G4cout << "\n Exiting from RichTbG4Cerenkov::DoIt -- NumberOfSecondaries = " + << aParticleChange.GetNumberOfSecondaries() << G4endl; + } - return G4VContinuousProcess::AlongStepDoIt(aTrack, aStep); + return G4VContinuousProcess::AlongStepDoIt(aTrack, aStep); } // BuildThePhysicsTable for the Cerenkov process // --------------------------------------------- // -void RichTbG4Cerenkov::BuildThePhysicsTable() -{ - if (thePhysicsTable) return; +void RichTbG4Cerenkov::BuildThePhysicsTable() { + if (thePhysicsTable) + return; + + const G4MaterialTable *theMaterialTable = G4Material::GetMaterialTable(); + G4int numOfMaterials = G4Material::GetNumberOfMaterials(); - const G4MaterialTable* theMaterialTable= - G4Material::GetMaterialTable(); - G4int numOfMaterials = G4Material::GetNumberOfMaterials(); + // create new physics table - // create new physics table - - thePhysicsTable = new G4PhysicsTable(numOfMaterials); + thePhysicsTable = new G4PhysicsTable(numOfMaterials); - // loop for materials + // loop for materials - for (G4int i=0 ; i < numOfMaterials; i++) - { - G4PhysicsOrderedFreeVector* aPhysicsOrderedFreeVector = - new G4PhysicsOrderedFreeVector(); + for (G4int i = 0; i < numOfMaterials; i++) { + G4PhysicsOrderedFreeVector *aPhysicsOrderedFreeVector = new G4PhysicsOrderedFreeVector(); - // Retrieve vector of refraction indices for the material - // from the material's optical properties table + // Retrieve vector of refraction indices for the material + // from the material's optical properties table - G4Material* aMaterial = (*theMaterialTable)[i]; + G4Material *aMaterial = (*theMaterialTable)[i]; - G4MaterialPropertiesTable* aMaterialPropertiesTable = - aMaterial->GetMaterialPropertiesTable(); + G4MaterialPropertiesTable *aMaterialPropertiesTable = aMaterial->GetMaterialPropertiesTable(); - if (aMaterialPropertiesTable) { + if (aMaterialPropertiesTable) { - G4MaterialPropertyVector* theRefractionIndexVector = - aMaterialPropertiesTable->GetProperty("CKVRNDX"); + G4MaterialPropertyVector *theRefractionIndexVector = aMaterialPropertiesTable->GetProperty("CKVRNDX"); - if (theRefractionIndexVector) { - - // Retrieve the first refraction index in vector - // of (photon momentum, refraction index) pairs + if (theRefractionIndexVector) { - // theRefractionIndexVector->ResetIterator(); - // ++(*theRefractionIndexVector); // advance to 1st entry + // Retrieve the first refraction index in vector + // of (photon momentum, refraction index) pairs - G4double currentRI = (*theRefractionIndexVector)[0]; - //G4double currentRI = theRefractionIndexVector-> - // GetProperty(); + // theRefractionIndexVector->ResetIterator(); + // ++(*theRefractionIndexVector); // advance to 1st entry - if (currentRI > 1.0) { + G4double currentRI = (*theRefractionIndexVector)[0]; + // G4double currentRI = theRefractionIndexVector-> + // GetProperty(); - // Create first (photon momentum, Cerenkov Integral) - // pair + if (currentRI > 1.0) { - // G4double currentPM = theRefractionIndexVector-> - // GetPhotonMomentum(); - //G4double currentPM = theRefractionIndexVector-> - // GetPhotonMomentum(); + // Create first (photon momentum, Cerenkov Integral) + // pair - G4double currentPM = theRefractionIndexVector->Energy(0); - G4double currentCAI = 0.0; + // G4double currentPM = theRefractionIndexVector-> + // GetPhotonMomentum(); + // G4double currentPM = theRefractionIndexVector-> + // GetPhotonMomentum(); - aPhysicsOrderedFreeVector-> - InsertValues(currentPM , currentCAI); + G4double currentPM = theRefractionIndexVector->Energy(0); + G4double currentCAI = 0.0; - // Set previous values to current ones prior to loop + aPhysicsOrderedFreeVector->InsertValues(currentPM, currentCAI); - G4double prevPM = currentPM; - G4double prevCAI = currentCAI; - G4double prevRI = currentRI; + // Set previous values to current ones prior to loop - // loop over all (photon momentum, refraction index) - // pairs stored for this material + G4double prevPM = currentPM; + G4double prevCAI = currentCAI; + G4double prevRI = currentRI; - for (size_t i = 1;i < theRefractionIndexVector->GetVectorLength(); i++) - // while(++(*theRefractionIndexVector)) - { + // loop over all (photon momentum, refraction index) + // pairs stored for this material + + for (size_t i = 1; i < theRefractionIndexVector->GetVectorLength(); i++) + // while(++(*theRefractionIndexVector)) + { currentRI = (*theRefractionIndexVector)[i]; currentPM = theRefractionIndexVector->Energy(i); - // currentRI=theRefractionIndexVector-> + // currentRI=theRefractionIndexVector-> // GetProperty(); // currentPM = theRefractionIndexVector-> // GetPhotonMomentum(); - currentCAI = 0.5*(1.0/(prevRI*prevRI) + - 1.0/(currentRI*currentRI)); - - currentCAI = prevCAI + - (currentPM - prevPM) * currentCAI; + currentCAI = 0.5 * (1.0 / (prevRI * prevRI) + 1.0 / (currentRI * currentRI)); - aPhysicsOrderedFreeVector-> - InsertValues(currentPM, currentCAI); + currentCAI = prevCAI + (currentPM - prevPM) * currentCAI; - prevPM = currentPM; - prevCAI = currentCAI; - prevRI = currentRI; - } + aPhysicsOrderedFreeVector->InsertValues(currentPM, currentCAI); - } - } - } - - // The Cerenkov integral for a given material - // will be inserted in thePhysicsTable - // according to the position of the material in - // the material table. + prevPM = currentPM; + prevCAI = currentCAI; + prevRI = currentRI; + } + } + } + } - thePhysicsTable->insertAt(i,aPhysicsOrderedFreeVector); + // The Cerenkov integral for a given material + // will be inserted in thePhysicsTable + // according to the position of the material in + // the material table. - } + thePhysicsTable->insertAt(i, aPhysicsOrderedFreeVector); + } } // GetContinuousStepLimit // ---------------------- // -G4double -RichTbG4Cerenkov::GetContinuousStepLimit(const G4Track& aTrack, - G4double , - G4double , - G4double& ) -{ - // If user has defined an average maximum number of photons to - // be generated in a Step, then return the Step length for that - // number of photons. - - if (fMaxPhotons <= 0) return DBL_MAX; +G4double RichTbG4Cerenkov::GetContinuousStepLimit(const G4Track &aTrack, G4double, G4double, G4double &) { + // If user has defined an average maximum number of photons to + // be generated in a Step, then return the Step length for that + // number of photons. + + if (fMaxPhotons <= 0) + return DBL_MAX; - const G4DynamicParticle* aParticle = aTrack.GetDynamicParticle(); - const G4Material* aMaterial = aTrack.GetMaterial(); + const G4DynamicParticle *aParticle = aTrack.GetDynamicParticle(); + const G4Material *aMaterial = aTrack.GetMaterial(); - G4MaterialPropertiesTable* aMaterialPropertiesTable = - aMaterial->GetMaterialPropertiesTable(); - if (!aMaterialPropertiesTable) return DBL_MAX; + G4MaterialPropertiesTable *aMaterialPropertiesTable = aMaterial->GetMaterialPropertiesTable(); + if (!aMaterialPropertiesTable) + return DBL_MAX; - G4MaterialPropertyVector* Rindex = - aMaterialPropertiesTable->GetProperty("CKVRNDX"); - if (!Rindex) return DBL_MAX; + G4MaterialPropertyVector *Rindex = aMaterialPropertiesTable->GetProperty("CKVRNDX"); + if (!Rindex) + return DBL_MAX; - G4double MeanNumPhotons = - GetAverageNumberOfPhotons(aParticle,aMaterial,Rindex); + G4double MeanNumPhotons = GetAverageNumberOfPhotons(aParticle, aMaterial, Rindex); - if(MeanNumPhotons <= 0.0) return DBL_MAX; + if (MeanNumPhotons <= 0.0) + return DBL_MAX; - G4double StepLimit = fMaxPhotons / MeanNumPhotons; + G4double StepLimit = fMaxPhotons / MeanNumPhotons; - return StepLimit; + return StepLimit; } // GetAverageNumberOfPhotons // ------------------------- // This routine computes the number of Cerenkov photons produced per -// GEANT-unit (millimeter) in the current medium. +// GEANT-unit (millimeter) in the current medium. // ^^^^^^^^^^ -G4double -RichTbG4Cerenkov::GetAverageNumberOfPhotons(const G4DynamicParticle* aParticle, - const G4Material* aMaterial, - G4MaterialPropertyVector* Rindex) const -{ - const G4double Rfact = 369.81/(CLHEP::eV * CLHEP::cm); +G4double RichTbG4Cerenkov::GetAverageNumberOfPhotons(const G4DynamicParticle *aParticle, const G4Material *aMaterial, + G4MaterialPropertyVector *Rindex) const { + const G4double Rfact = 369.81 / (CLHEP::eV * CLHEP::cm); + + if (aParticle->GetTotalMomentum() <= 0.0) + return 0.0; - if(aParticle->GetTotalMomentum() <= 0.0)return 0.0; + G4double BetaInverse = aParticle->GetTotalEnergy() / aParticle->GetTotalMomentum(); - G4double BetaInverse = aParticle->GetTotalEnergy() / - aParticle->GetTotalMomentum(); + // Vectors used in computation of Cerenkov Angle Integral: + // - Refraction Indices for the current material + // - new G4PhysicsOrderedFreeVector allocated to hold CAI's - // Vectors used in computation of Cerenkov Angle Integral: - // - Refraction Indices for the current material - // - new G4PhysicsOrderedFreeVector allocated to hold CAI's - - G4int materialIndex = aMaterial->GetIndex(); + G4int materialIndex = aMaterial->GetIndex(); - // Retrieve the Cerenkov Angle Integrals for this material + // Retrieve the Cerenkov Angle Integrals for this material - G4PhysicsOrderedFreeVector* CerenkovAngleIntegrals = - (G4PhysicsOrderedFreeVector*)((*thePhysicsTable)(materialIndex)); + G4PhysicsOrderedFreeVector *CerenkovAngleIntegrals = + (G4PhysicsOrderedFreeVector *)((*thePhysicsTable)(materialIndex)); - if(!(CerenkovAngleIntegrals->IsFilledVectorExist()))return 0.0; + if (!(CerenkovAngleIntegrals->IsFilledVectorExist())) + return 0.0; - // Min and Max photon momenta - // G4double Pmin = Rindex->GetMinPhotonMomentum(); - // G4double Pmax = Rindex->GetMaxPhotonMomentum(); - G4double Pmin = Rindex->GetMinLowEdgeEnergy(); //G4.95 onwards - G4double Pmax = Rindex->GetMaxLowEdgeEnergy(); //G4.95 onwards + // Min and Max photon momenta + // G4double Pmin = Rindex->GetMinPhotonMomentum(); + // G4double Pmax = Rindex->GetMaxPhotonMomentum(); + G4double Pmin = Rindex->GetMinLowEdgeEnergy(); // G4.95 onwards + G4double Pmax = Rindex->GetMaxLowEdgeEnergy(); // G4.95 onwards - // Min and Max Refraction Indices - // G4double nMin = Rindex->GetMinProperty(); + // Min and Max Refraction Indices + // G4double nMin = Rindex->GetMinProperty(); // G4double nMax = Rindex->GetMaxProperty(); - G4double nMin = Rindex->GetMinValue(); - G4double nMax = Rindex->GetMaxValue(); + G4double nMin = Rindex->GetMinValue(); + G4double nMax = Rindex->GetMaxValue(); - // Max Cerenkov Angle Integral - G4double CAImax = CerenkovAngleIntegrals->GetMaxValue(); + // Max Cerenkov Angle Integral + G4double CAImax = CerenkovAngleIntegrals->GetMaxValue(); - G4double dp, ge; + G4double dp, ge; - // If n(Pmax) < 1/Beta -- no photons generated + // If n(Pmax) < 1/Beta -- no photons generated - if (nMax < BetaInverse) { - dp = 0; - ge = 0; - } + if (nMax < BetaInverse) { + dp = 0; + ge = 0; + } - // otherwise if n(Pmin) >= 1/Beta -- photons generated + // otherwise if n(Pmin) >= 1/Beta -- photons generated - else if (nMin > BetaInverse) { - dp = Pmax - Pmin; - ge = CAImax; - } + else if (nMin > BetaInverse) { + dp = Pmax - Pmin; + ge = CAImax; + } - // If n(Pmin) < 1/Beta, and n(Pmax) >= 1/Beta, then - // we need to find a P such that the value of n(P) == 1/Beta. - // Interpolation is performed by the GetPhotonMomentum() and - // GetProperty() methods of the G4MaterialPropertiesTable and - // the GetValue() method of G4PhysicsVector. + // If n(Pmin) < 1/Beta, and n(Pmax) >= 1/Beta, then + // we need to find a P such that the value of n(P) == 1/Beta. + // Interpolation is performed by the GetPhotonMomentum() and + // GetProperty() methods of the G4MaterialPropertiesTable and + // the GetValue() method of G4PhysicsVector. - else { + else { // Pmin = Rindex->GetPhotonMomentum(BetaInverse); - Pmin = Rindex->GetEnergy(BetaInverse); - dp = Pmax - Pmin; - - // need boolean for current implementation of G4PhysicsVector - // ==> being phased out - G4bool isOutRange; - G4double CAImin = CerenkovAngleIntegrals-> - GetValue(Pmin, isOutRange); - ge = CAImax - CAImin; - - if (verboseLevel>0) { - G4cout << "CAImin = " << CAImin << G4endl; - G4cout << "ge = " << ge << G4endl; - } - } - - // particle charge - G4double charge = aParticle->GetDefinition()->GetPDGCharge(); - - // Calculate number of photons - G4double NumPhotons = Rfact * charge/CLHEP::eplus * charge/CLHEP::eplus * - (dp - ge * BetaInverse*BetaInverse); - - return NumPhotons; + Pmin = Rindex->GetEnergy(BetaInverse); + dp = Pmax - Pmin; + + // need boolean for current implementation of G4PhysicsVector + // ==> being phased out + G4bool isOutRange; + G4double CAImin = CerenkovAngleIntegrals->GetValue(Pmin, isOutRange); + ge = CAImax - CAImin; + + if (verboseLevel > 0) { + G4cout << "CAImin = " << CAImin << G4endl; + G4cout << "ge = " << ge << G4endl; + } + } + + // particle charge + G4double charge = aParticle->GetDefinition()->GetPDGCharge(); + + // Calculate number of photons + G4double NumPhotons = Rfact * charge / CLHEP::eplus * charge / CLHEP::eplus * (dp - ge * BetaInverse * BetaInverse); + + return NumPhotons; } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/proc/RichTbG4OpAbsorption.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/proc/RichTbG4OpAbsorption.cc index 3df85d898be5684539ba29eb763c96869865649f..1a24e492700b6cb85f924ef8fe7ec09a07a6d955 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/proc/RichTbG4OpAbsorption.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/proc/RichTbG4OpAbsorption.cc @@ -29,12 +29,12 @@ //////////////////////////////////////////////////////////////////////// // // File: RichTbG4OpAbsorption.cc -// Description: Discrete Process -- Absorption of Optical Photons +// Description: Discrete Process -- Absorption of Optical Photons // Version: 1.0 // Created: 1996-05-21 // Author: Juliet Armstrong // Updated: 2000-09-18 by Peter Gumplinger -// > comment out warning - "No Absorption length specified" +// > comment out warning - "No Absorption length specified" // 1997-04-09 by Peter Gumplinger // > new physics/tracking scheme // 1998-08-25 by Stefano Magni @@ -46,100 +46,88 @@ // //////////////////////////////////////////////////////////////////////// -#include "Geant4/G4ios.hh" #include "RichTbG4OpAbsorption.hh" +#include "Geant4/G4ios.hh" ///////////////////////// // Class Implementation ///////////////////////// - ////////////// - // Operators - ////////////// +////////////// +// Operators +////////////// // RichTbG4OpAbsorption::operator=(const RichTbG4OpAbsorption &right) // { // } - ///////////////// - // Constructors - ///////////////// +///////////////// +// Constructors +///////////////// -RichTbG4OpAbsorption::RichTbG4OpAbsorption(const G4String& processName) - : G4VDiscreteProcess(processName) -{ - if (verboseLevel>0) { - G4cout << GetProcessName() << " is created " << G4endl; - } +RichTbG4OpAbsorption::RichTbG4OpAbsorption(const G4String &processName) : G4VDiscreteProcess(processName) { + if (verboseLevel > 0) { + G4cout << GetProcessName() << " is created " << G4endl; + } } // RichTbG4OpAbsorption::RichTbG4OpAbsorption(const G4OpAbsorpton &right) // { // } - //////////////// - // Destructors - //////////////// +//////////////// +// Destructors +//////////////// -RichTbG4OpAbsorption::~RichTbG4OpAbsorption(){} +RichTbG4OpAbsorption::~RichTbG4OpAbsorption() {} - //////////// - // Methods - //////////// +//////////// +// Methods +//////////// // PostStepDoIt // ------------- // -G4VParticleChange* -RichTbG4OpAbsorption::PostStepDoIt(const G4Track& aTrack, const G4Step& aStep) -{ - aParticleChange.Initialize(aTrack); - - aParticleChange.ProposeTrackStatus(fStopAndKill); - aStep.GetTrack()->SetTrackStatus(fStopAndKill); - if (verboseLevel>0) { - G4cout << "\n** Photon absorbed! **" << G4endl; - } - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); +G4VParticleChange *RichTbG4OpAbsorption::PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) { + aParticleChange.Initialize(aTrack); + + aParticleChange.ProposeTrackStatus(fStopAndKill); + aStep.GetTrack()->SetTrackStatus(fStopAndKill); + if (verboseLevel > 0) { + G4cout << "\n** Photon absorbed! **" << G4endl; + } + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); } - // GetMeanFreePath // --------------- // -G4double RichTbG4OpAbsorption::GetMeanFreePath(const G4Track& aTrack, - G4double , - G4ForceCondition* ) -{ - const G4DynamicParticle* aParticle = aTrack.GetDynamicParticle(); - const G4Material* aMaterial = aTrack.GetMaterial(); - - // G4double thePhotonMomentum = aParticle->GetTotalMomentum(); - G4double thePhotonEnergy = aParticle->GetTotalEnergy(); - - G4MaterialPropertiesTable* aMaterialPropertyTable; - G4MaterialPropertyVector* AttenuationLengthVector; - - G4double AttenuationLength = DBL_MAX; - - aMaterialPropertyTable = aMaterial->GetMaterialPropertiesTable(); - - if ( aMaterialPropertyTable ) { - AttenuationLengthVector = aMaterialPropertyTable-> - GetProperty("ABSLENGTH"); - if ( AttenuationLengthVector ){ - // AttenuationLength = AttenuationLengthVector-> - // GetProperty (thePhotonMomentum); - AttenuationLength = AttenuationLengthVector-> - Value (thePhotonEnergy); - } - else { -// G4cout << "No Absorption length specified" << G4endl; - } - } - else { -// G4cout << "No Absorption length specified" << G4endl; - } - - return AttenuationLength; +G4double RichTbG4OpAbsorption::GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *) { + const G4DynamicParticle *aParticle = aTrack.GetDynamicParticle(); + const G4Material *aMaterial = aTrack.GetMaterial(); + + // G4double thePhotonMomentum = aParticle->GetTotalMomentum(); + G4double thePhotonEnergy = aParticle->GetTotalEnergy(); + + G4MaterialPropertiesTable *aMaterialPropertyTable; + G4MaterialPropertyVector *AttenuationLengthVector; + + G4double AttenuationLength = DBL_MAX; + + aMaterialPropertyTable = aMaterial->GetMaterialPropertiesTable(); + + if (aMaterialPropertyTable) { + AttenuationLengthVector = aMaterialPropertyTable->GetProperty("ABSLENGTH"); + if (AttenuationLengthVector) { + // AttenuationLength = AttenuationLengthVector-> + // GetProperty (thePhotonMomentum); + AttenuationLength = AttenuationLengthVector->Value(thePhotonEnergy); + } else { + // G4cout << "No Absorption length specified" << G4endl; + } + } else { + // G4cout << "No Absorption length specified" << G4endl; + } + + return AttenuationLength; } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/proc/RichTbG4OpBoundaryProcess.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/proc/RichTbG4OpBoundaryProcess.cc index 50eefb81d627fa74b7fb29310e52d350c047b291..d95baf02aabe1a069ed930a10f55f5d45f722ade 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/proc/RichTbG4OpBoundaryProcess.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/proc/RichTbG4OpBoundaryProcess.cc @@ -35,7 +35,7 @@ // (thanks to: Stefano Magni) // 1998-06-11 - delete *sint1 in oblique reflection // (thanks to: Giovanni Pieri) -// 1998-06-19 - move from GetLocalExitNormal() to the new +// 1998-06-19 - move from GetLocalExitNormal() to the new // method: GetLocalExitNormal(&valid) to get // the surface normal in all cases // 1998-11-07 - NULL OpticalSurface pointer before use @@ -54,910 +54,818 @@ // Author: Peter Gumplinger // adopted from work by Werner Keil - April 2/96 // mail: gum@triumf.ca -// modified and renamed to adapt to the RICH testbeam. SE 1-3-2005. +// modified and renamed to adapt to the RICH testbeam. SE 1-3-2005. //////////////////////////////////////////////////////////////////////// -#include "Geant4/G4ios.hh" #include "RichTbG4OpBoundaryProcess.hh" -#include "RichTbMiscNames.hh" #include "Geant4/G4GeometryTolerance.hh" +#include "Geant4/G4ios.hh" +#include "RichTbMiscNames.hh" ///////////////////////// // Class Implementation ///////////////////////// - ////////////// - // Operators - ////////////// +////////////// +// Operators +////////////// // RichTbG4OpBoundaryProcess::operator=(const RichTbG4OpBoundaryProcess &right) // { // } - ///////////////// - // Constructors - ///////////////// - -RichTbG4OpBoundaryProcess::RichTbG4OpBoundaryProcess(const G4String& processName) - : G4VDiscreteProcess(processName) -{ - if ( verboseLevel > 0) { - G4cout << GetProcessName() << " is created " << G4endl; - } - - theStatus = Undefined; - theModel = glisur; - theFinish = polished; - theReflectivity = 1.; - theEfficiency = 0.; - - prob_sl = 0.; - prob_ss = 0.; - prob_bs = 0.; - CurStepNum=0; - theMaxPhotStepNumInBoundaryProc=3; +///////////////// +// Constructors +///////////////// +RichTbG4OpBoundaryProcess::RichTbG4OpBoundaryProcess(const G4String &processName) : G4VDiscreteProcess(processName) { + if (verboseLevel > 0) { + G4cout << GetProcessName() << " is created " << G4endl; + } + theStatus = Undefined; + theModel = glisur; + theFinish = polished; + theReflectivity = 1.; + theEfficiency = 0.; + + prob_sl = 0.; + prob_ss = 0.; + prob_bs = 0.; + CurStepNum = 0; + theMaxPhotStepNumInBoundaryProc = 3; } // RichTbG4OpBoundaryProcess::RichTbG4OpBoundaryProcess(const RichTbG4OpBoundaryProcess &right) // { // } - //////////////// - // Destructors - //////////////// +//////////////// +// Destructors +//////////////// -RichTbG4OpBoundaryProcess::~RichTbG4OpBoundaryProcess(){} +RichTbG4OpBoundaryProcess::~RichTbG4OpBoundaryProcess() {} - //////////// - // Methods - //////////// +//////////// +// Methods +//////////// // PostStepDoIt // ------------ // -G4VParticleChange* -RichTbG4OpBoundaryProcess::PostStepDoIt(const G4Track& aTrack, const G4Step& aStep) -{ - theStatus = Undefined; +G4VParticleChange *RichTbG4OpBoundaryProcess::PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) { + theStatus = Undefined; - aParticleChange.Initialize(aTrack); + aParticleChange.Initialize(aTrack); - G4StepPoint* pPreStepPoint = aStep.GetPreStepPoint(); - G4StepPoint* pPostStepPoint = aStep.GetPostStepPoint(); + G4StepPoint *pPreStepPoint = aStep.GetPreStepPoint(); + G4StepPoint *pPostStepPoint = aStep.GetPostStepPoint(); - if (pPostStepPoint->GetStepStatus() != fGeomBoundary){ - theStatus = NotAtBoundary; - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - } + if (pPostStepPoint->GetStepStatus() != fGeomBoundary) { + theStatus = NotAtBoundary; + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + } G4double kCarTolerance = G4GeometryTolerance::GetInstance()->GetSurfaceTolerance(); - if (aTrack.GetStepLength()<=kCarTolerance/2){ - theStatus = StepTooSmall; - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - } + if (aTrack.GetStepLength() <= kCarTolerance / 2) { + theStatus = StepTooSmall; + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + } - Material1 = pPreStepPoint -> GetMaterial(); - Material2 = pPostStepPoint -> GetMaterial(); - // debug printout by SE - G4String Material1Name = Material1->GetName(); - G4String Material2Name = Material2->GetName(); + Material1 = pPreStepPoint->GetMaterial(); + Material2 = pPostStepPoint->GetMaterial(); + // debug printout by SE + G4String Material1Name = Material1->GetName(); + G4String Material2Name = Material2->GetName(); // G4cout<<"RichTbBoundaryProc Materal1 Materal2 " // << Material1Name<<" "<< Material2Name<<G4endl; // G4cout<<"RichTbBoundaryProc track status " - // <<aTrack.GetTrackStatus()<<G4endl; + // <<aTrack.GetTrackStatus()<<G4endl; // end of printout by SE - G4int CurrentStepNumber = aTrack.GetCurrentStepNumber(); CurStepNum = CurrentStepNumber; - if(CurrentStepNumber > 10000){ - G4cout<<"killing photon at step # "<< CurrentStepNumber << G4endl; + if (CurrentStepNumber > 10000) { + G4cout << "killing photon at step # " << CurrentStepNumber << G4endl; theStatus = Absorption; aParticleChange.ProposeTrackStatus(fStopAndKill); aStep.GetTrack()->SetTrackStatus(fStopAndKill); return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); } + const G4DynamicParticle *aParticle = aTrack.GetDynamicParticle(); - const G4DynamicParticle* aParticle = aTrack.GetDynamicParticle(); - - thePhotonMomentum = aParticle->GetTotalMomentum(); - G4double aPhotonKE = aParticle->GetKineticEnergy(); - if( thePhotonMomentum == 0.0 || aPhotonKE == 0.0 ) { - G4cout<< "Boundary proc photon energy "<< thePhotonMomentum - <<" "<< aPhotonKE<<G4endl; - } - G4double Lambda = 1243.125*(CLHEP::nanometer*CLHEP::eV)/aPhotonKE*1000000; + thePhotonMomentum = aParticle->GetTotalMomentum(); + G4double aPhotonKE = aParticle->GetKineticEnergy(); + if (thePhotonMomentum == 0.0 || aPhotonKE == 0.0) { + G4cout << "Boundary proc photon energy " << thePhotonMomentum << " " << aPhotonKE << G4endl; + } + // G4double Lambda = 1243.125 * (CLHEP::nanometer * CLHEP::eV) / aPhotonKE * 1000000; // G4cout <<"energy momentum and lambda " <<aPhotonKE << " "<< thePhotonMomentum<< " " << Lambda << G4endl; - // modif made by SE + // modif made by SE // if the photon momentum is zero kill it anyway. // this is to avoid the photons killed by other process in the same step. - // if(thePhotonMomentum = 0.0 || aPhotonKE == 0.0 ) { - // aParticleChange.ProposeTrackStatus(fStopAndKill); - // aParticleChange.ProposeEnergy(0.0); - // return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - // } - // end of modif by SE. - - OldMomentum = aParticle->GetMomentumDirection(); - OldPolarization = aParticle->GetPolarization(); - - G4MaterialPropertiesTable* aMaterialPropertiesTable; - G4MaterialPropertyVector* Rindex; - - aMaterialPropertiesTable = Material1->GetMaterialPropertiesTable(); - if (aMaterialPropertiesTable) { - Rindex = aMaterialPropertiesTable->GetProperty("RINDEX"); - } - else { - theStatus = NoRINDEX; - aParticleChange.ProposeTrackStatus(fStopAndKill); - aStep.GetTrack()->SetTrackStatus(fStopAndKill); - // aParticleChange.ProposeEnergy(0.0); - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - } + // if(thePhotonMomentum = 0.0 || aPhotonKE == 0.0 ) { + // aParticleChange.ProposeTrackStatus(fStopAndKill); + // aParticleChange.ProposeEnergy(0.0); + // return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + // } + // end of modif by SE. + + OldMomentum = aParticle->GetMomentumDirection(); + OldPolarization = aParticle->GetPolarization(); + + G4MaterialPropertiesTable *aMaterialPropertiesTable; + G4MaterialPropertyVector *Rindex; + + aMaterialPropertiesTable = Material1->GetMaterialPropertiesTable(); + if (aMaterialPropertiesTable) { + Rindex = aMaterialPropertiesTable->GetProperty("RINDEX"); + } else { + theStatus = NoRINDEX; + aParticleChange.ProposeTrackStatus(fStopAndKill); + aStep.GetTrack()->SetTrackStatus(fStopAndKill); + // aParticleChange.ProposeEnergy(0.0); + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + } + + if (Rindex) { + // Rindex1 = Rindex->GetProperty(thePhotonMomentum); + Rindex1 = Rindex->Value(thePhotonMomentum); + + } else { + theStatus = NoRINDEX; + aParticleChange.ProposeTrackStatus(fStopAndKill); + aStep.GetTrack()->SetTrackStatus(fStopAndKill); + // aParticleChange.ProposeEnergy(0.0); + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + } + + theModel = glisur; + theFinish = polished; + + G4SurfaceType type = dielectric_dielectric; + + Rindex = NULL; + OpticalSurface = NULL; + + G4LogicalSurface *Surface = + G4LogicalBorderSurface::GetSurface(pPreStepPoint->GetPhysicalVolume(), pPostStepPoint->GetPhysicalVolume()); + + if (Surface == NULL) { + G4bool enteredDaughter = (pPostStepPoint->GetPhysicalVolume()->GetMotherLogical() == + pPreStepPoint->GetPhysicalVolume()->GetLogicalVolume()); + if (enteredDaughter) { + Surface = G4LogicalSkinSurface::GetSurface(pPostStepPoint->GetPhysicalVolume()->GetLogicalVolume()); + if (Surface == NULL) + Surface = G4LogicalSkinSurface::GetSurface(pPreStepPoint->GetPhysicalVolume()->GetLogicalVolume()); + } else { + Surface = G4LogicalSkinSurface::GetSurface(pPreStepPoint->GetPhysicalVolume()->GetLogicalVolume()); + if (Surface == NULL) + Surface = G4LogicalSkinSurface::GetSurface(pPostStepPoint->GetPhysicalVolume()->GetLogicalVolume()); + } + } + + // if (Surface) OpticalSurface = dynamic_cast <G4OpticalSurface*> (Surface->GetSurfaceProperty()); + if (Surface) + OpticalSurface = (G4OpticalSurface *)Surface->GetSurfaceProperty(); + + if (OpticalSurface) { + + type = OpticalSurface->GetType(); + theModel = OpticalSurface->GetModel(); + theFinish = OpticalSurface->GetFinish(); + + aMaterialPropertiesTable = OpticalSurface->GetMaterialPropertiesTable(); + if (aMaterialPropertiesTable) { + + if (theFinish == polishedbackpainted || theFinish == groundbackpainted) { + Rindex = aMaterialPropertiesTable->GetProperty("RINDEX"); if (Rindex) { - // Rindex1 = Rindex->GetProperty(thePhotonMomentum); - Rindex1 = Rindex->Value(thePhotonMomentum); - - } - else { - theStatus = NoRINDEX; - aParticleChange.ProposeTrackStatus(fStopAndKill); - aStep.GetTrack()->SetTrackStatus(fStopAndKill); - // aParticleChange.ProposeEnergy(0.0); - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - } - - theModel = glisur; - theFinish = polished; - - G4SurfaceType type = dielectric_dielectric; - - Rindex = NULL; - OpticalSurface = NULL; - - G4LogicalSurface* Surface = G4LogicalBorderSurface::GetSurface - (pPreStepPoint ->GetPhysicalVolume(), - pPostStepPoint->GetPhysicalVolume()); - - if (Surface == NULL){ - G4bool enteredDaughter=(pPostStepPoint->GetPhysicalVolume() - ->GetMotherLogical() == - pPreStepPoint->GetPhysicalVolume() - ->GetLogicalVolume()); - if(enteredDaughter){ - Surface = G4LogicalSkinSurface::GetSurface - (pPostStepPoint->GetPhysicalVolume()-> - GetLogicalVolume()); - if(Surface == NULL) - Surface = G4LogicalSkinSurface::GetSurface - (pPreStepPoint->GetPhysicalVolume()-> - GetLogicalVolume()); - } - else{ - Surface = G4LogicalSkinSurface::GetSurface - (pPreStepPoint->GetPhysicalVolume()-> - GetLogicalVolume()); - if(Surface == NULL) - Surface = G4LogicalSkinSurface::GetSurface - (pPostStepPoint->GetPhysicalVolume()-> - GetLogicalVolume()); - } - } - - // if (Surface) OpticalSurface = dynamic_cast <G4OpticalSurface*> (Surface->GetSurfaceProperty()); - if (Surface) OpticalSurface = (G4OpticalSurface*) Surface->GetSurfaceProperty(); - - if (OpticalSurface) { - - type = OpticalSurface->GetType(); - theModel = OpticalSurface->GetModel(); - theFinish = OpticalSurface->GetFinish(); - - aMaterialPropertiesTable = OpticalSurface-> - GetMaterialPropertiesTable(); - - if (aMaterialPropertiesTable) { - - if (theFinish == polishedbackpainted || - theFinish == groundbackpainted ) { - Rindex = aMaterialPropertiesTable->GetProperty("RINDEX"); - if (Rindex) { - // Rindex2 = Rindex->GetProperty(thePhotonMomentum); - Rindex2 = Rindex->Value(thePhotonMomentum); - - } - else { - theStatus = NoRINDEX; - aParticleChange.ProposeTrackStatus(fStopAndKill); - aStep.GetTrack()->SetTrackStatus(fStopAndKill); - - // aParticleChange.ProposeEnergy(0.0); - - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - } - } - - G4MaterialPropertyVector* PropertyPointer; - - PropertyPointer = - aMaterialPropertiesTable->GetProperty("REFLECTIVITY"); - if (PropertyPointer) { - // PropertyPointer->GetProperty(thePhotonMomentum); - theReflectivity = - PropertyPointer->Value(thePhotonMomentum); - } else { - theReflectivity = 1.0; - } - - PropertyPointer = - aMaterialPropertiesTable->GetProperty("EFFICIENCY"); - if (PropertyPointer) { - // PropertyPointer->GetProperty(thePhotonMomentum); - theEfficiency = - PropertyPointer->Value(thePhotonMomentum); - } else { - theEfficiency = 0.0; - } - - if ( theModel == unified ) { - PropertyPointer = - aMaterialPropertiesTable->GetProperty("SPECULARLOBECONSTANT"); - if (PropertyPointer) { - // PropertyPointer->GetProperty(thePhotonMomentum); - prob_sl = - PropertyPointer->Value(thePhotonMomentum); - } else { - prob_sl = 0.0; - } - - PropertyPointer = - aMaterialPropertiesTable->GetProperty("SPECULARSPIKECONSTANT"); - if (PropertyPointer) { - // PropertyPointer->GetProperty(thePhotonMomentum); - prob_ss = - PropertyPointer->Value(thePhotonMomentum); - } else { - prob_ss = 0.0; - } - - PropertyPointer = - aMaterialPropertiesTable->GetProperty("BACKSCATTERCONSTANT"); - if (PropertyPointer) { - // PropertyPointer->GetProperty(thePhotonMomentum); - prob_bs = - PropertyPointer->Value(thePhotonMomentum); - } else { - prob_bs = 0.0; - } - } - } - else if (theFinish == polishedbackpainted || - theFinish == groundbackpainted ) { - aParticleChange.ProposeTrackStatus(fStopAndKill); - aStep.GetTrack()->SetTrackStatus(fStopAndKill); - - // aParticleChange.ProposeEnergy(0.0); - - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - } + // Rindex2 = Rindex->GetProperty(thePhotonMomentum); + Rindex2 = Rindex->Value(thePhotonMomentum); + + } else { + theStatus = NoRINDEX; + aParticleChange.ProposeTrackStatus(fStopAndKill); + aStep.GetTrack()->SetTrackStatus(fStopAndKill); + + // aParticleChange.ProposeEnergy(0.0); + + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + } + } + + G4MaterialPropertyVector *PropertyPointer; + + PropertyPointer = aMaterialPropertiesTable->GetProperty("REFLECTIVITY"); + if (PropertyPointer) { + // PropertyPointer->GetProperty(thePhotonMomentum); + theReflectivity = PropertyPointer->Value(thePhotonMomentum); + } else { + theReflectivity = 1.0; + } + + PropertyPointer = aMaterialPropertiesTable->GetProperty("EFFICIENCY"); + if (PropertyPointer) { + // PropertyPointer->GetProperty(thePhotonMomentum); + theEfficiency = PropertyPointer->Value(thePhotonMomentum); + } else { + theEfficiency = 0.0; + } + + if (theModel == unified) { + PropertyPointer = aMaterialPropertiesTable->GetProperty("SPECULARLOBECONSTANT"); + if (PropertyPointer) { + // PropertyPointer->GetProperty(thePhotonMomentum); + prob_sl = PropertyPointer->Value(thePhotonMomentum); + } else { + prob_sl = 0.0; } - if (type == dielectric_dielectric ) { - if (theFinish == polished || theFinish == ground ) { - - if (Material1 == Material2){ - theStatus = SameMaterial; - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - } - aMaterialPropertiesTable = - Material2->GetMaterialPropertiesTable(); - if (aMaterialPropertiesTable) - Rindex = aMaterialPropertiesTable->GetProperty("RINDEX"); - if (Rindex) { - // Rindex2 = Rindex->GetProperty(thePhotonMomentum); - Rindex2 = Rindex->Value(thePhotonMomentum); - } - else { - theStatus = NoRINDEX; - aParticleChange.ProposeTrackStatus(fStopAndKill); - aStep.GetTrack()->SetTrackStatus(fStopAndKill); - - // aParticleChange.ProposeEnergy(0.0); - - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - } - } + PropertyPointer = aMaterialPropertiesTable->GetProperty("SPECULARSPIKECONSTANT"); + if (PropertyPointer) { + // PropertyPointer->GetProperty(thePhotonMomentum); + prob_ss = PropertyPointer->Value(thePhotonMomentum); + } else { + prob_ss = 0.0; } - if ( verboseLevel > 0 ) { - G4cout << " Photon at Boundary! " << G4endl; - G4cout << " Old Momentum Direction: " << OldMomentum << G4endl; - G4cout << " Old Polarization: " << OldPolarization << G4endl; + PropertyPointer = aMaterialPropertiesTable->GetProperty("BACKSCATTERCONSTANT"); + if (PropertyPointer) { + // PropertyPointer->GetProperty(thePhotonMomentum); + prob_bs = PropertyPointer->Value(thePhotonMomentum); + } else { + prob_bs = 0.0; } + } + } else if (theFinish == polishedbackpainted || theFinish == groundbackpainted) { + aParticleChange.ProposeTrackStatus(fStopAndKill); + aStep.GetTrack()->SetTrackStatus(fStopAndKill); + + // aParticleChange.ProposeEnergy(0.0); + + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + } + } + + if (type == dielectric_dielectric) { + if (theFinish == polished || theFinish == ground) { + + if (Material1 == Material2) { + theStatus = SameMaterial; + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + } + aMaterialPropertiesTable = Material2->GetMaterialPropertiesTable(); + if (aMaterialPropertiesTable) + Rindex = aMaterialPropertiesTable->GetProperty("RINDEX"); + if (Rindex) { + // Rindex2 = Rindex->GetProperty(thePhotonMomentum); + Rindex2 = Rindex->Value(thePhotonMomentum); + } else { + theStatus = NoRINDEX; + aParticleChange.ProposeTrackStatus(fStopAndKill); + aStep.GetTrack()->SetTrackStatus(fStopAndKill); + + // aParticleChange.ProposeEnergy(0.0); + + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + } + } + } - G4ThreeVector theGlobalPoint = pPostStepPoint->GetPosition(); + if (verboseLevel > 0) { + G4cout << " Photon at Boundary! " << G4endl; + G4cout << " Old Momentum Direction: " << OldMomentum << G4endl; + G4cout << " Old Polarization: " << OldPolarization << G4endl; + } + + G4ThreeVector theGlobalPoint = pPostStepPoint->GetPosition(); - G4Navigator* theNavigator = - G4TransportationManager::GetTransportationManager()-> - GetNavigatorForTracking(); + G4Navigator *theNavigator = G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking(); - G4ThreeVector theLocalPoint = theNavigator-> - GetGlobalToLocalTransform(). - TransformPoint(theGlobalPoint); + G4ThreeVector theLocalPoint = theNavigator->GetGlobalToLocalTransform().TransformPoint(theGlobalPoint); - G4ThreeVector theLocalNormal; // Normal points back into volume + G4ThreeVector theLocalNormal; // Normal points back into volume - G4bool valid; - theLocalNormal = theNavigator->GetLocalExitNormal(&valid); + G4bool valid; + theLocalNormal = theNavigator->GetLocalExitNormal(&valid); - if (valid) { - theLocalNormal = -theLocalNormal; - } - else { - G4cerr << " RichTbG4OpBoundaryProcess/PostStepDoIt(): " - << " The Navigator reports that it returned an invalid normal" - << G4endl; - } + if (valid) { + theLocalNormal = -theLocalNormal; + } else { + G4cerr << " RichTbG4OpBoundaryProcess/PostStepDoIt(): " + << " The Navigator reports that it returned an invalid normal" << G4endl; + } - theGlobalNormal = theNavigator->GetLocalToGlobalTransform(). - TransformAxis(theLocalNormal); - if (OldMomentum * theGlobalNormal > 0.0) { + theGlobalNormal = theNavigator->GetLocalToGlobalTransform().TransformAxis(theLocalNormal); + if (OldMomentum * theGlobalNormal > 0.0) { #ifdef G4DEBUG_OPTICAL - G4cerr << " RichTbG4OpBoundaryProcess/PostStepDoIt(): " - << " theGlobalNormal points the wrong direction " - << G4endl; + G4cerr << " RichTbG4OpBoundaryProcess/PostStepDoIt(): " + << " theGlobalNormal points the wrong direction " << G4endl; #endif - theGlobalNormal = -theGlobalNormal; - } - if (type == dielectric_metal) { - - DielectricMetal(); - - } - else if (type == dielectric_dielectric) { - - if ( theFinish == polishedfrontpainted || - theFinish == groundfrontpainted ) { - if( !G4BooleanRand(theReflectivity) ) { - DoAbsorption(); - } - else { - if ( theFinish == groundfrontpainted ) - theStatus = LambertianReflection; - DoReflection(); - } - } - else { - DielectricDielectric(); - } - } - else { - - G4cerr << " Error: G4BoundaryProcess: illegal boundary type " << G4endl; - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - - } - - NewMomentum = NewMomentum.unit(); - NewPolarization = NewPolarization.unit(); - - if ( verboseLevel > 0) { - G4cout << " New Momentum Direction: " << NewMomentum << G4endl; - G4cout << " New Polarization: " << NewPolarization << G4endl; - if ( theStatus == Undefined ) - G4cout << " *** Undefined *** " << G4endl; - if ( theStatus == FresnelRefraction ) - G4cout << " *** FresnelRefraction *** " << G4endl; - if ( theStatus == FresnelReflection ) - G4cout << " *** FresnelReflection *** " << G4endl; - if ( theStatus == TotalInternalReflection ) - G4cout << " *** TotalInternalReflection *** " << G4endl; - if ( theStatus == LambertianReflection ) - G4cout << " *** LambertianReflection *** " << G4endl; - if ( theStatus == LobeReflection ) - G4cout << " *** LobeReflection *** " << G4endl; - if ( theStatus == SpikeReflection ) - G4cout << " *** SpikeReflection *** " << G4endl; - if ( theStatus == BackScattering ) - G4cout << " *** BackScattering *** " << G4endl; - if ( theStatus == Absorption ) - G4cout << " *** Absorption *** " << G4endl; - if ( theStatus == Detection ) - G4cout << " *** Detection *** " << G4endl; - if ( theStatus == NotAtBoundary ) - G4cout << " *** NotAtBoundary *** " << G4endl; - if ( theStatus == SameMaterial ) - G4cout << " *** SameMaterial *** " << G4endl; - if ( theStatus == StepTooSmall ) - G4cout << " *** StepTooSmall *** " << G4endl; - if ( theStatus == NoRINDEX ) - G4cout << " *** NoRINDEX *** " << G4endl; - } + theGlobalNormal = -theGlobalNormal; + } + if (type == dielectric_metal) { + + DielectricMetal(); + + } else if (type == dielectric_dielectric) { + + if (theFinish == polishedfrontpainted || theFinish == groundfrontpainted) { + if (!G4BooleanRand(theReflectivity)) { + DoAbsorption(); + } else { + if (theFinish == groundfrontpainted) + theStatus = LambertianReflection; + DoReflection(); + } + } else { + DielectricDielectric(); + } + } else { + + G4cerr << " Error: G4BoundaryProcess: illegal boundary type " << G4endl; + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + } - // addtional fix by SE to really kill the photon if it is proposed to be killed. - // SE March 7, 2005. - const G4TrackStatus curTrackStatus = aParticleChange.GetTrackStatus(); - if( curTrackStatus == fStopAndKill ) { - aStep.GetTrack()->SetTrackStatus(fStopAndKill); - } - // end of fix by SE - aParticleChange.ProposeMomentumDirection(NewMomentum); - aParticleChange.ProposePolarization(NewPolarization); + NewMomentum = NewMomentum.unit(); + NewPolarization = NewPolarization.unit(); + + if (verboseLevel > 0) { + G4cout << " New Momentum Direction: " << NewMomentum << G4endl; + G4cout << " New Polarization: " << NewPolarization << G4endl; + if (theStatus == Undefined) + G4cout << " *** Undefined *** " << G4endl; + if (theStatus == FresnelRefraction) + G4cout << " *** FresnelRefraction *** " << G4endl; + if (theStatus == FresnelReflection) + G4cout << " *** FresnelReflection *** " << G4endl; + if (theStatus == TotalInternalReflection) + G4cout << " *** TotalInternalReflection *** " << G4endl; + if (theStatus == LambertianReflection) + G4cout << " *** LambertianReflection *** " << G4endl; + if (theStatus == LobeReflection) + G4cout << " *** LobeReflection *** " << G4endl; + if (theStatus == SpikeReflection) + G4cout << " *** SpikeReflection *** " << G4endl; + if (theStatus == BackScattering) + G4cout << " *** BackScattering *** " << G4endl; + if (theStatus == Absorption) + G4cout << " *** Absorption *** " << G4endl; + if (theStatus == Detection) + G4cout << " *** Detection *** " << G4endl; + if (theStatus == NotAtBoundary) + G4cout << " *** NotAtBoundary *** " << G4endl; + if (theStatus == SameMaterial) + G4cout << " *** SameMaterial *** " << G4endl; + if (theStatus == StepTooSmall) + G4cout << " *** StepTooSmall *** " << G4endl; + if (theStatus == NoRINDEX) + G4cout << " *** NoRINDEX *** " << G4endl; + } - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); -} + // addtional fix by SE to really kill the photon if it is proposed to be killed. + // SE March 7, 2005. + const G4TrackStatus curTrackStatus = aParticleChange.GetTrackStatus(); + if (curTrackStatus == fStopAndKill) { + aStep.GetTrack()->SetTrackStatus(fStopAndKill); + } + // end of fix by SE + aParticleChange.ProposeMomentumDirection(NewMomentum); + aParticleChange.ProposePolarization(NewPolarization); -G4ThreeVector -RichTbG4OpBoundaryProcess::GetFacetNormal(const G4ThreeVector& Momentum, - const G4ThreeVector& Normal ) const -{ - G4ThreeVector FacetNormal; - - if (theModel == unified) { - - /* This function code alpha to a random value taken from the - distribution p(alpha) = g(alpha; 0, sigma_alpha)*std::sin(alpha), - for alpha > 0 and alpha < 90, where g(alpha; 0, sigma_alpha) - is a gaussian distribution with mean 0 and standard deviation - sigma_alpha. */ - - G4double alpha; - - G4double sigma_alpha = 0.0; - if (OpticalSurface) sigma_alpha = OpticalSurface->GetSigmaAlpha(); - - G4double f_max = std::min(1.0,4.*sigma_alpha); - - do { - do { - alpha = G4RandGauss::shoot(0.0,sigma_alpha); - } while (G4UniformRand()*f_max > std::sin(alpha) || alpha >= CLHEP::halfpi ); - - G4double phi = G4UniformRand()*CLHEP::twopi; - - G4double SinAlpha = std::sin(alpha); - G4double CosAlpha = std::cos(alpha); - G4double SinPhi = std::sin(phi); - G4double CosPhi = std::cos(phi); - - G4double unit_x = SinAlpha * CosPhi; - G4double unit_y = SinAlpha * SinPhi; - G4double unit_z = CosAlpha; - - FacetNormal.setX(unit_x); - FacetNormal.setY(unit_y); - FacetNormal.setZ(unit_z); - - G4ThreeVector tmpNormal = Normal; - - FacetNormal.rotateUz(tmpNormal); - } while (Momentum * FacetNormal >= 0.0); - } - else { - - G4double polish = 1.0; - if (OpticalSurface) polish = OpticalSurface->GetPolish(); - - if (polish < 1.0) { - do { - G4ThreeVector smear; - do { - smear.setX(2.*G4UniformRand()-1.0); - smear.setY(2.*G4UniformRand()-1.0); - smear.setZ(2.*G4UniformRand()-1.0); - } while (smear.mag()>1.0); - smear = (1.-polish) * smear; - FacetNormal = Normal + smear; - } while (Momentum * FacetNormal >= 0.0); - FacetNormal = FacetNormal.unit(); - } - else { - FacetNormal = Normal; - } - } - return FacetNormal; + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); } -void RichTbG4OpBoundaryProcess::DielectricMetal() -{ - G4int n = 0; +G4ThreeVector RichTbG4OpBoundaryProcess::GetFacetNormal(const G4ThreeVector &Momentum, + const G4ThreeVector &Normal) const { + G4ThreeVector FacetNormal; + + if (theModel == unified) { + + /* This function code alpha to a random value taken from the + distribution p(alpha) = g(alpha; 0, sigma_alpha)*std::sin(alpha), + for alpha > 0 and alpha < 90, where g(alpha; 0, sigma_alpha) + is a gaussian distribution with mean 0 and standard deviation + sigma_alpha. */ + + G4double alpha; + + G4double sigma_alpha = 0.0; + if (OpticalSurface) + sigma_alpha = OpticalSurface->GetSigmaAlpha(); + + G4double f_max = std::min(1.0, 4. * sigma_alpha); + + do { + do { + alpha = G4RandGauss::shoot(0.0, sigma_alpha); + } while (G4UniformRand() * f_max > std::sin(alpha) || alpha >= CLHEP::halfpi); + + G4double phi = G4UniformRand() * CLHEP::twopi; + + G4double SinAlpha = std::sin(alpha); + G4double CosAlpha = std::cos(alpha); + G4double SinPhi = std::sin(phi); + G4double CosPhi = std::cos(phi); + + G4double unit_x = SinAlpha * CosPhi; + G4double unit_y = SinAlpha * SinPhi; + G4double unit_z = CosAlpha; + + FacetNormal.setX(unit_x); + FacetNormal.setY(unit_y); + FacetNormal.setZ(unit_z); + + G4ThreeVector tmpNormal = Normal; + + FacetNormal.rotateUz(tmpNormal); + } while (Momentum * FacetNormal >= 0.0); + } else { + + G4double polish = 1.0; + if (OpticalSurface) + polish = OpticalSurface->GetPolish(); + + if (polish < 1.0) { + do { + G4ThreeVector smear; + do { + smear.setX(2. * G4UniformRand() - 1.0); + smear.setY(2. * G4UniformRand() - 1.0); + smear.setZ(2. * G4UniformRand() - 1.0); + } while (smear.mag() > 1.0); + smear = (1. - polish) * smear; + FacetNormal = Normal + smear; + } while (Momentum * FacetNormal >= 0.0); + FacetNormal = FacetNormal.unit(); + } else { + FacetNormal = Normal; + } + } + return FacetNormal; +} - do { +void RichTbG4OpBoundaryProcess::DielectricMetal() { + G4int n = 0; - n++; + do { - if( !G4BooleanRand(theReflectivity) && n == 1 ) { + n++; - DoAbsorption(); - break; + if (!G4BooleanRand(theReflectivity) && n == 1) { - } - else { + DoAbsorption(); + break; - if ( theModel == glisur || theFinish == polished || - prob_ss+prob_sl+prob_bs == 0.0 ) { - // G4cout << "reflection" << G4endl; - DoReflection(); + } else { - } else { + if (theModel == glisur || theFinish == polished || prob_ss + prob_sl + prob_bs == 0.0) { + // G4cout << "reflection" << G4endl; + DoReflection(); - if ( n == 1 ) ChooseReflection(); - - if ( theStatus == LambertianReflection ) { - DoReflection(); - } - else if ( theStatus == BackScattering ) { - NewMomentum = -OldMomentum; - NewPolarization = -OldPolarization; - } - else { + } else { - if(theStatus==LobeReflection)theFacetNormal = - GetFacetNormal(OldMomentum,theGlobalNormal); + if (n == 1) + ChooseReflection(); - G4double PdotN = OldMomentum * theFacetNormal; - NewMomentum = OldMomentum - (2.*PdotN)*theFacetNormal; - G4double EdotN = OldPolarization * theFacetNormal; - NewPolarization = -OldPolarization + (2.*EdotN)*theFacetNormal; - } + if (theStatus == LambertianReflection) { + DoReflection(); + } else if (theStatus == BackScattering) { + NewMomentum = -OldMomentum; + NewPolarization = -OldPolarization; + } else { - } + if (theStatus == LobeReflection) + theFacetNormal = GetFacetNormal(OldMomentum, theGlobalNormal); - OldMomentum = NewMomentum; - OldPolarization = NewPolarization; + G4double PdotN = OldMomentum * theFacetNormal; + NewMomentum = OldMomentum - (2. * PdotN) * theFacetNormal; + G4double EdotN = OldPolarization * theFacetNormal; + NewPolarization = -OldPolarization + (2. * EdotN) * theFacetNormal; + } + } - } + OldMomentum = NewMomentum; + OldPolarization = NewPolarization; + } - } while (NewMomentum * theGlobalNormal < 0.0); + } while (NewMomentum * theGlobalNormal < 0.0); } -void RichTbG4OpBoundaryProcess::DielectricDielectric() -{ - G4bool Inside = false; - G4bool Swap = false; - - leap: - - G4bool Through = false; - G4bool Done = false; - - do { - - if (Through) { - Swap = !Swap; - Through = false; - theGlobalNormal = -theGlobalNormal; - G4Swap(Material1,Material2); - G4Swap(&Rindex1,&Rindex2); - } - - if ( theFinish == ground || theFinish == groundbackpainted ) { - theFacetNormal = - GetFacetNormal(OldMomentum,theGlobalNormal); - } - else { - theFacetNormal = theGlobalNormal; - } - - G4double PdotN = OldMomentum * theFacetNormal; - G4double EdotN = OldPolarization * theFacetNormal; - - cost1 = - PdotN; - G4double kCarTolerance = G4GeometryTolerance::GetInstance()->GetSurfaceTolerance(); - - if (std::abs(cost1) < 1.0-kCarTolerance){ - sint1 = std::sqrt(1.-cost1*cost1); - sint2 = sint1*Rindex1/Rindex2; // *** Snell's Law *** - } - else { - sint1 = 0.0; - sint2 = 0.0; - } - - if (sint2 >= 1.0) { - - // Simulate total internal reflection - - if (Swap) Swap = !Swap; - - theStatus = TotalInternalReflection; - - if ( theModel == unified && theFinish != polished ) - ChooseReflection(); - - if ( theStatus == LambertianReflection ) { - DoReflection(); - } - else if ( theStatus == BackScattering ) { - NewMomentum = -OldMomentum; - NewPolarization = -OldPolarization; - } - else { - - - //PdotN = OldMomentum * theFacetNormal; - // NewMomentum = OldMomentum - (2.*PdotN)*theFacetNormal; - // EdotN = OldPolarization * theFacetNormal; - // NewPolarization = -OldPolarization + (2.*EdotN)*theFacetNormal; - - // begin test for total internal reflection - // G4cout<< "test of total internal reflection "<<G4endl; - // For test Kill photons whoch do total internal reflection in Crystal - G4String aMaterial1Name= Material1->GetName(); - // G4cout<< "test Material1 name "<< aMaterial1Name <<G4endl; - G4String aMaterial2Name= Material2->GetName(); - // G4cout<< "test Material2 name "<< aMaterial2Name <<G4endl; - // G4cout << "step " << CurStepNum <<" " << NewMomentum <<G4endl; - - if(Material1->GetName() == CrystalMaterialName ) { - - if( CurStepNum > theMaxPhotStepNumInBoundaryProc ) { - // G4cout << "step " << CurStepNum << G4endl; - DoAbsorption(); - // G4cout << "killed!" << G4endl; - - - } - } - - PdotN = OldMomentum * theFacetNormal; - NewMomentum = OldMomentum - (2.*PdotN)*theFacetNormal; - EdotN = OldPolarization * theFacetNormal; - NewPolarization = -OldPolarization + (2.*EdotN)*theFacetNormal; - - //end of test for killing total internal reflecton - - - } - } - else if (sint2 < 1.0) { - - // Calculate amplitude for transmission (Q = P x N) - - if (cost1 > 0.0) { - cost2 = std::sqrt(1.-sint2*sint2); - } - else { - cost2 = -std::sqrt(1.-sint2*sint2); - } - - G4ThreeVector A_trans, A_paral, E1pp, E1pl; - G4double E1_perp, E1_parl; - - if (sint1 > 0.0) { - A_trans = OldMomentum.cross(theFacetNormal); - A_trans = A_trans.unit(); - E1_perp = OldPolarization * A_trans; - E1pp = E1_perp * A_trans; - E1pl = OldPolarization - E1pp; - E1_parl = E1pl.mag(); - } - else { - A_trans = OldPolarization; - // Here we Follow Jackson's conventions and we set the - // parallel component = 1 in case of a ray perpendicular - // to the surface - E1_perp = 0.0; - E1_parl = 1.0; - } - - G4double s1 = Rindex1*cost1; - G4double E2_perp = 2.*s1*E1_perp/(Rindex1*cost1+Rindex2*cost2); - G4double E2_parl = 2.*s1*E1_parl/(Rindex2*cost1+Rindex1*cost2); - G4double E2_total = E2_perp*E2_perp + E2_parl*E2_parl; - G4double s2 = Rindex2*cost2*E2_total; - - G4double TransCoeff; - - if (cost1 != 0.0) { - TransCoeff = s2/s1; - } - else { - TransCoeff = 0.0; - } - -// modif done by SE to avoid reflections - G4String Material1Name= Material1->GetName(); - G4String Material2Name= Material2->GetName(); -// The QE values already contains the loss at the following two -// boundaries. - if( (Material1Name== PmtQuartzWMaterialName) || - (Material2Name == PmtQuartzWMaterialName) ) TransCoeff=1.0; - if( (Material1Name== PmtPhCathodeMaterialName) || - (Material2Name == PmtPhCathodeMaterialName) ) TransCoeff=1.0; - // now for avoiding loss at software created (artificial) boundaries. - if( (Material1Name== NitrogenGasMaterialName) && - (Material2Name== PMTSMasterMaterialName ) ) TransCoeff=1.0; - if( (Material1Name== PMTSMasterMaterialName) && - (Material2Name == NitrogenGasMaterialName)) TransCoeff=1.0; - - if( (Material1Name== HpdQuartzWMaterialName) || - (Material2Name == HpdQuartzWMaterialName ) ) TransCoeff=1.0; - if( (Material1Name== HpdPhCathodeMaterialName) || - (Material2Name == HpdPhCathodeMaterialName) ) TransCoeff=1.0; - - if( (Material1Name== NitrogenGasMaterialName) && - (Material2Name== HPDSMasterMaterialName ) ) TransCoeff=1.0; - if( (Material1Name== HPDSMasterMaterialName) && - (Material2Name == NitrogenGasMaterialName)) TransCoeff=1.0; - - // end of modif by SE - - - - G4double E2_abs, C_parl, C_perp; - - if ( !G4BooleanRand(TransCoeff) ) { - - // Simulate reflection - - if (Swap) Swap = !Swap; - - theStatus = FresnelReflection; - - if ( theModel == unified && theFinish != polished ) - ChooseReflection(); - - if ( theStatus == LambertianReflection ) { - DoReflection(); - } - else if ( theStatus == BackScattering ) { - NewMomentum = -OldMomentum; - NewPolarization = -OldPolarization; - } - else { - - PdotN = OldMomentum * theFacetNormal; - NewMomentum = OldMomentum - (2.*PdotN)*theFacetNormal; - - if (sint1 > 0.0) { // incident ray oblique - - E2_parl = Rindex2*E2_parl/Rindex1 - E1_parl; - E2_perp = E2_perp - E1_perp; - E2_total = E2_perp*E2_perp + E2_parl*E2_parl; - A_paral = NewMomentum.cross(A_trans); - A_paral = A_paral.unit(); - E2_abs = std::sqrt(E2_total); - C_parl = E2_parl/E2_abs; - C_perp = E2_perp/E2_abs; - - NewPolarization = C_parl*A_paral + C_perp*A_trans; - - } - - else { // incident ray perpendicular - - if (Rindex2 > Rindex1) { - NewPolarization = - OldPolarization; - } - else { - NewPolarization = OldPolarization; - } - - } - } - - // fix made by SE to avoid reflection at the exit of aerogel when the - // polarisation values are unphysical. - // At this dielec-dielec boundary the polarisation sometimes gets unphysical - // values depending upon the angle of incidence. These values eventually - // get tramsmitted to the photon direction. Hence in these cases the - // photon is killed by absorption. - G4bool PolarisOk = true; - // G4cout<<"dielc dielec newpolariation at refl " - // << NewPolarization<<G4endl; - G4String Material1NameA= Material1->GetName(); - G4String Material2NameA= Material2->GetName(); - - if( NewPolarization.x() <= 1.0 && NewPolarization.x() >= -1.0 && - NewPolarization.y() <= 1.0 && NewPolarization.y() >= -1.0 && - NewPolarization.z() <= 1.0 && NewPolarization.z() >= -1.0 ) - { PolarisOk=true;} else { PolarisOk=false;} - - if( ! PolarisOk) { - G4cout<<" Unphysical polarization at dielec dielec boundary for refl " - <<" Material1 Material2 newPolarisation newMomentum " - << Material1NameA<<" "<< Material2NameA - <<" " <<NewPolarization<<" " - << NewMomentum<<G4endl; - DoAbsorption() ; - +void RichTbG4OpBoundaryProcess::DielectricDielectric() { + G4bool Inside = false; + G4bool Swap = false; + +leap: + + G4bool Through = false; + G4bool Done = false; + + do { + + if (Through) { + Swap = !Swap; + Through = false; + theGlobalNormal = -theGlobalNormal; + G4Swap(Material1, Material2); + G4Swap(&Rindex1, &Rindex2); + } + + if (theFinish == ground || theFinish == groundbackpainted) { + theFacetNormal = GetFacetNormal(OldMomentum, theGlobalNormal); + } else { + theFacetNormal = theGlobalNormal; + } + + G4double PdotN = OldMomentum * theFacetNormal; + G4double EdotN = OldPolarization * theFacetNormal; + + cost1 = -PdotN; + G4double kCarTolerance = G4GeometryTolerance::GetInstance()->GetSurfaceTolerance(); + + if (std::abs(cost1) < 1.0 - kCarTolerance) { + sint1 = std::sqrt(1. - cost1 * cost1); + sint2 = sint1 * Rindex1 / Rindex2; // *** Snell's Law *** + } else { + sint1 = 0.0; + sint2 = 0.0; + } + + if (sint2 >= 1.0) { + + // Simulate total internal reflection + + if (Swap) + Swap = !Swap; + + theStatus = TotalInternalReflection; + + if (theModel == unified && theFinish != polished) + ChooseReflection(); + + if (theStatus == LambertianReflection) { + DoReflection(); + } else if (theStatus == BackScattering) { + NewMomentum = -OldMomentum; + NewPolarization = -OldPolarization; + } else { + + // PdotN = OldMomentum * theFacetNormal; + // NewMomentum = OldMomentum - (2.*PdotN)*theFacetNormal; + // EdotN = OldPolarization * theFacetNormal; + // NewPolarization = -OldPolarization + (2.*EdotN)*theFacetNormal; + + // begin test for total internal reflection + // G4cout<< "test of total internal reflection "<<G4endl; + // For test Kill photons whoch do total internal reflection in Crystal + G4String aMaterial1Name = Material1->GetName(); + // G4cout<< "test Material1 name "<< aMaterial1Name <<G4endl; + G4String aMaterial2Name = Material2->GetName(); + // G4cout<< "test Material2 name "<< aMaterial2Name <<G4endl; + // G4cout << "step " << CurStepNum <<" " << NewMomentum <<G4endl; + + if (Material1->GetName() == CrystalMaterialName) { + + if (CurStepNum > theMaxPhotStepNumInBoundaryProc) { + // G4cout << "step " << CurStepNum << G4endl; + DoAbsorption(); + // G4cout << "killed!" << G4endl; + } + } + + PdotN = OldMomentum * theFacetNormal; + NewMomentum = OldMomentum - (2. * PdotN) * theFacetNormal; + EdotN = OldPolarization * theFacetNormal; + NewPolarization = -OldPolarization + (2. * EdotN) * theFacetNormal; + + // end of test for killing total internal reflecton + } + } else if (sint2 < 1.0) { + + // Calculate amplitude for transmission (Q = P x N) + + if (cost1 > 0.0) { + cost2 = std::sqrt(1. - sint2 * sint2); + } else { + cost2 = -std::sqrt(1. - sint2 * sint2); + } + + G4ThreeVector A_trans, A_paral, E1pp, E1pl; + G4double E1_perp, E1_parl; + + if (sint1 > 0.0) { + A_trans = OldMomentum.cross(theFacetNormal); + A_trans = A_trans.unit(); + E1_perp = OldPolarization * A_trans; + E1pp = E1_perp * A_trans; + E1pl = OldPolarization - E1pp; + E1_parl = E1pl.mag(); + } else { + A_trans = OldPolarization; + // Here we Follow Jackson's conventions and we set the + // parallel component = 1 in case of a ray perpendicular + // to the surface + E1_perp = 0.0; + E1_parl = 1.0; + } + + G4double s1 = Rindex1 * cost1; + G4double E2_perp = 2. * s1 * E1_perp / (Rindex1 * cost1 + Rindex2 * cost2); + G4double E2_parl = 2. * s1 * E1_parl / (Rindex2 * cost1 + Rindex1 * cost2); + G4double E2_total = E2_perp * E2_perp + E2_parl * E2_parl; + G4double s2 = Rindex2 * cost2 * E2_total; + + G4double TransCoeff; + + if (cost1 != 0.0) { + TransCoeff = s2 / s1; + } else { + TransCoeff = 0.0; + } + + // modif done by SE to avoid reflections + G4String Material1Name = Material1->GetName(); + G4String Material2Name = Material2->GetName(); + // The QE values already contains the loss at the following two + // boundaries. + if ((Material1Name == PmtQuartzWMaterialName) || (Material2Name == PmtQuartzWMaterialName)) + TransCoeff = 1.0; + if ((Material1Name == PmtPhCathodeMaterialName) || (Material2Name == PmtPhCathodeMaterialName)) + TransCoeff = 1.0; + // now for avoiding loss at software created (artificial) boundaries. + if ((Material1Name == NitrogenGasMaterialName) && (Material2Name == PMTSMasterMaterialName)) + TransCoeff = 1.0; + if ((Material1Name == PMTSMasterMaterialName) && (Material2Name == NitrogenGasMaterialName)) + TransCoeff = 1.0; + + if ((Material1Name == HpdQuartzWMaterialName) || (Material2Name == HpdQuartzWMaterialName)) + TransCoeff = 1.0; + if ((Material1Name == HpdPhCathodeMaterialName) || (Material2Name == HpdPhCathodeMaterialName)) + TransCoeff = 1.0; + + if ((Material1Name == NitrogenGasMaterialName) && (Material2Name == HPDSMasterMaterialName)) + TransCoeff = 1.0; + if ((Material1Name == HPDSMasterMaterialName) && (Material2Name == NitrogenGasMaterialName)) + TransCoeff = 1.0; + + // end of modif by SE + + G4double E2_abs, C_parl, C_perp; + + if (!G4BooleanRand(TransCoeff)) { + + // Simulate reflection + + if (Swap) + Swap = !Swap; + + theStatus = FresnelReflection; + + if (theModel == unified && theFinish != polished) + ChooseReflection(); + + if (theStatus == LambertianReflection) { + DoReflection(); + } else if (theStatus == BackScattering) { + NewMomentum = -OldMomentum; + NewPolarization = -OldPolarization; + } else { + + PdotN = OldMomentum * theFacetNormal; + NewMomentum = OldMomentum - (2. * PdotN) * theFacetNormal; + + if (sint1 > 0.0) { // incident ray oblique + + E2_parl = Rindex2 * E2_parl / Rindex1 - E1_parl; + E2_perp = E2_perp - E1_perp; + E2_total = E2_perp * E2_perp + E2_parl * E2_parl; + A_paral = NewMomentum.cross(A_trans); + A_paral = A_paral.unit(); + E2_abs = std::sqrt(E2_total); + C_parl = E2_parl / E2_abs; + C_perp = E2_perp / E2_abs; + + NewPolarization = C_parl * A_paral + C_perp * A_trans; + + } + + else { // incident ray perpendicular + + if (Rindex2 > Rindex1) { + NewPolarization = -OldPolarization; + } else { + NewPolarization = OldPolarization; } + } + } + + // fix made by SE to avoid reflection at the exit of aerogel when the + // polarisation values are unphysical. + // At this dielec-dielec boundary the polarisation sometimes gets unphysical + // values depending upon the angle of incidence. These values eventually + // get tramsmitted to the photon direction. Hence in these cases the + // photon is killed by absorption. + G4bool PolarisOk = true; + // G4cout<<"dielc dielec newpolariation at refl " + // << NewPolarization<<G4endl; + G4String Material1NameA = Material1->GetName(); + G4String Material2NameA = Material2->GetName(); + + if (NewPolarization.x() <= 1.0 && NewPolarization.x() >= -1.0 && NewPolarization.y() <= 1.0 && + NewPolarization.y() >= -1.0 && NewPolarization.z() <= 1.0 && NewPolarization.z() >= -1.0) { + PolarisOk = true; + } else { + PolarisOk = false; + } + + if (!PolarisOk) { + G4cout << " Unphysical polarization at dielec dielec boundary for refl " + << " Material1 Material2 newPolarisation newMomentum " << Material1NameA << " " << Material2NameA + << " " << NewPolarization << " " << NewMomentum << G4endl; + DoAbsorption(); + } + + // end of fix by SE on 12-1-2004 and copied to this version on 1-3-2005. - // end of fix by SE on 12-1-2004 and copied to this version on 1-3-2005. - - } - else { // photon gets transmitted - - // Simulate transmission/refraction - - Inside = !Inside; - Through = true; - theStatus = FresnelRefraction; - - if (sint1 > 0.0) { // incident ray oblique - - G4double alpha = cost1 - cost2*(Rindex2/Rindex1); - NewMomentum = OldMomentum + alpha*theFacetNormal; - NewMomentum = NewMomentum.unit(); - PdotN = -cost2; - A_paral = NewMomentum.cross(A_trans); - A_paral = A_paral.unit(); - E2_abs = std::sqrt(E2_total); - C_parl = E2_parl/E2_abs; - C_perp = E2_perp/E2_abs; - - NewPolarization = C_parl*A_paral + C_perp*A_trans; - - } - else { // incident ray perpendicular - - NewMomentum = OldMomentum; - NewPolarization = OldPolarization; - - } - } - } - - OldMomentum = NewMomentum.unit(); - OldPolarization = NewPolarization.unit(); - - // G4cout << "newMom and global normal " << NewMomentum << " " << theGlobalNormal << G4endl; - - if (theStatus == FresnelRefraction) { - Done = (NewMomentum * theGlobalNormal <= 0.0); - } - else { - Done = (NewMomentum * theGlobalNormal >= 0.0); - } - - } while (!Done); - - if (Inside && !Swap) { - if( theFinish == polishedbackpainted || - theFinish == groundbackpainted ) { - if( !G4BooleanRand(theReflectivity) ) { - DoAbsorption(); - } - else { - if (theStatus != FresnelRefraction ) { - theGlobalNormal = -theGlobalNormal; - } - else { - Swap = !Swap; - G4Swap(Material1,Material2); - G4Swap(&Rindex1,&Rindex2); - } - if ( theFinish == groundbackpainted ) - theStatus = LambertianReflection; - - DoReflection(); - - theGlobalNormal = -theGlobalNormal; - OldMomentum = NewMomentum; - - goto leap; - } - } - } + } else { // photon gets transmitted + + // Simulate transmission/refraction + + Inside = !Inside; + Through = true; + theStatus = FresnelRefraction; + + if (sint1 > 0.0) { // incident ray oblique + + G4double alpha = cost1 - cost2 * (Rindex2 / Rindex1); + NewMomentum = OldMomentum + alpha * theFacetNormal; + NewMomentum = NewMomentum.unit(); + PdotN = -cost2; + A_paral = NewMomentum.cross(A_trans); + A_paral = A_paral.unit(); + E2_abs = std::sqrt(E2_total); + C_parl = E2_parl / E2_abs; + C_perp = E2_perp / E2_abs; + + NewPolarization = C_parl * A_paral + C_perp * A_trans; + + } else { // incident ray perpendicular + + NewMomentum = OldMomentum; + NewPolarization = OldPolarization; + } + } + } + + OldMomentum = NewMomentum.unit(); + OldPolarization = NewPolarization.unit(); + + // G4cout << "newMom and global normal " << NewMomentum << " " << theGlobalNormal << G4endl; + + if (theStatus == FresnelRefraction) { + Done = (NewMomentum * theGlobalNormal <= 0.0); + } else { + Done = (NewMomentum * theGlobalNormal >= 0.0); + } + + } while (!Done); + + if (Inside && !Swap) { + if (theFinish == polishedbackpainted || theFinish == groundbackpainted) { + if (!G4BooleanRand(theReflectivity)) { + DoAbsorption(); + } else { + if (theStatus != FresnelRefraction) { + theGlobalNormal = -theGlobalNormal; + } else { + Swap = !Swap; + G4Swap(Material1, Material2); + G4Swap(&Rindex1, &Rindex2); + } + if (theFinish == groundbackpainted) + theStatus = LambertianReflection; + + DoReflection(); + + theGlobalNormal = -theGlobalNormal; + OldMomentum = NewMomentum; + + goto leap; + } + } + } } // GetMeanFreePath // --------------- // -G4double RichTbG4OpBoundaryProcess::GetMeanFreePath(const G4Track& , - G4double , - G4ForceCondition* condition) -{ - *condition = Forced; +G4double RichTbG4OpBoundaryProcess::GetMeanFreePath(const G4Track &, G4double, G4ForceCondition *condition) { + *condition = Forced; - return DBL_MAX; + return DBL_MAX; } - diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/proc/RichTbG4OpRayleigh.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/proc/RichTbG4OpRayleigh.cc index 8699f8ec65ffa82a78f2a5a3e97476dea82b48db..4ce3533177833a93b25d9a2eb5cfbff1570695c4 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/proc/RichTbG4OpRayleigh.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcG4/proc/RichTbG4OpRayleigh.cc @@ -24,16 +24,16 @@ // $Id: RichTbG4OpRayleigh.cc,v 1.12 2004/12/02 23:10:57 gum Exp $ // GEANT4 tag $Name: geant4-07-00 $ // -// +// //////////////////////////////////////////////////////////////////////// // Optical Photon Rayleigh Scattering Class Implementation //////////////////////////////////////////////////////////////////////// // -// File: RichTbG4OpRayleigh.cc -// Description: Discrete Process -- Rayleigh scattering of optical -// photons +// File: RichTbG4OpRayleigh.cc +// Description: Discrete Process -- Rayleigh scattering of optical +// photons // Version: 1.0 -// Created: 1996-05-31 +// Created: 1996-05-31 // Author: Juliet Armstrong // Updated: 2001-10-18 by Peter Gumplinger // eliminate unused variable warning on Linux (gcc-2.95.2) @@ -51,344 +51,304 @@ // modif and renamed for extracting info SE 1-3-2005. //////////////////////////////////////////////////////////////////////// -#include "Geant4/G4ios.hh" #include "RichTbG4OpRayleigh.hh" +#include "Geant4/G4ios.hh" #include "RichTbPhotonUserInfoAttach.hh" ///////////////////////// // Class Implementation ///////////////////////// - ////////////// - // Operators - ////////////// +////////////// +// Operators +////////////// // RichTbG4OpRayleigh::operator=(const RichTbG4OpRayleigh &right) // { // } - ///////////////// - // Constructors - ///////////////// +///////////////// +// Constructors +///////////////// -RichTbG4OpRayleigh::RichTbG4OpRayleigh(const G4String& processName) - : G4VDiscreteProcess(processName) -{ +RichTbG4OpRayleigh::RichTbG4OpRayleigh(const G4String &processName) : G4VDiscreteProcess(processName) { - thePhysicsTable = 0; + thePhysicsTable = 0; - DefaultWater = false; + DefaultWater = false; - if (verboseLevel>0) { - G4cout << GetProcessName() << " is created " << G4endl; - } + if (verboseLevel > 0) { + G4cout << GetProcessName() << " is created " << G4endl; + } - BuildThePhysicsTable(); + BuildThePhysicsTable(); } // RichTbG4OpRayleigh::RichTbG4OpRayleigh(const RichTbG4OpRayleigh &right) // { // } - //////////////// - // Destructors - //////////////// +//////////////// +// Destructors +//////////////// -RichTbG4OpRayleigh::~RichTbG4OpRayleigh() -{ - if (thePhysicsTable!= 0) { - thePhysicsTable->clearAndDestroy(); - delete thePhysicsTable; - } +RichTbG4OpRayleigh::~RichTbG4OpRayleigh() { + if (thePhysicsTable != 0) { + thePhysicsTable->clearAndDestroy(); + delete thePhysicsTable; + } } - //////////// - // Methods - //////////// +//////////// +// Methods +//////////// // PostStepDoIt // ------------- // -G4VParticleChange* -RichTbG4OpRayleigh::PostStepDoIt(const G4Track& aTrack, const G4Step& aStep) -{ - aParticleChange.Initialize(aTrack); - - const G4DynamicParticle* aParticle = aTrack.GetDynamicParticle(); - - if (verboseLevel>0) { - G4cout << "Scattering Photon!" << G4endl; - G4cout << "Old Momentum Direction: " - << aParticle->GetMomentumDirection() << G4endl; - G4cout << "Old Polarization: " - << aParticle->GetPolarization() << G4endl; - } - - // find polar angle w.r.t. old polarization vector - - G4double rand = G4UniformRand(); - - G4double CosTheta = std::pow(rand, 1./3.); - G4double SinTheta = std::sqrt(1.-CosTheta*CosTheta); - - if(G4UniformRand() < 0.5)CosTheta = -CosTheta; - - -// Addtions made by SE to save cpu time. -// Kill the photon when -// the stepnumber is very large just to avoid any photon -// going through an in infinite loop through the aerogel -// or any similar material. - G4double totEn = aParticle->GetTotalEnergy(); - const G4double CurStepLen= aStep.GetStepLength(); - const G4int CurStepNum= aTrack.GetCurrentStepNumber() ; - G4bool KillPhotInRayleigh = false; - if( CurStepNum > 1000 && CurStepLen < 0.00000001*CLHEP::mm ) { - KillPhotInRayleigh = true; - G4cout<<" Optical Photon killed in Rayleigh after 1000 steps " - << "current energy step size = " - << totEn<<" "<< CurStepLen <<G4endl; - } - - if(CurStepNum > 5000 ) { - KillPhotInRayleigh = true; - G4cout<<" Optical Photon killed in Rayleigh after 5000 steps" - <<G4endl; - } - - if(KillPhotInRayleigh) { - // aParticleChange.SetStatusChange(fStopAndKill); - aParticleChange.ProposeTrackStatus(fStopAndKill); - aStep.GetTrack()->SetTrackStatus(fStopAndKill); - // aParticleChange.ProposeEnergy(0.0); - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - } - - -// now tag the photon as having rayliegh scattered. - - RichTbRayleighInfoAttach(aTrack); -// end of additions by SE - - - // find azimuthal angle w.r.t old polarization vector - - rand = G4UniformRand(); - - G4double Phi = CLHEP::twopi*rand; - G4double SinPhi = std::sin(Phi); - G4double CosPhi = std::cos(Phi); - - G4double unit_x = SinTheta * CosPhi; - G4double unit_y = SinTheta * SinPhi; - G4double unit_z = CosTheta; - - G4ThreeVector NewPolarization (unit_x,unit_y,unit_z); - - // Rotate new polarization direction into global reference system - - G4ThreeVector OldPolarization = aParticle->GetPolarization(); - OldPolarization = OldPolarization.unit(); - - NewPolarization.rotateUz(OldPolarization); - NewPolarization = NewPolarization.unit(); - - // -- new momentum direction is normal to the new - // polarization vector and in the same plane as the - // old and new polarization vectors -- - - G4ThreeVector NewMomentumDirection = - OldPolarization - NewPolarization * CosTheta; - - if(G4UniformRand() < 0.5)NewMomentumDirection = -NewMomentumDirection; - NewMomentumDirection = NewMomentumDirection.unit(); - - aParticleChange.ProposePolarization(NewPolarization); - - aParticleChange.ProposeMomentumDirection(NewMomentumDirection); - - if (verboseLevel>0) { - G4cout << "New Polarization: " - << NewPolarization << G4endl; - G4cout << "Polarization Change: " - << *(aParticleChange.GetPolarization()) << G4endl; - G4cout << "New Momentum Direction: " - << NewMomentumDirection << G4endl; - G4cout << "Momentum Change: " - << *(aParticleChange.GetMomentumDirection()) << G4endl; - } - - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); +G4VParticleChange *RichTbG4OpRayleigh::PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) { + aParticleChange.Initialize(aTrack); + + const G4DynamicParticle *aParticle = aTrack.GetDynamicParticle(); + + if (verboseLevel > 0) { + G4cout << "Scattering Photon!" << G4endl; + G4cout << "Old Momentum Direction: " << aParticle->GetMomentumDirection() << G4endl; + G4cout << "Old Polarization: " << aParticle->GetPolarization() << G4endl; + } + + // find polar angle w.r.t. old polarization vector + + G4double rand = G4UniformRand(); + + G4double CosTheta = std::pow(rand, 1. / 3.); + G4double SinTheta = std::sqrt(1. - CosTheta * CosTheta); + + if (G4UniformRand() < 0.5) + CosTheta = -CosTheta; + + // Addtions made by SE to save cpu time. + // Kill the photon when + // the stepnumber is very large just to avoid any photon + // going through an in infinite loop through the aerogel + // or any similar material. + G4double totEn = aParticle->GetTotalEnergy(); + const G4double CurStepLen = aStep.GetStepLength(); + const G4int CurStepNum = aTrack.GetCurrentStepNumber(); + G4bool KillPhotInRayleigh = false; + if (CurStepNum > 1000 && CurStepLen < 0.00000001 * CLHEP::mm) { + KillPhotInRayleigh = true; + G4cout << " Optical Photon killed in Rayleigh after 1000 steps " + << "current energy step size = " << totEn << " " << CurStepLen << G4endl; + } + + if (CurStepNum > 5000) { + KillPhotInRayleigh = true; + G4cout << " Optical Photon killed in Rayleigh after 5000 steps" << G4endl; + } + + if (KillPhotInRayleigh) { + // aParticleChange.SetStatusChange(fStopAndKill); + aParticleChange.ProposeTrackStatus(fStopAndKill); + aStep.GetTrack()->SetTrackStatus(fStopAndKill); + // aParticleChange.ProposeEnergy(0.0); + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + } + + // now tag the photon as having rayliegh scattered. + + RichTbRayleighInfoAttach(aTrack); + // end of additions by SE + + // find azimuthal angle w.r.t old polarization vector + + rand = G4UniformRand(); + + G4double Phi = CLHEP::twopi * rand; + G4double SinPhi = std::sin(Phi); + G4double CosPhi = std::cos(Phi); + + G4double unit_x = SinTheta * CosPhi; + G4double unit_y = SinTheta * SinPhi; + G4double unit_z = CosTheta; + + G4ThreeVector NewPolarization(unit_x, unit_y, unit_z); + + // Rotate new polarization direction into global reference system + + G4ThreeVector OldPolarization = aParticle->GetPolarization(); + OldPolarization = OldPolarization.unit(); + + NewPolarization.rotateUz(OldPolarization); + NewPolarization = NewPolarization.unit(); + + // -- new momentum direction is normal to the new + // polarization vector and in the same plane as the + // old and new polarization vectors -- + + G4ThreeVector NewMomentumDirection = OldPolarization - NewPolarization * CosTheta; + + if (G4UniformRand() < 0.5) + NewMomentumDirection = -NewMomentumDirection; + NewMomentumDirection = NewMomentumDirection.unit(); + + aParticleChange.ProposePolarization(NewPolarization); + + aParticleChange.ProposeMomentumDirection(NewMomentumDirection); + + if (verboseLevel > 0) { + G4cout << "New Polarization: " << NewPolarization << G4endl; + G4cout << "Polarization Change: " << *(aParticleChange.GetPolarization()) << G4endl; + G4cout << "New Momentum Direction: " << NewMomentumDirection << G4endl; + G4cout << "Momentum Change: " << *(aParticleChange.GetMomentumDirection()) << G4endl; + } + + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); } // BuildThePhysicsTable for the Rayleigh Scattering process // -------------------------------------------------------- // -void RichTbG4OpRayleigh::BuildThePhysicsTable() -{ -// Builds a table of scattering lengths for each material +void RichTbG4OpRayleigh::BuildThePhysicsTable() { + // Builds a table of scattering lengths for each material + + if (thePhysicsTable) + return; - if (thePhysicsTable) return; + const G4MaterialTable *theMaterialTable = G4Material::GetMaterialTable(); + G4int numOfMaterials = G4Material::GetNumberOfMaterials(); - const G4MaterialTable* theMaterialTable= - G4Material::GetMaterialTable(); - G4int numOfMaterials = G4Material::GetNumberOfMaterials(); + // create a new physics table - // create a new physics table + thePhysicsTable = new G4PhysicsTable(numOfMaterials); - thePhysicsTable = new G4PhysicsTable(numOfMaterials); + // loop for materials - // loop for materials + for (G4int i = 0; i < numOfMaterials; i++) { + G4PhysicsOrderedFreeVector *ScatteringLengths = new G4PhysicsOrderedFreeVector(); - for (G4int i=0 ; i < numOfMaterials; i++) - { - G4PhysicsOrderedFreeVector* ScatteringLengths = - new G4PhysicsOrderedFreeVector(); + G4MaterialPropertiesTable *aMaterialPropertiesTable = (*theMaterialTable)[i]->GetMaterialPropertiesTable(); - G4MaterialPropertiesTable *aMaterialPropertiesTable = - (*theMaterialTable)[i]->GetMaterialPropertiesTable(); - - if(aMaterialPropertiesTable){ + if (aMaterialPropertiesTable) { - G4MaterialPropertyVector* AttenuationLengthVector = - aMaterialPropertiesTable->GetProperty("RAYLEIGH"); + G4MaterialPropertyVector *AttenuationLengthVector = aMaterialPropertiesTable->GetProperty("RAYLEIGH"); - if(!AttenuationLengthVector){ + if (!AttenuationLengthVector) { - if ((*theMaterialTable)[i]->GetName() == "Water") - { - // Call utility routine to Generate - // Rayleigh Scattering Lengths + if ((*theMaterialTable)[i]->GetName() == "Water") { + // Call utility routine to Generate + // Rayleigh Scattering Lengths - DefaultWater = true; + DefaultWater = true; - ScatteringLengths = - RayleighAttenuationLengthGenerator(aMaterialPropertiesTable); - } - } - } + ScatteringLengths = RayleighAttenuationLengthGenerator(aMaterialPropertiesTable); + } + } + } - thePhysicsTable->insertAt(i,ScatteringLengths); - } + thePhysicsTable->insertAt(i, ScatteringLengths); + } } // GetMeanFreePath() // ----------------- // -G4double RichTbG4OpRayleigh::GetMeanFreePath(const G4Track& aTrack, - G4double , - G4ForceCondition* ) -{ - const G4DynamicParticle* aParticle = aTrack.GetDynamicParticle(); - const G4Material* aMaterial = aTrack.GetMaterial(); +G4double RichTbG4OpRayleigh::GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *) { + const G4DynamicParticle *aParticle = aTrack.GetDynamicParticle(); + const G4Material *aMaterial = aTrack.GetMaterial(); - // G4double thePhotonMomentum = aParticle->GetTotalMomentum(); - G4double thePhotonEnergy = aParticle->GetTotalEnergy(); + // G4double thePhotonMomentum = aParticle->GetTotalMomentum(); + G4double thePhotonEnergy = aParticle->GetTotalEnergy(); - G4double AttenuationLength = DBL_MAX; + G4double AttenuationLength = DBL_MAX; - if (aMaterial->GetName() == "Water" && DefaultWater){ + if (aMaterial->GetName() == "Water" && DefaultWater) { - G4bool isOutRange; + G4bool isOutRange; - AttenuationLength = - (*thePhysicsTable)(aMaterial->GetIndex())-> - GetValue(thePhotonEnergy, isOutRange); - } - else { - - G4MaterialPropertiesTable* aMaterialPropertyTable = - aMaterial->GetMaterialPropertiesTable(); - - if(aMaterialPropertyTable){ - G4MaterialPropertyVector* AttenuationLengthVector = - aMaterialPropertyTable->GetProperty("RAYLEIGH"); - if(AttenuationLengthVector){ - //AttenuationLength = AttenuationLengthVector -> - // GetProperty(thePhotonMomentum); - AttenuationLength = AttenuationLengthVector -> - Value(thePhotonEnergy); - } - else{ -// G4cout << "No Rayleigh scattering length specified" << G4endl; - } - } - else{ -// G4cout << "No Rayleigh scattering length specified" << G4endl; - } - } + AttenuationLength = (*thePhysicsTable)(aMaterial->GetIndex())->GetValue(thePhotonEnergy, isOutRange); + } else { - return AttenuationLength; + G4MaterialPropertiesTable *aMaterialPropertyTable = aMaterial->GetMaterialPropertiesTable(); + + if (aMaterialPropertyTable) { + G4MaterialPropertyVector *AttenuationLengthVector = aMaterialPropertyTable->GetProperty("RAYLEIGH"); + if (AttenuationLengthVector) { + // AttenuationLength = AttenuationLengthVector -> + // GetProperty(thePhotonMomentum); + AttenuationLength = AttenuationLengthVector->Value(thePhotonEnergy); + } else { + // G4cout << "No Rayleigh scattering length specified" << G4endl; + } + } else { + // G4cout << "No Rayleigh scattering length specified" << G4endl; + } + } + + return AttenuationLength; } // RayleighAttenuationLengthGenerator() // ------------------------------------ // Private method to compute Rayleigh Scattering Lengths (for water) // -G4PhysicsOrderedFreeVector* -RichTbG4OpRayleigh::RayleighAttenuationLengthGenerator(G4MaterialPropertiesTable *aMPT) -{ - // Physical Constants - - // isothermal compressibility of water - G4double betat = 7.658e-23*CLHEP::m3/CLHEP::MeV; +G4PhysicsOrderedFreeVector *RichTbG4OpRayleigh::RayleighAttenuationLengthGenerator(G4MaterialPropertiesTable *aMPT) { + // Physical Constants - // K Boltzman - G4double kboltz = 8.61739e-11*CLHEP::MeV/CLHEP::kelvin; + // isothermal compressibility of water + G4double betat = 7.658e-23 * CLHEP::m3 / CLHEP::MeV; - // Temperature of water is 10 degrees celsius - // conversion to CLHEP::kelvin: - // TCelsius = TKelvin - 273.15 => 273.15 + 10 = 283.15 - G4double temp = 283.15*CLHEP::kelvin; + // K Boltzman + G4double kboltz = 8.61739e-11 * CLHEP::MeV / CLHEP::kelvin; - // Retrieve vectors for refraction index - // and photon momentum from the material properties table + // Temperature of water is 10 degrees celsius + // conversion to CLHEP::kelvin: + // TCelsius = TKelvin - 273.15 => 273.15 + 10 = 283.15 + G4double temp = 283.15 * CLHEP::kelvin; - G4MaterialPropertyVector* Rindex = aMPT->GetProperty("RINDEX"); + // Retrieve vectors for refraction index + // and photon momentum from the material properties table - G4double refsq; - G4double e; - G4double xlambda; - G4double c1, c2, c3, c4; - G4double Dist; - G4double refraction_index; + G4MaterialPropertyVector *Rindex = aMPT->GetProperty("RINDEX"); - G4PhysicsOrderedFreeVector *RayleighScatteringLengths = - new G4PhysicsOrderedFreeVector(); + G4double refsq; + G4double e; + G4double xlambda; + G4double c1, c2, c3, c4; + G4double Dist; + G4double refraction_index; - if (Rindex ) { + G4PhysicsOrderedFreeVector *RayleighScatteringLengths = new G4PhysicsOrderedFreeVector(); - for (size_t i = 0; i < Rindex->GetVectorLength(); i++) { + if (Rindex) { - e = Rindex->Energy(i); + for (size_t i = 0; i < Rindex->GetVectorLength(); i++) { - refraction_index = (*Rindex)[i]; + e = Rindex->Energy(i); - refsq = refraction_index*refraction_index; - xlambda = CLHEP::h_Planck*CLHEP::c_light/e; + refraction_index = (*Rindex)[i]; - if (verboseLevel>0) { - G4cout << Rindex->Energy(i) << " CLHEP::MeV\t"; - G4cout << xlambda << " mm\t"; - } + refsq = refraction_index * refraction_index; + xlambda = CLHEP::h_Planck * CLHEP::c_light / e; - c1 = 1 / (6.0 * CLHEP::pi); - c2 = std::pow((2.0 * CLHEP::pi / xlambda), 4); - c3 = std::pow( ( (refsq - 1.0) * (refsq + 2.0) / 3.0 ), 2); - c4 = betat * temp * kboltz; + if (verboseLevel > 0) { + G4cout << Rindex->Energy(i) << " CLHEP::MeV\t"; + G4cout << xlambda << " mm\t"; + } - Dist = 1.0 / (c1*c2*c3*c4); + c1 = 1 / (6.0 * CLHEP::pi); + c2 = std::pow((2.0 * CLHEP::pi / xlambda), 4); + c3 = std::pow(((refsq - 1.0) * (refsq + 2.0) / 3.0), 2); + c4 = betat * temp * kboltz; - if (verboseLevel>0) { - G4cout << Dist << " mm" << G4endl; - } - RayleighScatteringLengths-> - InsertValues(Rindex->Energy(i), Dist); - } - - } - + Dist = 1.0 / (c1 * c2 * c3 * c4); + if (verboseLevel > 0) { + G4cout << Dist << " mm" << G4endl; + } + RayleighScatteringLengths->InsertValues(Rindex->Energy(i), Dist); + } + } - return RayleighScatteringLengths; + return RayleighScatteringLengths; } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbAnalysisManager.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbAnalysisManager.cc index 8cc098ea7ac465f37ca1470604c8d7c974f6f8f9..eb8b7df451b05519f1550a066077beaf4f1030c2 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbAnalysisManager.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbAnalysisManager.cc @@ -1,762 +1,736 @@ -#include "Geant4/G4Timer.hh" #include "RichTbAnalysisManager.hh" -#include "Geant4/globals.hh" -#include <fstream> -#include <memory> -#include <ctype.h> -#include <cstdlib> -#include "Geant4/G4ios.hh" -#include "Geant4/G4Run.hh" +#include "CLHEP/Units/SystemOfUnits.h" #include "Geant4/G4Event.hh" +#include "Geant4/G4HCofThisEvent.hh" +#include "Geant4/G4Run.hh" +#include "Geant4/G4SDManager.hh" +#include "Geant4/G4SteppingManager.hh" +#include "Geant4/G4Timer.hh" #include "Geant4/G4Track.hh" -#include "Geant4/G4VVisManager.hh" -#include "Geant4/G4TrajectoryContainer.hh" #include "Geant4/G4Trajectory.hh" -#include "Geant4/G4SteppingManager.hh" -#include "Geant4/G4SDManager.hh" -#include "Geant4/G4HCofThisEvent.hh" -#include "RichTbRunConfig.hh" +#include "Geant4/G4TrajectoryContainer.hh" #include "Geant4/G4VHitsCollection.hh" -#include "RichTbHit.hh" +#include "Geant4/G4VVisManager.hh" +#include "Geant4/G4ios.hh" +#include "Geant4/globals.hh" #include "RichTbCounter.hh" -#include "RichTbMiscNames.hh" #include "RichTbGeometryParameters.hh" -#include <TH1D.h> +#include "RichTbHit.hh" +#include "RichTbMaterialParameters.hh" +#include "RichTbMiscNames.hh" +#include "RichTbRunConfig.hh" +#include <CLHEP/Units/SystemOfUnits.h> #include <TFile.h> +#include <TH1D.h> #include <TTree.h> -#include <CLHEP/Units/SystemOfUnits.h> +#include <cstdlib> +#include <ctype.h> +#include <fstream> #include <math.h> -#include "RichTbMaterialParameters.hh" -#include "CLHEP/Units/SystemOfUnits.h" - +#include <memory> RichTbAnalysisManager *RichTbAnalysisManager::RichTbAnalysisInstance = 0; -RichTbAnalysisManager::RichTbAnalysisManager() -{ - // : analysisFactory(0), tree(0),treeNt(0), hfactory(0),nfactory(0) - - fRootFile=0; - for (G4int k=0; k<MaxHisto; k++) fHisto[k] = 0; - fNtuple1=0; - fPhotonXCoord=0; - fPhotonYCoord=0; - fPhotonZCoord=0; - fPhotonXYCoord=0; - fPhotonXYCoord15=0; - fPhotonWidthProfile=0; - fPhotonXYCoordProfile=0; - fPhotonXYCoordProfileCut=0; - fPhotonZCoord=0; - fPhotonZAngle=0; - fCherenkovAngle=0; - fCherenkovAngleCut=0; - fRadiusVsWLProfile=0; - fRadiusVsWL=0; - fSpectrum=0; - fSpectrumPostMirror=0; - fSpectrumPreMirror=0; - - // RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); - - // G4String outputFileName= "testHistoFile"; - - // G4String dirName = rConfig->getOutputHistoDirName(); - // G4String aHistoFileName = "histofile"; - - //G4String outputHistoFileName= aHistoFileName; - - //G4String outputHistoFileName = aHistoFileName; - // G4String outputHistoFileName = dirName + aHistoFileName; - - // analysisFactory = AIDA_createAnalysisFactory(); - - //std::auto_ptr<AIDA::IAnalysisFactory> af( AIDA_createAnalysisFactory() ); - - // analysisFactory = af; - - // if (analysisFactory) { - // AIDA::ITreeFactory * treeFactory = analysisFactory->createTreeFactory(); - // if (treeFactory) { - // tree = treeFactory-> - //create(outputHistoFileName, "hbook", false, true); - // tree = treeFactory->create(outputHistoFileName,"hbook", - // false,true,""); - - // treeNt = treeFactory-> - //create(OutputNtFileName,"hbook",false,true); - - // delete treeFactory; // Will not delete the ITree. - // hfactory = analysisFactory->createHistogramFactory(*tree); - // nfactory =analysisFactory->createTupleFactory(*treeNt); - - // } - // } -} - - - - -RichTbAnalysisManager *RichTbAnalysisManager::getInstance() -{ - if (RichTbAnalysisInstance == 0) { - RichTbAnalysisInstance = new RichTbAnalysisManager(); - } - return RichTbAnalysisInstance; - +RichTbAnalysisManager::RichTbAnalysisManager() { + // : analysisFactory(0), tree(0),treeNt(0), hfactory(0),nfactory(0) + + fRootFile = 0; + for (G4int k = 0; k < MaxHisto; k++) + fHisto[k] = 0; + fNtuple1 = 0; + fPhotonXCoord = 0; + fPhotonYCoord = 0; + fPhotonZCoord = 0; + fPhotonXYCoord = 0; + fPhotonXYCoord15 = 0; + fPhotonWidthProfile = 0; + fPhotonXYCoordProfile = 0; + fPhotonXYCoordProfileCut = 0; + fPhotonZCoord = 0; + fPhotonZAngle = 0; + fCherenkovAngle = 0; + fCherenkovAngleCut = 0; + fRadiusVsWLProfile = 0; + fRadiusVsWL = 0; + fSpectrum = 0; + fSpectrumPostMirror = 0; + fSpectrumPreMirror = 0; + + // RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); + + // G4String outputFileName= "testHistoFile"; + + // G4String dirName = rConfig->getOutputHistoDirName(); + // G4String aHistoFileName = "histofile"; + + // G4String outputHistoFileName= aHistoFileName; + + // G4String outputHistoFileName = aHistoFileName; + // G4String outputHistoFileName = dirName + aHistoFileName; + + // analysisFactory = AIDA_createAnalysisFactory(); + + // std::auto_ptr<AIDA::IAnalysisFactory> af( AIDA_createAnalysisFactory() ); + + // analysisFactory = af; + + // if (analysisFactory) { + // AIDA::ITreeFactory * treeFactory = analysisFactory->createTreeFactory(); + // if (treeFactory) { + // tree = treeFactory-> + // create(outputHistoFileName, "hbook", false, true); + // tree = treeFactory->create(outputHistoFileName,"hbook", + // false,true,""); + + // treeNt = treeFactory-> + // create(OutputNtFileName,"hbook",false,true); + + // delete treeFactory; // Will not delete the ITree. + // hfactory = analysisFactory->createHistogramFactory(*tree); + // nfactory =analysisFactory->createTupleFactory(*treeNt); + + // } + // } } - -void RichTbAnalysisManager::InitializeCounters() -{ - iTimer = new G4Timer; - +RichTbAnalysisManager *RichTbAnalysisManager::getInstance() { + if (RichTbAnalysisInstance == 0) { + RichTbAnalysisInstance = new RichTbAnalysisManager(); + } + return RichTbAnalysisInstance; } - -void RichTbAnalysisManager::BookHisto() -{ - RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); - - G4String outputHistoFileName = - rConfig->getOutputHistoFileName(); - // G4String OutputNtFileName= rConfig->getOutputNtupleFileName(); - fRootFile = new TFile(outputHistoFileName,"RECREATE"); - if(!fRootFile) { - G4cout << " RichTBAnalysis Manager::book :" - << " problem creating the ROOT TFile "<< outputHistoFileName - << G4endl; - } - - fHisto[0] = new TH1D("1", "Example random number histo ", 100, 0., 100.0); - if (!fHisto[0]) G4cout << "\n can't create histo 1" << G4endl; - - - //const double p = 2.78; - - fRadiatorRefIndex = new TH2D("RadiatorRefIndex", "RefIndex - 1 vs Wavelength ", 80, 200, 800.0, 120, 0.3, 0.9); - fRadiatorRefIndex->SetXTitle("#lambda [nm]"); - fRadiatorRefIndex->SetYTitle("n-1"); - fRadiatorRefIndex->SetMarkerStyle(8); - fRadiatorRefIndex->SetMarkerColor(kBlue); - - - - fRadiatorRefIndexHits = new TProfile("RadiatorRefIndexHits", "RefIndex -1 vs Wavelength for photons creating hits", - 80, 200, 800.0, 0.3, 0.9); - - fPhotonXCoord = new TH1D("100", "Photon X location on frame " , 100,-350.0, 350.0); - fPhotonYCoord = new TH1D("101", "Photon Y location on frame " , 100,-350.0, +350.0); - fPhotonZCoord = new TH1D("102", "Photon Z location on frame " , 100, -400.0, -50.0); - - // fPhotonXYCoord = new TH2D("103", "Photon location on frame " , 150, -208.5, 208.5, 150, -208.5, 208.5); - fPhotonXYCoord = new TH2D("103", "Photon location on frame " , 200, -70.0, 70.0, 200, -70.0, 70.0); - - - fPhotonWidthProfile = new TH1D("104", "Cherenkov ring radius", 100, 45., 63.5); - fPhotonXYCoordProfile = new TProfile("105", "Profile Photon location on frame", 100, -60.0, 60.0, -60.0, -20.0); - fPhotonXYCoordProfileCut = new TProfile("106", "Profile Photon location on frame - cut", 100, -30.0, 30.0, -60.0, -20.0); - - fPhotonZAngle = new TH1D("200", "Photon Z angle on Photon frame " , 100, -2, 2); - fCherenkovAngle = new TH1D("201", "Cherenkov Angle " , 100, 0.75, 0.93); - fCherenkovAngleCut = new TH1D("202", "Cherenkov Angle - cut " , 100, 0.80, 0.90); - - fRadiusVsWL = new TH2D("300", "WaveLenght vs Radius " , 400, 200., 3000., 100, 56., 59.); - fRadiusVsWLProfile = new TProfile("301", "WaveLenght Profile vs Radius", 200, 200., 3000., 56.0, 59.0); - fSpectrum = new TH1D("302", "Photons spectrum on PMTs frame " , 200, 300.0, 3000.0); - fSpectrumPostMirror = new TH1D("303", "Photons spectrum post Mirror " , 200, 300.0, 3000.0); - fSpectrumPreMirror = new TH1D("304", "Photons spectrum pre Mirror " , 200, 300.0, 3000.0); - - fCkvRadiusVsEmisPtPhoton = new TProfile ("310","CherenkovRadius vs Emission Point for photons", 80, -260.0,-220.0,50.0, 70.0); - fEmisPtPhoton = new TH1D("312","Emission point for photons", 80,-260.0,-220.0); - fEmisPtPhoton->SetXTitle("z [mm]"); - fEmisPtPrimaryTrackPhoton = new TH1D("314","Emission point for photons from PrimaryTrack ", 80,-260.0,-220.0); - fEmisPtPrimaryTrackPhoton->SetXTitle("z [mm]"); - - fGeneratedCkvPhoton = new TH1D("320", "Generated Cherenkov angle for Photons", 60, 0.75, 0.95); - - fTIRXYLocationPhoton = new TH2D("TIRXYLocationPhoton","TIR Location for Photons which reached pmt plane", - 80,-80.0,80.0,40,-40.0,40.0); - - fXYRadiatorDnsPhoton = new TH2D("fXYRadiatorDnsPhoton", "Dns XY location for photons", - 80, -80.0, 80.0,40, -40.0,40.0); - - fXYRadiatorTIRDnsPhoton = new TH2D("fXYRadiatorTIRDnsPhoton", "TIR Dns XY location for photons", - 80, -80.0, 80.0,40, -40.0,40.0); - fXYRadiatorRFRDnsPhoton = new TH2D("fXYRadiatorRFRDnsPhoton", "RFR Dns XY location for photons", - 80, -80.0, 80.0,40, -40.0,40.0); - fMIRXYLocationPhoton = new TH2D("fMIRXYLocationPhoton", "Mirror XY location for photons which reached pmt plane", - 80, -80.0, 80.0,40, -40.0,40.0); - - fRFRXYLocationPhoton = new TH2D("fRFRXYLocationPhoton","Exit plane location for photons which reached pmt plane", - 80, -80.0, 80.0,40, -40.0,40.0); - - fGlobalHitXYCoordPeOrigin = new TH2D("500", "GlobalHitPeOriginXYCoord", 220 , -110.0,110.0,80,-40.0,40.0); - fGlobalHitXYCoord = new TH2D("510", "GlobalHitXYCoord", 220 , -110.0,110.0, 80,-40.0,40.0); - - fGlobalPixelCenterXYCoord = new TH2D("515", "GlobalPixelCenterXYCoord", 220 , -110.0,110.0,80,-40.0,40.0); - - - fNumHitInEvent = new TH1D ("600"," Number of Hits per event ", 40, 0.0, 40.0); - - fNumHitInEventCentralPMT = new TH1D ("602", - "Number of Hits per event (in the 8 PMTs near the beamline)", 90, 0.0, 90.0); - fNumHitInEventCentralPMT->SetXTitle("Hits per Event"); - - fNumHitInEventCentralPMTJura = new TH1D ("604", - " Number of Hits per event (in the 2 PMTs near the beamline on Jura side)", 60, 0.0, 60.0); - fNumHitInEventCentralPMTSaleve = new TH1D ("606", - " Number of Hits per event (in the 2 PMTs near the beamline on Saleve side)", 60, 0.0, 60.0); - - - fNumHitInPMT0 = new TH1D ("650","Number of Hits per event in PMT0" , 20, 0.0,20.0); - fNumHitInPMT1 = new TH1D ("651","Number of Hits per event in PMT1" , 20, 0.0,20.0); - fNumHitInPMT2 = new TH1D ("652","Number of Hits per event in PMT2" , 20, 0.0,20.0); - fNumHitInPMT3 = new TH1D ("653","Number of Hits per event in PMT3" , 20, 0.0,20.0); - fNumHitInPMT4 = new TH1D ("654","Number of Hits per event in PMT4" , 20, 0.0,20.0); - fNumHitInPMT5 = new TH1D ("655","Number of Hits per event in PMT5" , 20, 0.0,20.0); - fNumHitInPMT6 = new TH1D ("656","Number of Hits per event in PMT6" , 20, 0.0,20.0); - fNumHitInPMT7 = new TH1D ("657","Number of Hits per event in PMT7" , 20, 0.0,20.0); - fNumHitInPMT8 = new TH1D ("658","Number of Hits per event in PMT8" , 20, 0.0,20.0); - fNumHitInPMT9 = new TH1D ("659","Number of Hits per event in PMT9" , 20, 0.0,20.0); - fNumHitInPMT10 = new TH1D ("6510","Number of Hits per event in PMT10" , 20, 0.0,20.0); - fNumHitInPMT11 = new TH1D ("6511","Number of Hits per event in PMT11" , 20, 0.0,20.0); - fNumHitInPMT12 = new TH1D ("6512","Number of Hits per event in PMT12" , 20, 0.0,20.0); - fNumHitInPMT13 = new TH1D ("6513","Number of Hits per event in PMT13" , 20, 0.0,20.0); - fNumHitInPMT14 = new TH1D ("6514","Number of Hits per event in PMT14" , 20, 0.0,20.0); - fNumHitInPMT15 = new TH1D ("6515","Number of Hits per event in PMT15" , 20, 0.0,20.0); - - G4double radMax = 70.0; - G4double radMin = 50.0; - G4double radNBins = 150; - radiusInPMT0 = new TH1D ("rIn0","Hit Coordinate Radius on PMT Plane (PMT0)" , radNBins, radMin,radMax); - radiusInPMT1 = new TH1D ("rIn1","Hit Coordinate Radius on PMT Plane (PMT1)" , radNBins, radMin,radMax); - radiusInPMT2 = new TH1D ("rIn2","Hit Coordinate Radius on PMT Plane (PMT2)" , radNBins, radMin,radMax); - radiusInPMT3 = new TH1D ("rIn3","Hit Coordinate Radius on PMT Plane (PMT3)" , radNBins, radMin,radMax); - radiusInPMT4 = new TH1D ("rIn4","Hit Coordinate Radius on PMT Plane (PMT4)" , radNBins, radMin,radMax); - radiusInPMT5 = new TH1D ("rIn5","Hit Coordinate Radius on PMT Plane (PMT5)" , radNBins, radMin,radMax); - radiusInPMT6 = new TH1D ("rIn6","Hit Coordinate Radius on PMT Plane (PMT6)" , radNBins, radMin,radMax); - radiusInPMT7 = new TH1D ("rIn7","Hit Coordinate Radius on PMT Plane (PMT7)" , radNBins, radMin,radMax); - radiusInPMT8 = new TH1D ("rIn8","Hit Coordinate Radius on PMT Plane (PMT8)" , radNBins, radMin,radMax); - radiusInPMT9 = new TH1D ("rIn9","Hit Coordinate Radius on PMT Plane (PMT9)" , radNBins, radMin,radMax); - radiusInPMT10 = new TH1D ("rIn10","Hit Coordinate Radius on PMT Plane (PMT10)" , radNBins, radMin,radMax); - radiusInPMT11 = new TH1D ("rIn11","Hit Coordinate Radius on PMT Plane (PMT11)" , radNBins, radMin,radMax); - radiusInPMT12 = new TH1D ("rIn12","Hit Coordinate Radius on PMT Plane (PMT12)" , radNBins, radMin,radMax); - radiusInPMT13 = new TH1D ("rIn13","Hit Coordinate Radius on PMT Plane (PMT13)" , radNBins, radMin,radMax); - radiusInPMT14 = new TH1D ("rIn14","Hit Coordinate Radius on PMT Plane (PMT14)" , radNBins, radMin,radMax); - radiusInPMT15 = new TH1D ("rIn15","Hit Coordinate Radius on PMT Plane (PMT15)" , radNBins, radMin,radMax); - radiusInPMT0->SetXTitle("r [mm]"); - radiusInPMT1->SetXTitle("r [mm]"); - radiusInPMT2->SetXTitle("r [mm]"); - radiusInPMT3->SetXTitle("r [mm]"); - radiusInPMT4->SetXTitle("r [mm]"); - radiusInPMT5->SetXTitle("r [mm]"); - radiusInPMT6->SetXTitle("r [mm]"); - radiusInPMT7->SetXTitle("r [mm]"); - radiusInPMT8->SetXTitle("r [mm]"); - radiusInPMT9->SetXTitle("r [mm]"); - radiusInPMT10->SetXTitle("r [mm]"); - radiusInPMT11->SetXTitle("r [mm]"); - radiusInPMT12->SetXTitle("r [mm]"); - radiusInPMT13->SetXTitle("r [mm]"); - radiusInPMT14->SetXTitle("r [mm]"); - radiusInPMT15->SetXTitle("r [mm]"); - - fGlobalHitXYCoord15 = new TH2D("GlobalHitXYCoord", "Global Hit XY-Coordinate", 220 , -110.0,110.0, 220,-110.0,110.0); - fGlobalHitXYCoord15->SetXTitle("x [mm]"); - fGlobalHitXYCoord15->SetYTitle("y [mm]"); - - - fNtuple1 = new TTree("10", "RichTbNtup"); - fNtuple1->Branch("NtupVar1", &fNtupVar1, "NtupVar1/D"); - fNtuple1->Branch("NtupVar2", &fNtupVar2, "NtupVar2/D"); - - - BookHistoHpd(); - - G4cout<<" Histogram file created "<<G4endl; - +void RichTbAnalysisManager::InitializeCounters() { iTimer = new G4Timer; } + +void RichTbAnalysisManager::BookHisto() { + RichTbRunConfig *rConfig = RichTbRunConfig::getRunConfigInstance(); + + G4String outputHistoFileName = rConfig->getOutputHistoFileName(); + // G4String OutputNtFileName= rConfig->getOutputNtupleFileName(); + fRootFile = new TFile(outputHistoFileName, "RECREATE"); + if (!fRootFile) { + G4cout << " RichTBAnalysis Manager::book :" + << " problem creating the ROOT TFile " << outputHistoFileName << G4endl; + } + + fHisto[0] = new TH1D("1", "Example random number histo ", 100, 0., 100.0); + if (!fHisto[0]) + G4cout << "\n can't create histo 1" << G4endl; + + // const double p = 2.78; + + fRadiatorRefIndex = new TH2D("RadiatorRefIndex", "RefIndex - 1 vs Wavelength ", 80, 200, 800.0, 120, 0.3, 0.9); + fRadiatorRefIndex->SetXTitle("#lambda [nm]"); + fRadiatorRefIndex->SetYTitle("n-1"); + fRadiatorRefIndex->SetMarkerStyle(8); + fRadiatorRefIndex->SetMarkerColor(kBlue); + + fRadiatorRefIndexHits = new TProfile("RadiatorRefIndexHits", "RefIndex -1 vs Wavelength for photons creating hits", + 80, 200, 800.0, 0.3, 0.9); + + fPhotonXCoord = new TH1D("100", "Photon X location on frame ", 100, -350.0, 350.0); + fPhotonYCoord = new TH1D("101", "Photon Y location on frame ", 100, -350.0, +350.0); + fPhotonZCoord = new TH1D("102", "Photon Z location on frame ", 100, -400.0, -50.0); + + // fPhotonXYCoord = new TH2D("103", "Photon location on frame " , 150, -208.5, 208.5, 150, -208.5, 208.5); + fPhotonXYCoord = new TH2D("103", "Photon location on frame ", 200, -70.0, 70.0, 200, -70.0, 70.0); + + fPhotonWidthProfile = new TH1D("104", "Cherenkov ring radius", 100, 45., 63.5); + fPhotonXYCoordProfile = new TProfile("105", "Profile Photon location on frame", 100, -60.0, 60.0, -60.0, -20.0); + fPhotonXYCoordProfileCut = + new TProfile("106", "Profile Photon location on frame - cut", 100, -30.0, 30.0, -60.0, -20.0); + + fPhotonZAngle = new TH1D("200", "Photon Z angle on Photon frame ", 100, -2, 2); + fCherenkovAngle = new TH1D("201", "Cherenkov Angle ", 100, 0.75, 0.93); + fCherenkovAngleCut = new TH1D("202", "Cherenkov Angle - cut ", 100, 0.80, 0.90); + + fRadiusVsWL = new TH2D("300", "WaveLenght vs Radius ", 400, 200., 3000., 100, 56., 59.); + fRadiusVsWLProfile = new TProfile("301", "WaveLenght Profile vs Radius", 200, 200., 3000., 56.0, 59.0); + fSpectrum = new TH1D("302", "Photons spectrum on PMTs frame ", 200, 300.0, 3000.0); + fSpectrumPostMirror = new TH1D("303", "Photons spectrum post Mirror ", 200, 300.0, 3000.0); + fSpectrumPreMirror = new TH1D("304", "Photons spectrum pre Mirror ", 200, 300.0, 3000.0); + + fCkvRadiusVsEmisPtPhoton = + new TProfile("310", "CherenkovRadius vs Emission Point for photons", 80, -260.0, -220.0, 50.0, 70.0); + fEmisPtPhoton = new TH1D("312", "Emission point for photons", 80, -260.0, -220.0); + fEmisPtPhoton->SetXTitle("z [mm]"); + fEmisPtPrimaryTrackPhoton = new TH1D("314", "Emission point for photons from PrimaryTrack ", 80, -260.0, -220.0); + fEmisPtPrimaryTrackPhoton->SetXTitle("z [mm]"); + + fGeneratedCkvPhoton = new TH1D("320", "Generated Cherenkov angle for Photons", 60, 0.75, 0.95); + + fTIRXYLocationPhoton = new TH2D("TIRXYLocationPhoton", "TIR Location for Photons which reached pmt plane", 80, -80.0, + 80.0, 40, -40.0, 40.0); + + fXYRadiatorDnsPhoton = + new TH2D("fXYRadiatorDnsPhoton", "Dns XY location for photons", 80, -80.0, 80.0, 40, -40.0, 40.0); + + fXYRadiatorTIRDnsPhoton = + new TH2D("fXYRadiatorTIRDnsPhoton", "TIR Dns XY location for photons", 80, -80.0, 80.0, 40, -40.0, 40.0); + fXYRadiatorRFRDnsPhoton = + new TH2D("fXYRadiatorRFRDnsPhoton", "RFR Dns XY location for photons", 80, -80.0, 80.0, 40, -40.0, 40.0); + fMIRXYLocationPhoton = new TH2D("fMIRXYLocationPhoton", "Mirror XY location for photons which reached pmt plane", 80, + -80.0, 80.0, 40, -40.0, 40.0); + + fRFRXYLocationPhoton = new TH2D("fRFRXYLocationPhoton", "Exit plane location for photons which reached pmt plane", 80, + -80.0, 80.0, 40, -40.0, 40.0); + + fGlobalHitXYCoordPeOrigin = new TH2D("500", "GlobalHitPeOriginXYCoord", 220, -110.0, 110.0, 80, -40.0, 40.0); + fGlobalHitXYCoord = new TH2D("510", "GlobalHitXYCoord", 220, -110.0, 110.0, 80, -40.0, 40.0); + + fGlobalPixelCenterXYCoord = new TH2D("515", "GlobalPixelCenterXYCoord", 220, -110.0, 110.0, 80, -40.0, 40.0); + + fNumHitInEvent = new TH1D("600", " Number of Hits per event ", 40, 0.0, 40.0); + + fNumHitInEventCentralPMT = + new TH1D("602", "Number of Hits per event (in the 8 PMTs near the beamline)", 90, 0.0, 90.0); + fNumHitInEventCentralPMT->SetXTitle("Hits per Event"); + + fNumHitInEventCentralPMTJura = + new TH1D("604", " Number of Hits per event (in the 2 PMTs near the beamline on Jura side)", 60, 0.0, 60.0); + fNumHitInEventCentralPMTSaleve = + new TH1D("606", " Number of Hits per event (in the 2 PMTs near the beamline on Saleve side)", 60, 0.0, 60.0); + + fNumHitInPMT0 = new TH1D("650", "Number of Hits per event in PMT0", 20, 0.0, 20.0); + fNumHitInPMT1 = new TH1D("651", "Number of Hits per event in PMT1", 20, 0.0, 20.0); + fNumHitInPMT2 = new TH1D("652", "Number of Hits per event in PMT2", 20, 0.0, 20.0); + fNumHitInPMT3 = new TH1D("653", "Number of Hits per event in PMT3", 20, 0.0, 20.0); + fNumHitInPMT4 = new TH1D("654", "Number of Hits per event in PMT4", 20, 0.0, 20.0); + fNumHitInPMT5 = new TH1D("655", "Number of Hits per event in PMT5", 20, 0.0, 20.0); + fNumHitInPMT6 = new TH1D("656", "Number of Hits per event in PMT6", 20, 0.0, 20.0); + fNumHitInPMT7 = new TH1D("657", "Number of Hits per event in PMT7", 20, 0.0, 20.0); + fNumHitInPMT8 = new TH1D("658", "Number of Hits per event in PMT8", 20, 0.0, 20.0); + fNumHitInPMT9 = new TH1D("659", "Number of Hits per event in PMT9", 20, 0.0, 20.0); + fNumHitInPMT10 = new TH1D("6510", "Number of Hits per event in PMT10", 20, 0.0, 20.0); + fNumHitInPMT11 = new TH1D("6511", "Number of Hits per event in PMT11", 20, 0.0, 20.0); + fNumHitInPMT12 = new TH1D("6512", "Number of Hits per event in PMT12", 20, 0.0, 20.0); + fNumHitInPMT13 = new TH1D("6513", "Number of Hits per event in PMT13", 20, 0.0, 20.0); + fNumHitInPMT14 = new TH1D("6514", "Number of Hits per event in PMT14", 20, 0.0, 20.0); + fNumHitInPMT15 = new TH1D("6515", "Number of Hits per event in PMT15", 20, 0.0, 20.0); + + G4double radMax = 70.0; + G4double radMin = 50.0; + G4double radNBins = 150; + radiusInPMT0 = new TH1D("rIn0", "Hit Coordinate Radius on PMT Plane (PMT0)", radNBins, radMin, radMax); + radiusInPMT1 = new TH1D("rIn1", "Hit Coordinate Radius on PMT Plane (PMT1)", radNBins, radMin, radMax); + radiusInPMT2 = new TH1D("rIn2", "Hit Coordinate Radius on PMT Plane (PMT2)", radNBins, radMin, radMax); + radiusInPMT3 = new TH1D("rIn3", "Hit Coordinate Radius on PMT Plane (PMT3)", radNBins, radMin, radMax); + radiusInPMT4 = new TH1D("rIn4", "Hit Coordinate Radius on PMT Plane (PMT4)", radNBins, radMin, radMax); + radiusInPMT5 = new TH1D("rIn5", "Hit Coordinate Radius on PMT Plane (PMT5)", radNBins, radMin, radMax); + radiusInPMT6 = new TH1D("rIn6", "Hit Coordinate Radius on PMT Plane (PMT6)", radNBins, radMin, radMax); + radiusInPMT7 = new TH1D("rIn7", "Hit Coordinate Radius on PMT Plane (PMT7)", radNBins, radMin, radMax); + radiusInPMT8 = new TH1D("rIn8", "Hit Coordinate Radius on PMT Plane (PMT8)", radNBins, radMin, radMax); + radiusInPMT9 = new TH1D("rIn9", "Hit Coordinate Radius on PMT Plane (PMT9)", radNBins, radMin, radMax); + radiusInPMT10 = new TH1D("rIn10", "Hit Coordinate Radius on PMT Plane (PMT10)", radNBins, radMin, radMax); + radiusInPMT11 = new TH1D("rIn11", "Hit Coordinate Radius on PMT Plane (PMT11)", radNBins, radMin, radMax); + radiusInPMT12 = new TH1D("rIn12", "Hit Coordinate Radius on PMT Plane (PMT12)", radNBins, radMin, radMax); + radiusInPMT13 = new TH1D("rIn13", "Hit Coordinate Radius on PMT Plane (PMT13)", radNBins, radMin, radMax); + radiusInPMT14 = new TH1D("rIn14", "Hit Coordinate Radius on PMT Plane (PMT14)", radNBins, radMin, radMax); + radiusInPMT15 = new TH1D("rIn15", "Hit Coordinate Radius on PMT Plane (PMT15)", radNBins, radMin, radMax); + radiusInPMT0->SetXTitle("r [mm]"); + radiusInPMT1->SetXTitle("r [mm]"); + radiusInPMT2->SetXTitle("r [mm]"); + radiusInPMT3->SetXTitle("r [mm]"); + radiusInPMT4->SetXTitle("r [mm]"); + radiusInPMT5->SetXTitle("r [mm]"); + radiusInPMT6->SetXTitle("r [mm]"); + radiusInPMT7->SetXTitle("r [mm]"); + radiusInPMT8->SetXTitle("r [mm]"); + radiusInPMT9->SetXTitle("r [mm]"); + radiusInPMT10->SetXTitle("r [mm]"); + radiusInPMT11->SetXTitle("r [mm]"); + radiusInPMT12->SetXTitle("r [mm]"); + radiusInPMT13->SetXTitle("r [mm]"); + radiusInPMT14->SetXTitle("r [mm]"); + radiusInPMT15->SetXTitle("r [mm]"); + + fGlobalHitXYCoord15 = + new TH2D("GlobalHitXYCoord", "Global Hit XY-Coordinate", 220, -110.0, 110.0, 220, -110.0, 110.0); + fGlobalHitXYCoord15->SetXTitle("x [mm]"); + fGlobalHitXYCoord15->SetYTitle("y [mm]"); + + fNtuple1 = new TTree("10", "RichTbNtup"); + fNtuple1->Branch("NtupVar1", &fNtupVar1, "NtupVar1/D"); + fNtuple1->Branch("NtupVar2", &fNtupVar2, "NtupVar2/D"); + + BookHistoHpd(); + + G4cout << " Histogram file created " << G4endl; } void RichTbAnalysisManager::BookHistoHpd() { + fNumHitInHPD0 = new TH1D("2650", "Number of Hits per event in HPD0", 80, 0.0, 20.0); + fNumHitSignalInHPD0 = new TH1D("2652", "Number of Hits per event in signal region in HPD0", 80, 0.0, 20.0); + fRFRXYLocationPhotonHpd = + new TH2D("fRFRXYLocationPhotonHpd", "Exit plane location for photons which reached Hpd plane", 80, -80.0, 80.0, + 40, -40.0, 40.0); + fGlobalHitXYCoordPeOriginHpd = new TH2D("2500", "GlobalHitPeOriginXYCoordHpd", 320, -160.0, 0.0, 80, -40.0, 40.0); + fGlobalHitXYCoordHpd = new TH2D("2510", "GlobalHitXYCoordHpd", 320, -160.0, 0.0, 80, -40.0, 40.0); - fNumHitInHPD0 = new TH1D ("2650","Number of Hits per event in HPD0" , 80, 0.0,20.0); - fNumHitSignalInHPD0 = new TH1D ("2652","Number of Hits per event in signal region in HPD0" , 80, 0.0,20.0); - - fRFRXYLocationPhotonHpd = new TH2D("fRFRXYLocationPhotonHpd","Exit plane location for photons which reached Hpd plane", - 80, -80.0, 80.0,40, -40.0,40.0); - - fGlobalHitXYCoordPeOriginHpd = new TH2D("2500", "GlobalHitPeOriginXYCoordHpd", 320 , -160.0,0.0,80,-40.0,40.0); - fGlobalHitXYCoordHpd = new TH2D("2510", "GlobalHitXYCoordHpd", 320 , -160.0,0.0, 80,-40.0,40.0); - - fGlobalPixelCenterXYCoordHpd = new TH2D("2515", "GlobalPixelCenterXYCoordHpd", 320 , -160.0,0.0,80,-40.0,40.0); - - - fGlobalHitXYCoordPeOriginHpdPmt = new TH2D("2520", "GlobalHitPeOriginXYCoordHpdPmt", 320 , -160.0,160.0,80,-40.0,40.0); - fGlobalHitXYCoordPixPhcathHpd = new TH2D("2525", "GlobalHitXYCoordHpdPhCathode", 320 , -160.0,0.0,80,-40.0,40.0); + fGlobalPixelCenterXYCoordHpd = new TH2D("2515", "GlobalPixelCenterXYCoordHpd", 320, -160.0, 0.0, 80, -40.0, 40.0); + fGlobalHitXYCoordPeOriginHpdPmt = + new TH2D("2520", "GlobalHitPeOriginXYCoordHpdPmt", 320, -160.0, 160.0, 80, -40.0, 40.0); + fGlobalHitXYCoordPixPhcathHpd = new TH2D("2525", "GlobalHitXYCoordHpdPhCathode", 320, -160.0, 0.0, 80, -40.0, 40.0); } +RichTbAnalysisManager::~RichTbAnalysisManager() { -RichTbAnalysisManager::~RichTbAnalysisManager() -{ + // delete hfactory; + // hfactory = 0; - // delete hfactory; - // hfactory = 0; + // delete analysisFactory; + // analysisFactory = 0; - // delete analysisFactory; - // analysisFactory = 0; + // delete tree; + // if(fRootFile) delete fRootFile; - // delete tree; - //if(fRootFile) delete fRootFile; - - if(RichTbAnalysisInstance !=0 ) delete RichTbAnalysisInstance; - - - G4cout << "RichTbAnalysisManager Deleted" << G4endl; + if (RichTbAnalysisInstance != 0) + delete RichTbAnalysisInstance; + G4cout << "RichTbAnalysisManager Deleted" << G4endl; } - -void RichTbAnalysisManager::BeginOfRunAnalysis() -{ - // G4cout << "### Run " << aRun->GetRunID() << " start." << G4endl; - InitializeCounters(); - BookHisto(); - +void RichTbAnalysisManager::BeginOfRunAnalysis() { + // G4cout << "### Run " << aRun->GetRunID() << " start." << G4endl; + InitializeCounters(); + BookHisto(); } - -void RichTbAnalysisManager::EndOfRunAnalysis() -{ - - // if (tree) { - // G4cout<<" Now writing histos out "<<G4endl; - - // tree->commit(); // Write histos and tuple in file. - // tree->close(); - // } - // if(treeNt) { - // G4cout<<" Now writing ntuples out "<<G4endl; - // treeNt->commit(); // Write tuple in file. - // treeNt->close(); - // - // } - - if (fRootFile) { - fRootFile->Write(); // Writing the histograms to the file - fRootFile->Close(); // and closing the tree (and the file) - G4cout << "\n----> Histogram Tree is saved \n" << G4endl; - - } - +void RichTbAnalysisManager::EndOfRunAnalysis() { + + // if (tree) { + // G4cout<<" Now writing histos out "<<G4endl; + + // tree->commit(); // Write histos and tuple in file. + // tree->close(); + // } + // if(treeNt) { + // G4cout<<" Now writing ntuples out "<<G4endl; + // treeNt->commit(); // Write tuple in file. + // treeNt->close(); + // + // } + + if (fRootFile) { + fRootFile->Write(); // Writing the histograms to the file + fRootFile->Close(); // and closing the tree (and the file) + G4cout << "\n----> Histogram Tree is saved \n" << G4endl; + } } +void RichTbAnalysisManager::BeginOfEventAnalysis(const G4Event * /* evt */) { - -void RichTbAnalysisManager::BeginOfEventAnalysis(const G4Event * /* evt */) -{ - - //RichCollId is already defined in LHCbRichSimEventAction.cc - // Hence its extraction is not repeated here. - iTimer->Start(); - + // RichCollId is already defined in LHCbRichSimEventAction.cc + // Hence its extraction is not repeated here. + iTimer->Start(); } +void RichTbAnalysisManager::EndOfEventAnalysis(const G4Event * /* evt */) { iTimer->Stop(); } -void RichTbAnalysisManager::EndOfEventAnalysis(const G4Event * /* evt */) -{ - iTimer->Stop(); - - +void RichTbAnalysisManager::StepAnalysis(const G4SteppingManager * /* aSteppingManager */) { + // if(!aSteppingManager) return; + // G4Track* track = aSteppingManager->GetTrack(); + // G4ThreeVector pos = track->GetPosition(); } - - -void RichTbAnalysisManager::StepAnalysis -(const G4SteppingManager * /* aSteppingManager */) -{ - - // if(!aSteppingManager) return; - // G4Track* track = aSteppingManager->GetTrack(); - // G4ThreeVector pos = track->GetPosition(); - +void RichTbAnalysisManager::EndOfEventCountersHisto(const G4Event * /* evt */) { + // RichTbCounter* aRichCounter= RichTbCounter::getRichTbCounterInstance(); + + // G4cout<<" Filling histo of counters "<<G4endl; + + // G4int NRadiatorProduced= aRichCounter->getnumHitTotProd(); + // G4int NEnterMirror= aRichCounter->getnumPhEnterMirror(); + // G4int NEnterPhFrame = aRichCounter->getnumPhEnterPhSupFrame(); + // G4int NExitGasQuWin = aRichCounter->getnumExitGasQuWin(); + // G4int NEnterPMT0QW = aRichCounter->getnumPhEnterPMT0QW(); + // G4int NEnterPMT1QW = aRichCounter->getnumPhEnterPMT1QW(); + // G4int NEnterPMT2QW = aRichCounter->getnumPhEnterPMT2QW(); + // G4int NEnterPMT3QW = aRichCounter->getnumPhEnterPMT3QW(); + // G4int NEnterPMT4QW = aRichCounter->getnumPhEnterPMT4QW(); + // G4int NEnterPMT5QW = aRichCounter->getnumPhEnterPMT5QW(); + // G4int NEnterAnPMTQW = aRichCounter->getnumPhEnterAnPMTQW(); + + // if( fhistoNProduced) fhistoNProduced->fill(1.0* NRadiatorProduced); + // if( fhistoNEnterMirror) fhistoNEnterMirror->fill(1.0* NEnterMirror); + // if(fhistoNEnterPhSupframe) fhistoNEnterPhSupframe->fill(1.0* NEnterPhFrame); + // if(fhistoNExitGasQuWin) fhistoNExitGasQuWin->fill(1.0* NExitGasQuWin); + // if( fhistoNEnterPMT0QW) fhistoNEnterPMT0QW->fill(1.0* NEnterPMT0QW); + // if( fhistoNEnterPMT1QW) fhistoNEnterPMT1QW->fill(1.0* NEnterPMT1QW); + // if( fhistoNEnterPMT2QW) fhistoNEnterPMT2QW->fill(1.0* NEnterPMT2QW); + // if( fhistoNEnterPMT3QW) fhistoNEnterPMT3QW->fill(1.0* NEnterPMT3QW); + // if( fhistoNEnterPMT4QW) fhistoNEnterPMT4QW->fill(1.0* NEnterPMT4QW); + // if( fhistoNEnterPMT5QW) fhistoNEnterPMT5QW->fill(1.0* NEnterPMT5QW); + // if( fhistoNEnterAnPMTQW) fhistoNEnterAnPMTQW->fill(1.0* NEnterAnPMTQW); + // G4cout<<"end of Filling histo of counters "<<G4endl; } -void RichTbAnalysisManager::EndOfEventCountersHisto(const G4Event * /* evt */) -{ - // RichTbCounter* aRichCounter= RichTbCounter::getRichTbCounterInstance(); - - // G4cout<<" Filling histo of counters "<<G4endl; - - // G4int NRadiatorProduced= aRichCounter->getnumHitTotProd(); - // G4int NEnterMirror= aRichCounter->getnumPhEnterMirror(); - // G4int NEnterPhFrame = aRichCounter->getnumPhEnterPhSupFrame(); - // G4int NExitGasQuWin = aRichCounter->getnumExitGasQuWin(); - // G4int NEnterPMT0QW = aRichCounter->getnumPhEnterPMT0QW(); - // G4int NEnterPMT1QW = aRichCounter->getnumPhEnterPMT1QW(); - // G4int NEnterPMT2QW = aRichCounter->getnumPhEnterPMT2QW(); - // G4int NEnterPMT3QW = aRichCounter->getnumPhEnterPMT3QW(); - // G4int NEnterPMT4QW = aRichCounter->getnumPhEnterPMT4QW(); - // G4int NEnterPMT5QW = aRichCounter->getnumPhEnterPMT5QW(); - // G4int NEnterAnPMTQW = aRichCounter->getnumPhEnterAnPMTQW(); - - - // if( fhistoNProduced) fhistoNProduced->fill(1.0* NRadiatorProduced); - // if( fhistoNEnterMirror) fhistoNEnterMirror->fill(1.0* NEnterMirror); - // if(fhistoNEnterPhSupframe) fhistoNEnterPhSupframe->fill(1.0* NEnterPhFrame); - // if(fhistoNExitGasQuWin) fhistoNExitGasQuWin->fill(1.0* NExitGasQuWin); - // if( fhistoNEnterPMT0QW) fhistoNEnterPMT0QW->fill(1.0* NEnterPMT0QW); - // if( fhistoNEnterPMT1QW) fhistoNEnterPMT1QW->fill(1.0* NEnterPMT1QW); - // if( fhistoNEnterPMT2QW) fhistoNEnterPMT2QW->fill(1.0* NEnterPMT2QW); - // if( fhistoNEnterPMT3QW) fhistoNEnterPMT3QW->fill(1.0* NEnterPMT3QW); - // if( fhistoNEnterPMT4QW) fhistoNEnterPMT4QW->fill(1.0* NEnterPMT4QW); - // if( fhistoNEnterPMT5QW) fhistoNEnterPMT5QW->fill(1.0* NEnterPMT5QW); - // if( fhistoNEnterAnPMTQW) fhistoNEnterAnPMTQW->fill(1.0* NEnterAnPMTQW); - // G4cout<<"end of Filling histo of counters "<<G4endl; +void RichTbAnalysisManager::EndOfEventHisto(const G4Event *evt) { + + RichTbRunConfig *rConfig = RichTbRunConfig::getRunConfigInstance(); + G4int aRadiatorConfiguration = rConfig->getRadiatorConfiguration(); + + RichTbCounter *aRichCounter = RichTbCounter::getRichTbCounterInstance(); + + G4SDManager *SDman = G4SDManager::GetSDMpointer(); + G4String colNam = RichTbHColname; + G4int RichTbCollID = SDman->GetCollectionID(colNam); + G4int aVerboseFlag = rConfig->VerboseInfoFlag(); + + G4HCofThisEvent *HCE = evt->GetHCofThisEvent(); + RichTbHitsCollection *RHC = NULL; + if (HCE) { + RHC = (RichTbHitsCollection *)(HCE->GetHC(RichTbCollID)); + } + + if (RHC) { + G4int n_hit = RHC->entries(); + + for (G4int ih = 0; ih < n_hit; ih++) { + RichTbHit *aHit = (*RHC)[ih]; + + // Now for printing + if (aVerboseFlag >= 5) { + aHit->Print(); + } + + G4int curPMTNum = aHit->GetCurPMTNum(); + G4ThreeVector curHitCoord = aHit->GetPos(); + G4int curHitInGapFlag = aHit->getHitInPixelGapFlag(); + + // G4cout<<"Hit PMT Number: "<<curPMTNum<<", coordinate: "<<curHitCoord<<G4endl; + + // G4cout<<" Gap flag : "<<curHitInGapFlag<<G4endl; + + if (curHitInGapFlag == 0) { + + aRichCounter->bumpnumhitTotEv(); + if (curPMTNum == 0) + aRichCounter->bumpnumhitPMT0(); + if (curPMTNum == 1) + aRichCounter->bumpnumhitPMT1(); + if (curPMTNum == 2) + aRichCounter->bumpnumhitPMT2(); + if (curPMTNum == 3) + aRichCounter->bumpnumhitPMT3(); + if (curPMTNum == 4) + aRichCounter->bumpnumhitPMT4(); + if (curPMTNum == 5) + aRichCounter->bumpnumhitPMT5(); + if (curPMTNum == 6) + aRichCounter->bumpnumhitPMT6(); + if (curPMTNum == 7) + aRichCounter->bumpnumhitPMT7(); + if (curPMTNum == 8) + aRichCounter->bumpnumhitPMT8(); + if (curPMTNum == 9) + aRichCounter->bumpnumhitPMT9(); + if (curPMTNum == 10) + aRichCounter->bumpnumhitPMT10(); + if (curPMTNum == 11) + aRichCounter->bumpnumhitPMT11(); + if (curPMTNum == 12) + aRichCounter->bumpnumhitPMT12(); + if (curPMTNum == 13) + aRichCounter->bumpnumhitPMT13(); + if (curPMTNum == 14) + aRichCounter->bumpnumhitPMT14(); + if (curPMTNum == 15) + aRichCounter->bumpnumhitPMT15(); + if ((curPMTNum == 0) || (curPMTNum == 2) || (curPMTNum == 5) || (curPMTNum == 7) || (curPMTNum == 8) || + (curPMTNum == 10) || (curPMTNum == 13) || (curPMTNum == 15)) + aRichCounter->bumpnumhitTotEvCentralPmt(); + + if ((curPMTNum == 0) || (curPMTNum == 2) || (curPMTNum == 8) || (curPMTNum == 10)) + aRichCounter->bumpnumhitTotEvCentralPmtJura(); + + if ((curPMTNum == 5) || (curPMTNum == 7) || (curPMTNum == 13) || (curPMTNum == 15)) + aRichCounter->bumpnumhitTotEvCentralPmtSaleve(); + + // if( fHistoCkvTruePhiHits) + // fHistoCkvTruePhiHits->fill( aHit->GetCkvPhiProd()); + + // now fill the pixel col row in a histogram. + + // G4int aPixelNum = aHit-> GetCurPixNum(); + // G4int aPixelRow = aPixelNum/RichTbPMTSiDetNumPixelAlongX; + // G4int aPixelCol = aPixelNum- aPixelRow*RichTbPMTSiDetNumPixelAlongX; + + // if( (curPMTNum == 0) && (fHistoPixelColRowPMT0) ) + // fHistoPixelColRowPMT0->fill(1.0*aPixelCol,1.0* aPixelRow); + // if( (curPMTNum == 1) && (fHistoPixelColRowPMT1) ) + // fHistoPixelColRowPMT1->fill(1.0*aPixelCol,1.0* aPixelRow); + // if( (curPMTNum == 2) && (fHistoPixelColRowPMT2) ) + // fHistoPixelColRowPMT2->fill(1.0*aPixelCol,1.0*aPixelRow); + // if( (curPMTNum == 3) && (fHistoPixelColRowPMT3) ) + // fHistoPixelColRowPMT3->fill(1.0*aPixelCol,1.0*aPixelRow); + // if( (curPMTNum == 4) && (fHistoPixelColRowPMT4) ) + // fHistoPixelColRowPMT4->fill(1.0*aPixelCol,1.0*aPixelRow); + // if( (curPMTNum == 5) && (fHistoPixelColRowPMT5) ) + // fHistoPixelColRowPMT5->fill(1.0*aPixelCol,1.0*aPixelRow); + + G4ThreeVector aPeOrigin = aHit->GetPeOrigin(); + G4ThreeVector aGlobalXYHitC = aHit->GetPos(); + G4ThreeVector aPixelCenterC = aHit->getPixelGlobalCenter(); + + if (fGlobalHitXYCoord15) + fGlobalHitXYCoord15->Fill(aGlobalXYHitC.x(), aGlobalXYHitC.y()); + + G4double pmtRad = sqrt(pow(aGlobalXYHitC.x(), 2) + pow(aGlobalXYHitC.y(), 2)); + if (curPMTNum == 0) + radiusInPMT0->Fill(pmtRad); + if (curPMTNum == 1) + radiusInPMT1->Fill(pmtRad); + if (curPMTNum == 2) + radiusInPMT2->Fill(pmtRad); + if (curPMTNum == 3) + radiusInPMT3->Fill(pmtRad); + if (curPMTNum == 4) + radiusInPMT4->Fill(pmtRad); + if (curPMTNum == 5) + radiusInPMT5->Fill(pmtRad); + if (curPMTNum == 6) + radiusInPMT6->Fill(pmtRad); + if (curPMTNum == 7) + radiusInPMT7->Fill(pmtRad); + if (curPMTNum == 8) + radiusInPMT8->Fill(pmtRad); + if (curPMTNum == 9) + radiusInPMT9->Fill(pmtRad); + if (curPMTNum == 10) + radiusInPMT10->Fill(pmtRad); + if (curPMTNum == 11) + radiusInPMT11->Fill(pmtRad); + if (curPMTNum == 12) + radiusInPMT12->Fill(pmtRad); + if (curPMTNum == 13) + radiusInPMT13->Fill(pmtRad); + if (curPMTNum == 14) + radiusInPMT14->Fill(pmtRad); + if (curPMTNum == 15) + radiusInPMT15->Fill(pmtRad); + + // G4cout<<pmtRad<<G4endl; + + if (fGlobalHitXYCoordPeOrigin) + fGlobalHitXYCoordPeOrigin->Fill(aPeOrigin.x(), aPeOrigin.y()); + if (fGlobalHitXYCoord) + fGlobalHitXYCoord->Fill(aGlobalXYHitC.x(), aGlobalXYHitC.y()); + if (fGlobalPixelCenterXYCoord) + fGlobalPixelCenterXYCoord->Fill(aPixelCenterC.x(), aPixelCenterC.y()); + if (curPMTNum == 0 || curPMTNum == 2) { + if (fGlobalHitXYCoordPeOriginHpdPmt) + fGlobalHitXYCoordPeOriginHpdPmt->Fill(aPeOrigin.x(), aPeOrigin.y()); + } + } + } + + G4int numTotHitInEv = aRichCounter->getnumhitTotEv(); + G4int numTotHitInEvCentralPmt = aRichCounter->getnumhitTotEvCentralPmt(); + G4int numTotHitInEvCentralPmtJura = aRichCounter->getnumhitTotEvCentralPmtJura(); + G4int numTotHitInEvCentralPmtSaleve = aRichCounter->getnumhitTotEvCentralPmtSaleve(); + + G4int numTotHitInPMT0 = aRichCounter->getnumhitPMT0(); + G4int numTotHitInPMT1 = aRichCounter->getnumhitPMT1(); + G4int numTotHitInPMT2 = aRichCounter->getnumhitPMT2(); + G4int numTotHitInPMT3 = aRichCounter->getnumhitPMT3(); + G4int numTotHitInPMT4 = aRichCounter->getnumhitPMT4(); + G4int numTotHitInPMT5 = aRichCounter->getnumhitPMT5(); + G4int numTotHitInPMT6 = aRichCounter->getnumhitPMT6(); + G4int numTotHitInPMT7 = aRichCounter->getnumhitPMT7(); + G4int numTotHitInPMT8 = aRichCounter->getnumhitPMT8(); + G4int numTotHitInPMT9 = aRichCounter->getnumhitPMT9(); + G4int numTotHitInPMT10 = aRichCounter->getnumhitPMT10(); + G4int numTotHitInPMT11 = aRichCounter->getnumhitPMT11(); + G4int numTotHitInPMT12 = aRichCounter->getnumhitPMT12(); + G4int numTotHitInPMT13 = aRichCounter->getnumhitPMT13(); + G4int numTotHitInPMT14 = aRichCounter->getnumhitPMT14(); + G4int numTotHitInPMT15 = aRichCounter->getnumhitPMT15(); + + // G4cout<<" Number of hits in this event "<<n_hit<<G4endl; + + /* +G4cout<<"NumHits Tot pmt01234567 "<< +numTotHitInEv <<" "<<(numTotHitInEvCentralPmt<<" "<< numTotHitInPMT0<<" " +<< numTotHitInPMT1<<" "<< numTotHitInPMT2<<" " +<< numTotHitInPMT3<<" "<< numTotHitInPMT4<<" " +<< numTotHitInPMT5<<" "<< numTotHitInPMT6<<" "<< numTotHitInPMT7<< G4endl; + + */ + + if (fNumHitInEvent) + fNumHitInEvent->Fill(numTotHitInEv * 1.0); + if (fNumHitInEventCentralPMT) + fNumHitInEventCentralPMT->Fill(numTotHitInEvCentralPmt * 1.0); + + if (fNumHitInPMT0) + fNumHitInPMT0->Fill(numTotHitInPMT0 * 1.0); + if (fNumHitInPMT1) + fNumHitInPMT1->Fill(numTotHitInPMT1 * 1.0); + if (fNumHitInPMT2) + fNumHitInPMT2->Fill(numTotHitInPMT2 * 1.0); + if (fNumHitInPMT3) + fNumHitInPMT3->Fill(numTotHitInPMT3 * 1.0); + if (fNumHitInPMT4) + fNumHitInPMT4->Fill(numTotHitInPMT4 * 1.0); + if (fNumHitInPMT5) + fNumHitInPMT5->Fill(numTotHitInPMT5 * 1.0); + if (fNumHitInPMT6) + fNumHitInPMT6->Fill(numTotHitInPMT6 * 1.0); + if (fNumHitInPMT7) + fNumHitInPMT7->Fill(numTotHitInPMT7 * 1.0); + if (fNumHitInPMT8) + fNumHitInPMT8->Fill(numTotHitInPMT8 * 1.0); + if (fNumHitInPMT9) + fNumHitInPMT9->Fill(numTotHitInPMT9 * 1.0); + if (fNumHitInPMT10) + fNumHitInPMT10->Fill(numTotHitInPMT10 * 1.0); + if (fNumHitInPMT11) + fNumHitInPMT11->Fill(numTotHitInPMT11 * 1.0); + if (fNumHitInPMT12) + fNumHitInPMT12->Fill(numTotHitInPMT12 * 1.0); + if (fNumHitInPMT13) + fNumHitInPMT13->Fill(numTotHitInPMT13 * 1.0); + if (fNumHitInPMT14) + fNumHitInPMT14->Fill(numTotHitInPMT14 * 1.0); + if (fNumHitInPMT15) + fNumHitInPMT15->Fill(numTotHitInPMT15 * 1.0); + + if (fNumHitInEventCentralPMTJura) + fNumHitInEventCentralPMTJura->Fill(numTotHitInEvCentralPmtJura); + if (fNumHitInEventCentralPMTSaleve) + fNumHitInEventCentralPMTSaleve->Fill(numTotHitInEvCentralPmtSaleve); + + // if(fhistoNrPhotAll) { + // G4cout<<"Now filling histoNrPhotAll"<<G4endl; + + // fhistoNrPhotAll->fill(1.0*numTotHitInEv); + + // G4cout<<"Test print histo mean rms "<< + // fhistoNrPhotAll->mean()<<" "<<fhistoNrPhotAll->rms()<<G4endl; + + // }else { + // G4cout<<" histoNrPhotAll Not available for filling"<<G4endl; + + // } + + // if(fhistoNrPhotPMT0) { + // fhistoNrPhotPMT0->fill(1.0*numTotHitInPMT0); + // }else { + + // G4cout<<" histoNrPhotPMT0 Not available for filling"<<G4endl; + // } + + // if(fhistoNrPhotPMT1) fhistoNrPhotPMT1->fill(1.0*numTotHitInPMT1); + // if(fhistoNrPhotPMT2) fhistoNrPhotPMT2->fill(1.0*numTotHitInPMT2); + // if(fhistoNrPhotPMT3) fhistoNrPhotPMT3->fill(1.0*numTotHitInPMT3); + // if(fhistoNrPhotPMT4) fhistoNrPhotPMT4->fill(1.0*numTotHitInPMT4); + // if(fhistoNrPhotPMT5) fhistoNrPhotPMT5->fill(1.0*numTotHitInPMT5); + } + + // test histo and ntuple + + G4double aRNum1 = G4RandGauss::shoot(50.0, 10.0); + + G4double aRNum2 = G4RandGauss::shoot(1.0, 0.2); + + G4double aRNum3 = G4UniformRand(); + if (fHisto[0]) + fHisto[0]->Fill(aRNum1); + + fNtupVar1 = aRNum2; + fNtupVar2 = aRNum3; + if (fNtuple1) + fNtuple1->Fill(); + + // end test histo and ntuple + + // now for the hpd + + if (aRadiatorConfiguration == 2) { + EndOfEventHistoHpd(evt); + } } - -void RichTbAnalysisManager::EndOfEventHisto(const G4Event * evt) -{ - - RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); - G4int aRadiatorConfiguration = rConfig ->getRadiatorConfiguration(); - - - RichTbCounter* aRichCounter= RichTbCounter::getRichTbCounterInstance(); - - G4SDManager * SDman = G4SDManager::GetSDMpointer(); - G4String colNam= RichTbHColname; - G4int RichTbCollID = SDman->GetCollectionID(colNam); - G4int aVerboseFlag = rConfig-> VerboseInfoFlag() ; - - - G4HCofThisEvent * HCE = evt->GetHCofThisEvent(); - RichTbHitsCollection* RHC = NULL; - if(HCE) - { - RHC = (RichTbHitsCollection*)(HCE->GetHC(RichTbCollID)); - } - - if(RHC) - { - G4int n_hit = RHC->entries(); - - - for(G4int ih=0; ih<n_hit; ih++) { - RichTbHit* aHit = (*RHC)[ih]; - - // Now for printing - if( aVerboseFlag >=5 ) { - aHit->Print(); - } - - G4int curPMTNum = aHit->GetCurPMTNum() ; - G4ThreeVector curHitCoord= aHit-> GetPos(); - G4int curHitInGapFlag = aHit-> getHitInPixelGapFlag() ; - - // G4cout<<"Hit PMT Number: "<<curPMTNum<<", coordinate: "<<curHitCoord<<G4endl; - - // G4cout<<" Gap flag : "<<curHitInGapFlag<<G4endl; - - if(curHitInGapFlag == 0 ) { - - aRichCounter->bumpnumhitTotEv(); - if( curPMTNum == 0 ) aRichCounter->bumpnumhitPMT0(); - if( curPMTNum == 1 ) aRichCounter->bumpnumhitPMT1(); - if( curPMTNum == 2 ) aRichCounter->bumpnumhitPMT2(); - if( curPMTNum == 3 ) aRichCounter->bumpnumhitPMT3(); - if( curPMTNum == 4 ) aRichCounter->bumpnumhitPMT4(); - if( curPMTNum == 5 ) aRichCounter->bumpnumhitPMT5(); - if( curPMTNum == 6 ) aRichCounter->bumpnumhitPMT6(); - if( curPMTNum == 7 ) aRichCounter->bumpnumhitPMT7(); - if( curPMTNum == 8 ) aRichCounter->bumpnumhitPMT8(); - if( curPMTNum == 9 ) aRichCounter->bumpnumhitPMT9(); - if( curPMTNum == 10 ) aRichCounter->bumpnumhitPMT10(); - if( curPMTNum == 11 ) aRichCounter->bumpnumhitPMT11(); - if( curPMTNum == 12 ) aRichCounter->bumpnumhitPMT12(); - if( curPMTNum == 13 ) aRichCounter->bumpnumhitPMT13(); - if( curPMTNum == 14 ) aRichCounter->bumpnumhitPMT14(); - if( curPMTNum == 15 ) aRichCounter->bumpnumhitPMT15(); - if( ( curPMTNum == 0 ) || ( curPMTNum == 2 ) || - ( curPMTNum == 5 ) || ( curPMTNum == 7 ) || - ( curPMTNum == 8 ) || ( curPMTNum == 10 ) || - ( curPMTNum == 13 ) || ( curPMTNum == 15 )) aRichCounter->bumpnumhitTotEvCentralPmt(); - - if( ( curPMTNum == 0 ) || ( curPMTNum == 2 ) || - (curPMTNum == 8) || ( curPMTNum == 10 )) aRichCounter->bumpnumhitTotEvCentralPmtJura(); - - if( ( curPMTNum == 5 ) || ( curPMTNum == 7 ) || - (curPMTNum == 13) || ( curPMTNum == 15 )) aRichCounter->bumpnumhitTotEvCentralPmtSaleve(); - - - // if( fHistoCkvTruePhiHits) - // fHistoCkvTruePhiHits->fill( aHit->GetCkvPhiProd()); - - // now fill the pixel col row in a histogram. - - // G4int aPixelNum = aHit-> GetCurPixNum(); - // G4int aPixelRow = aPixelNum/RichTbPMTSiDetNumPixelAlongX; - // G4int aPixelCol = aPixelNum- aPixelRow*RichTbPMTSiDetNumPixelAlongX; - - // if( (curPMTNum == 0) && (fHistoPixelColRowPMT0) ) - // fHistoPixelColRowPMT0->fill(1.0*aPixelCol,1.0* aPixelRow); - // if( (curPMTNum == 1) && (fHistoPixelColRowPMT1) ) - // fHistoPixelColRowPMT1->fill(1.0*aPixelCol,1.0* aPixelRow); - // if( (curPMTNum == 2) && (fHistoPixelColRowPMT2) ) - // fHistoPixelColRowPMT2->fill(1.0*aPixelCol,1.0*aPixelRow); - // if( (curPMTNum == 3) && (fHistoPixelColRowPMT3) ) - // fHistoPixelColRowPMT3->fill(1.0*aPixelCol,1.0*aPixelRow); - // if( (curPMTNum == 4) && (fHistoPixelColRowPMT4) ) - // fHistoPixelColRowPMT4->fill(1.0*aPixelCol,1.0*aPixelRow); - // if( (curPMTNum == 5) && (fHistoPixelColRowPMT5) ) - // fHistoPixelColRowPMT5->fill(1.0*aPixelCol,1.0*aPixelRow); - - G4ThreeVector aPeOrigin = aHit->GetPeOrigin(); - G4ThreeVector aGlobalXYHitC = aHit->GetPos(); - G4ThreeVector aPixelCenterC = aHit->getPixelGlobalCenter() ; - - - if(fGlobalHitXYCoord15) fGlobalHitXYCoord15->Fill(aGlobalXYHitC.x(),aGlobalXYHitC.y()); - - - G4double pmtRad = sqrt(pow(aGlobalXYHitC.x(),2) + pow(aGlobalXYHitC.y(),2)); - if(curPMTNum == 0) radiusInPMT0->Fill(pmtRad); - if(curPMTNum == 1) radiusInPMT1->Fill(pmtRad); - if(curPMTNum == 2) radiusInPMT2->Fill(pmtRad); - if(curPMTNum == 3) radiusInPMT3->Fill(pmtRad); - if(curPMTNum == 4) radiusInPMT4->Fill(pmtRad); - if(curPMTNum == 5) radiusInPMT5->Fill(pmtRad); - if(curPMTNum == 6) radiusInPMT6->Fill(pmtRad); - if(curPMTNum == 7) radiusInPMT7->Fill(pmtRad); - if(curPMTNum == 8) radiusInPMT8->Fill(pmtRad); - if(curPMTNum == 9) radiusInPMT9->Fill(pmtRad); - if(curPMTNum == 10) radiusInPMT10->Fill(pmtRad); - if(curPMTNum == 11) radiusInPMT11->Fill(pmtRad); - if(curPMTNum == 12) radiusInPMT12->Fill(pmtRad); - if(curPMTNum == 13) radiusInPMT13->Fill(pmtRad); - if(curPMTNum == 14) radiusInPMT14->Fill(pmtRad); - if(curPMTNum == 15) radiusInPMT15->Fill(pmtRad); - -// G4cout<<pmtRad<<G4endl; - - if( fGlobalHitXYCoordPeOrigin) fGlobalHitXYCoordPeOrigin->Fill( aPeOrigin.x(),aPeOrigin.y()); - if(fGlobalHitXYCoord) fGlobalHitXYCoord->Fill(aGlobalXYHitC.x(),aGlobalXYHitC.y()); - if(fGlobalPixelCenterXYCoord)fGlobalPixelCenterXYCoord ->Fill(aPixelCenterC.x(), aPixelCenterC.y()); - if(curPMTNum == 0 || curPMTNum == 2 ) { - if(fGlobalHitXYCoordPeOriginHpdPmt) fGlobalHitXYCoordPeOriginHpdPmt->Fill(aPeOrigin.x(),aPeOrigin.y() ); - } - } - } - - - G4int numTotHitInEv = aRichCounter->getnumhitTotEv(); - G4int numTotHitInEvCentralPmt = aRichCounter->getnumhitTotEvCentralPmt(); - G4int numTotHitInEvCentralPmtJura = aRichCounter->getnumhitTotEvCentralPmtJura(); - G4int numTotHitInEvCentralPmtSaleve = aRichCounter->getnumhitTotEvCentralPmtSaleve(); - - G4int numTotHitInPMT0= aRichCounter->getnumhitPMT0(); - G4int numTotHitInPMT1= aRichCounter->getnumhitPMT1(); - G4int numTotHitInPMT2= aRichCounter->getnumhitPMT2(); - G4int numTotHitInPMT3= aRichCounter->getnumhitPMT3(); - G4int numTotHitInPMT4= aRichCounter->getnumhitPMT4(); - G4int numTotHitInPMT5= aRichCounter->getnumhitPMT5(); - G4int numTotHitInPMT6= aRichCounter->getnumhitPMT6(); - G4int numTotHitInPMT7= aRichCounter->getnumhitPMT7(); - G4int numTotHitInPMT8= aRichCounter->getnumhitPMT8(); - G4int numTotHitInPMT9= aRichCounter->getnumhitPMT9(); - G4int numTotHitInPMT10= aRichCounter->getnumhitPMT10(); - G4int numTotHitInPMT11= aRichCounter->getnumhitPMT11(); - G4int numTotHitInPMT12= aRichCounter->getnumhitPMT12(); - G4int numTotHitInPMT13= aRichCounter->getnumhitPMT13(); - G4int numTotHitInPMT14= aRichCounter->getnumhitPMT14(); - G4int numTotHitInPMT15= aRichCounter->getnumhitPMT15(); - - // G4cout<<" Number of hits in this event "<<n_hit<<G4endl; - - /* - G4cout<<"NumHits Tot pmt01234567 "<< - numTotHitInEv <<" "<<(numTotHitInEvCentralPmt<<" "<< numTotHitInPMT0<<" " - << numTotHitInPMT1<<" "<< numTotHitInPMT2<<" " - << numTotHitInPMT3<<" "<< numTotHitInPMT4<<" " - << numTotHitInPMT5<<" "<< numTotHitInPMT6<<" "<< numTotHitInPMT7<< G4endl; - - */ - - if(fNumHitInEvent) fNumHitInEvent ->Fill( numTotHitInEv*1.0); - if(fNumHitInEventCentralPMT) fNumHitInEventCentralPMT->Fill(numTotHitInEvCentralPmt*1.0); - - if(fNumHitInPMT0)fNumHitInPMT0->Fill(numTotHitInPMT0*1.0); - if(fNumHitInPMT1)fNumHitInPMT1->Fill(numTotHitInPMT1*1.0); - if(fNumHitInPMT2)fNumHitInPMT2->Fill(numTotHitInPMT2*1.0); - if(fNumHitInPMT3)fNumHitInPMT3->Fill(numTotHitInPMT3*1.0); - if(fNumHitInPMT4)fNumHitInPMT4->Fill(numTotHitInPMT4*1.0); - if(fNumHitInPMT5)fNumHitInPMT5->Fill(numTotHitInPMT5*1.0); - if(fNumHitInPMT6)fNumHitInPMT6->Fill(numTotHitInPMT6*1.0); - if(fNumHitInPMT7)fNumHitInPMT7->Fill(numTotHitInPMT7*1.0); - if(fNumHitInPMT8)fNumHitInPMT8->Fill(numTotHitInPMT8*1.0); - if(fNumHitInPMT9)fNumHitInPMT9->Fill(numTotHitInPMT9*1.0); - if(fNumHitInPMT10)fNumHitInPMT10->Fill(numTotHitInPMT10*1.0); - if(fNumHitInPMT11)fNumHitInPMT11->Fill(numTotHitInPMT11*1.0); - if(fNumHitInPMT12)fNumHitInPMT12->Fill(numTotHitInPMT12*1.0); - if(fNumHitInPMT13)fNumHitInPMT13->Fill(numTotHitInPMT13*1.0); - if(fNumHitInPMT14)fNumHitInPMT14->Fill(numTotHitInPMT14*1.0); - if(fNumHitInPMT15)fNumHitInPMT15->Fill(numTotHitInPMT15*1.0); - - - if(fNumHitInEventCentralPMTJura) fNumHitInEventCentralPMTJura->Fill ( numTotHitInEvCentralPmtJura ); - if(fNumHitInEventCentralPMTSaleve) fNumHitInEventCentralPMTSaleve->Fill ( numTotHitInEvCentralPmtSaleve ); - - - - // if(fhistoNrPhotAll) { - // G4cout<<"Now filling histoNrPhotAll"<<G4endl; - - // fhistoNrPhotAll->fill(1.0*numTotHitInEv); - - // G4cout<<"Test print histo mean rms "<< - // fhistoNrPhotAll->mean()<<" "<<fhistoNrPhotAll->rms()<<G4endl; - - // }else { - // G4cout<<" histoNrPhotAll Not available for filling"<<G4endl; - - // } - - - // if(fhistoNrPhotPMT0) { - // fhistoNrPhotPMT0->fill(1.0*numTotHitInPMT0); - // }else { - - // G4cout<<" histoNrPhotPMT0 Not available for filling"<<G4endl; - // } - - - // if(fhistoNrPhotPMT1) fhistoNrPhotPMT1->fill(1.0*numTotHitInPMT1); - // if(fhistoNrPhotPMT2) fhistoNrPhotPMT2->fill(1.0*numTotHitInPMT2); - // if(fhistoNrPhotPMT3) fhistoNrPhotPMT3->fill(1.0*numTotHitInPMT3); - // if(fhistoNrPhotPMT4) fhistoNrPhotPMT4->fill(1.0*numTotHitInPMT4); - // if(fhistoNrPhotPMT5) fhistoNrPhotPMT5->fill(1.0*numTotHitInPMT5); - - - - - } - - // test histo and ntuple - - G4double aRNum1= G4RandGauss::shoot(50.0,10.0); - - G4double aRNum2 = G4RandGauss::shoot(1.0,0.2); - - G4double aRNum3 = G4UniformRand() ; - if(fHisto[0] )fHisto[0] ->Fill( aRNum1 ); - - fNtupVar1 = aRNum2; - fNtupVar2 = aRNum3; - if (fNtuple1) fNtuple1->Fill(); - - // end test histo and ntuple - - // now for the hpd - - if( aRadiatorConfiguration == 2 ) { - EndOfEventHistoHpd(evt); - } - - - +void RichTbAnalysisManager::EndOfEventHistoHpd(const G4Event *evt) { + // RichTbRunConfig *rConfig = RichTbRunConfig::getRunConfigInstance(); + // G4int aRadiatorConfiguration = rConfig->getRadiatorConfiguration(); + RichTbCounter *aRichCounter = RichTbCounter::getRichTbCounterInstance(); + + G4SDManager *SDman = G4SDManager::GetSDMpointer(); + G4String colNam = RichTbHColnameHpd; + G4int RichTbCollID = SDman->GetCollectionID(colNam); + // G4int aVerboseFlag = rConfig->VerboseInfoFlag(); + + G4HCofThisEvent *HCE = evt->GetHCofThisEvent(); + RichTbHitsCollection *RHC = NULL; + if (HCE) { + RHC = (RichTbHitsCollection *)(HCE->GetHC(RichTbCollID)); + } + + if (RHC) { + G4int n_hit = RHC->entries(); + + for (G4int ih = 0; ih < n_hit; ih++) { + RichTbHit *aHit = (*RHC)[ih]; + + // G4int curHPDNum = aHit->GetCurHPDNum(); + G4ThreeVector curHitCoord = aHit->GetPos(); + + G4ThreeVector aPeOrigin = aHit->GetPeOrigin(); + G4ThreeVector aPixelCenterC = aHit->getPixelGlobalCenter(); + G4double aRefIndexHit = (aHit->GetCkvCosThetaProd()) != 0.0 ? 1.0 / (aHit->GetCkvCosThetaProd()) : 1.0; + G4double aWavelenHit = + (aHit->GetCkvEnergyProd()) != 0.0 ? 1243.125 / ((aHit->GetCkvEnergyProd()) * 1000000) : 0.0; + G4ThreeVector aLocalPixelCenterC = aHit->getPixelLocalCenter(); + G4double ax = aLocalPixelCenterC.x(); + G4double ay = aLocalPixelCenterC.y(); + G4double aDX = ax * ((1.0 / PixelPMTDemagLinearFactor) - 1.0); + G4double aDY = ay * ((1.0 / PixelPMTDemagLinearFactor) - 1.0); + G4double rdsq = -sqrt(ax * ax + ay * ay) / PixelPMTDemagLinearFactor; + G4double rPh = RichTbHpdPhCathodeInnerRad; + + G4double aDZ = -RichTbHpdSiDetDistZFromPhCathode + rPh * (1 - sqrt(1 - (rdsq) / (rPh * rPh))); + G4ThreeVector aGlobalPixelCenterPhcath = aPixelCenterC + G4ThreeVector(aDX, aDY, aDZ); + + // G4cout <<" hpd hits ih refindex energy wavelen "<< ih + // <<" "<<aRefIndexHit <<" "<< aHit->GetCkvEnergyProd()<<" "<<aWavelenHit<<G4endl; + + aRichCounter->bumpnumHitTotHpd0(); + // G4cout<<" a Peorigin X Y "<<ih <<" "<<aPeOrigin.x() << " "<< aPeOrigin.y()<<G4endl; + if (aPeOrigin.x() < -0.1) { // avoid unphysical ccord. + + if (aPeOrigin.x() > -80.0 && aPeOrigin.x() < -55.0) { + + aRichCounter->bumpnumHitSignalHpd0(); + } + + if (fGlobalHitXYCoordPeOriginHpd) + fGlobalHitXYCoordPeOriginHpd->Fill(aPeOrigin.x(), aPeOrigin.y()); + if (fGlobalHitXYCoordHpd) + fGlobalHitXYCoordHpd->Fill(curHitCoord.x(), curHitCoord.y()); + if (fGlobalPixelCenterXYCoordHpd) + fGlobalPixelCenterXYCoordHpd->Fill(aPixelCenterC.x(), aPixelCenterC.y()); + if (fGlobalHitXYCoordPeOriginHpdPmt) + fGlobalHitXYCoordPeOriginHpdPmt->Fill(aPeOrigin.x(), aPeOrigin.y()); + if (fRadiatorRefIndexHits) + fRadiatorRefIndexHits->Fill(aWavelenHit, (aRefIndexHit - 1)); + if (fGlobalHitXYCoordPixPhcathHpd) + fGlobalHitXYCoordPixPhcathHpd->Fill(aGlobalPixelCenterPhcath.x(), aGlobalPixelCenterPhcath.y()); + } + } + } + + G4int numTotHitInHpd0 = aRichCounter->getnumHitTotHpd0(); + + G4int numTotSignalInHpd0 = aRichCounter->getnumHitSignalHpd0(); + // G4cout <<" Num hit signal hpd0 "<< numTotHitInHpd0<<" "<<numTotSignalInHpd0<<G4endl; + + if (fNumHitInHPD0) + fNumHitInHPD0->Fill(numTotHitInHpd0 * 1.0); + if (fNumHitSignalInHPD0) + fNumHitSignalInHPD0->Fill(numTotSignalInHpd0 * 1.0); } - -void RichTbAnalysisManager::EndOfEventHistoHpd(const G4Event * evt) { - RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); - G4int aRadiatorConfiguration = rConfig ->getRadiatorConfiguration(); - RichTbCounter* aRichCounter= RichTbCounter::getRichTbCounterInstance(); - - G4SDManager * SDman = G4SDManager::GetSDMpointer(); - G4String colNam=RichTbHColnameHpd; - G4int RichTbCollID = SDman->GetCollectionID(colNam); - G4int aVerboseFlag = rConfig-> VerboseInfoFlag() ; - - - G4HCofThisEvent * HCE = evt->GetHCofThisEvent(); - RichTbHitsCollection* RHC = NULL; - if(HCE) - { - RHC = (RichTbHitsCollection*)(HCE->GetHC(RichTbCollID)); - } - - if(RHC) - { - G4int n_hit = RHC->entries(); - - - for(G4int ih=0; ih<n_hit; ih++) { - RichTbHit* aHit = (*RHC)[ih]; - - G4int curHPDNum = aHit->GetCurHPDNum() ; - G4ThreeVector curHitCoord= aHit-> GetPos(); - - G4ThreeVector aPeOrigin = aHit-> GetPeOrigin(); - G4ThreeVector aPixelCenterC = aHit->getPixelGlobalCenter() ; - G4double aRefIndexHit = (aHit-> GetCkvCosThetaProd()) != 0.0 ? 1.0/(aHit-> GetCkvCosThetaProd()) : 1.0; - G4double aWavelenHit = ( aHit->GetCkvEnergyProd()) != 0.0 ? - 1243.125 /((aHit->GetCkvEnergyProd())*1000000) : 0.0; - G4ThreeVector aLocalPixelCenterC = aHit->getPixelLocalCenter(); - G4double ax=aLocalPixelCenterC.x(); - G4double ay=aLocalPixelCenterC.y(); - G4double aDX = ax*( (1.0 /PixelPMTDemagLinearFactor) -1.0); - G4double aDY = ay*( (1.0 /PixelPMTDemagLinearFactor) - 1.0); - G4double rdsq = -sqrt(ax*ax + ay*ay )/PixelPMTDemagLinearFactor; - G4double rPh = RichTbHpdPhCathodeInnerRad; - - G4double aDZ = -RichTbHpdSiDetDistZFromPhCathode + rPh * (1- sqrt(1-(rdsq)/(rPh*rPh))); - G4ThreeVector aGlobalPixelCenterPhcath = aPixelCenterC + G4ThreeVector(aDX,aDY,aDZ) ; - - - // G4cout <<" hpd hits ih refindex energy wavelen "<< ih - // <<" "<<aRefIndexHit <<" "<< aHit->GetCkvEnergyProd()<<" "<<aWavelenHit<<G4endl; - - - - aRichCounter->bumpnumHitTotHpd0(); - // G4cout<<" a Peorigin X Y "<<ih <<" "<<aPeOrigin.x() << " "<< aPeOrigin.y()<<G4endl; - if( aPeOrigin.x() < -0.1 ) { // avoid unphysical ccord. - - if(aPeOrigin.x() > -80.0 && aPeOrigin.x() < -55.0) { - - aRichCounter->bumpnumHitSignalHpd0(); - - } - - if(fGlobalHitXYCoordPeOriginHpd)fGlobalHitXYCoordPeOriginHpd ->Fill(aPeOrigin.x(),aPeOrigin.y()); - if(fGlobalHitXYCoordHpd) fGlobalHitXYCoordHpd ->Fill(curHitCoord.x(), curHitCoord.y()); - if(fGlobalPixelCenterXYCoordHpd) fGlobalPixelCenterXYCoordHpd -> Fill(aPixelCenterC.x(), aPixelCenterC.y()); - if(fGlobalHitXYCoordPeOriginHpdPmt) fGlobalHitXYCoordPeOriginHpdPmt->Fill(aPeOrigin.x(),aPeOrigin.y()); - if(fRadiatorRefIndexHits) fRadiatorRefIndexHits ->Fill(aWavelenHit, (aRefIndexHit-1) ); - if( fGlobalHitXYCoordPixPhcathHpd) - fGlobalHitXYCoordPixPhcathHpd->Fill(aGlobalPixelCenterPhcath.x(),aGlobalPixelCenterPhcath.y()); - - } - - } - } - - G4int numTotHitInHpd0 = aRichCounter->getnumHitTotHpd0(); - - G4int numTotSignalInHpd0 = aRichCounter->getnumHitSignalHpd0(); - // G4cout <<" Num hit signal hpd0 "<< numTotHitInHpd0<<" "<<numTotSignalInHpd0<<G4endl; - - if(fNumHitInHPD0) fNumHitInHPD0 ->Fill( numTotHitInHpd0 * 1.0); - if(fNumHitSignalInHPD0) fNumHitSignalInHPD0 ->Fill( numTotSignalInHpd0 * 1.0); - - -} - - - - - diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbCounter.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbCounter.cc index 54513ea9eb44647fc4158c924d7e1e26369bf3c8..145ee802cf53d5a90c110ee371cf3c850171dcfc 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbCounter.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbCounter.cc @@ -1,8 +1,6 @@ // $Id: $ // Include files - - // local #include "RichTbCounter.hh" @@ -15,71 +13,62 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbCounter* RichTbCounter::RichTbCounterInstance = 0; - -RichTbCounter::RichTbCounter( ) { - resetRichTbCounter(); +RichTbCounter *RichTbCounter::RichTbCounterInstance = 0; -} +RichTbCounter::RichTbCounter() { resetRichTbCounter(); } //============================================================================= // Destructor //============================================================================= RichTbCounter::~RichTbCounter() {} //============================================================================= -RichTbCounter* RichTbCounter::getRichTbCounterInstance() -{ - if( RichTbCounterInstance == 0 ) { - RichTbCounterInstance = new RichTbCounter( ); - +RichTbCounter *RichTbCounter::getRichTbCounterInstance() { + if (RichTbCounterInstance == 0) { + RichTbCounterInstance = new RichTbCounter(); } - return RichTbCounterInstance; + return RichTbCounterInstance; } -void RichTbCounter::resetRichTbCounter() -{ - numHitTotProd=0; - numhitTotEv=0; - numhitTotEvCentralPmt=0; - numhitTotEvCentralPmtJura=0; - numhitTotEvCentralPmtSaleve=0; - - numhitPMT0=0; - numhitPMT1=0; - numhitPMT2=0; - numhitPMT3=0; - numhitPMT4=0; - numhitPMT5=0; - numhitPMT6=0; - numhitPMT7=0; - numhitPMT9=0; - numhitPMT8=0; - numhitPMT10=0; - numhitPMT11=0; - numhitPMT12=0; - numhitPMT13=0; - numhitPMT14=0; - numhitPMT15=0; - - - numPhEnterMirror=0; - numPhEnterPhSupFrame=0; - numPhEnterPMT0QW=0; - numPhEnterPMT1QW=0; - numPhEnterPMT2QW=0; - numPhEnterPMT3QW=0; - numPhEnterPMT4QW=0; - numPhEnterPMT5QW=0; - numPhEnterAnPMTQW=0; - numPhElecPMT0=0; - numPhElecPMT1=0; - numPhElecPMT2=0; - numPhElecPMT3=0; - numPhElecPMT4=0; - numPhElecPMT5=0; - - numHitTotHpd0=0; - numHitSignalHpd0=0; - - +void RichTbCounter::resetRichTbCounter() { + numHitTotProd = 0; + numhitTotEv = 0; + numhitTotEvCentralPmt = 0; + numhitTotEvCentralPmtJura = 0; + numhitTotEvCentralPmtSaleve = 0; + + numhitPMT0 = 0; + numhitPMT1 = 0; + numhitPMT2 = 0; + numhitPMT3 = 0; + numhitPMT4 = 0; + numhitPMT5 = 0; + numhitPMT6 = 0; + numhitPMT7 = 0; + numhitPMT9 = 0; + numhitPMT8 = 0; + numhitPMT10 = 0; + numhitPMT11 = 0; + numhitPMT12 = 0; + numhitPMT13 = 0; + numhitPMT14 = 0; + numhitPMT15 = 0; + + numPhEnterMirror = 0; + numPhEnterPhSupFrame = 0; + numPhEnterPMT0QW = 0; + numPhEnterPMT1QW = 0; + numPhEnterPMT2QW = 0; + numPhEnterPMT3QW = 0; + numPhEnterPMT4QW = 0; + numPhEnterPMT5QW = 0; + numPhEnterAnPMTQW = 0; + numPhElecPMT0 = 0; + numPhElecPMT1 = 0; + numPhElecPMT2 = 0; + numPhElecPMT3 = 0; + numPhElecPMT4 = 0; + numPhElecPMT5 = 0; + + numHitTotHpd0 = 0; + numHitSignalHpd0 = 0; } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbEventAction.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbEventAction.cc index bbdf70654711f3a563d4ad046d3f62591be24a24..8b73b29940fdc05a237a3e3129beaa7d7187cac8 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbEventAction.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbEventAction.cc @@ -1,128 +1,99 @@ #include "RichTbEventAction.hh" #include "Geant4/G4Event.hh" #include "Geant4/G4EventManager.hh" -#include "Geant4/G4TrajectoryContainer.hh" -#include "Geant4/G4Trajectory.hh" #include "Geant4/G4HCofThisEvent.hh" -#include "Geant4/G4VHitsCollection.hh" #include "Geant4/G4SDManager.hh" -#include "Geant4/G4VVisManager.hh" -#include "RichTbVisManager.hh" +#include "Geant4/G4Trajectory.hh" +#include "Geant4/G4TrajectoryContainer.hh" #include "Geant4/G4UImanager.hh" +#include "Geant4/G4VHitsCollection.hh" +#include "Geant4/G4VVisManager.hh" #include "Geant4/G4ios.hh" +#include "RichTbVisManager.hh" //#include "RichTbSD.hh" -#include "RichTbHit.hh" -#include "RichTbRunConfig.hh" #include "RichTbAnalysisManager.hh" +#include "RichTbCounter.hh" +#include "RichTbHit.hh" #include "RichTbIOData.hh" #include "RichTbMiscNames.hh" -#include "RichTbCounter.hh" - - -RichTbEventAction::RichTbEventAction( ) -{ - RichTbCollID = -1; - RichTbCollIDHpd = -1; - -} - - -RichTbEventAction::~RichTbEventAction() -{ +#include "RichTbRunConfig.hh" +RichTbEventAction::RichTbEventAction() { + RichTbCollID = -1; + RichTbCollIDHpd = -1; } +RichTbEventAction::~RichTbEventAction() {} -void RichTbEventAction::BeginOfEventAction(const G4Event * /* evt */) -{ +void RichTbEventAction::BeginOfEventAction(const G4Event * /* evt */) { - // reset the counters. + // reset the counters. - RichTbCounter* aRichCounter = - RichTbCounter::getRichTbCounterInstance(); - aRichCounter-> resetRichTbCounter(); + RichTbCounter *aRichCounter = RichTbCounter::getRichTbCounterInstance(); + aRichCounter->resetRichTbCounter(); - G4SDManager * SDman = G4SDManager::GetSDMpointer(); - if(RichTbCollID<0){ + G4SDManager *SDman = G4SDManager::GetSDMpointer(); + if (RichTbCollID < 0) { G4String colNam; - RichTbCollID = SDman->GetCollectionID(colNam= RichTbHColname); - + RichTbCollID = SDman->GetCollectionID(colNam = RichTbHColname); + } + RichTbRunConfig *RConfig = RichTbRunConfig::getRunConfigInstance(); + G4int aRadiatorConfiguration = RConfig->getRadiatorConfiguration(); -} - RichTbRunConfig* RConfig = RichTbRunConfig::getRunConfigInstance(); - G4int aRadiatorConfiguration = RConfig ->getRadiatorConfiguration(); - - if(aRadiatorConfiguration == 2 ){ - - if(RichTbCollIDHpd<0){ - G4String colNamh; - RichTbCollIDHpd = SDman->GetCollectionID(colNamh= RichTbHColnameHpd); - - } - - } - - - - -} + if (aRadiatorConfiguration == 2) { -void RichTbEventAction::EndOfEventAction(const G4Event * evt) -{ - RichTbRunConfig* RConfig = RichTbRunConfig::getRunConfigInstance(); - if(RichTbCollID<0) return; - // first get the trajectories - G4TrajectoryContainer* trajectoryContainer=evt->GetTrajectoryContainer(); - G4int n_trajectories=0; - if(trajectoryContainer){n_trajectories=trajectoryContainer->entries(); - G4cout << " " << n_trajectories - << " Tracks are stored in Trajectorycontainer." << G4endl; - } - // Now get the hits - - G4HCofThisEvent * HCE = evt->GetHCofThisEvent(); - RichTbHitsCollection* RHC = NULL; - if(HCE) - { - RHC = (RichTbHitsCollection*)(HCE->GetHC(RichTbCollID)); + if (RichTbCollIDHpd < 0) { + G4String colNamh; + RichTbCollIDHpd = SDman->GetCollectionID(colNamh = RichTbHColnameHpd); + } } +} - if(RHC) - { - G4int n_hit = RHC->entries(); - // G4cout << " " << n_hit - // << " hits are stored in RichTbHitsCollection." << G4endl; +void RichTbEventAction::EndOfEventAction(const G4Event *evt) { + RichTbRunConfig *RConfig = RichTbRunConfig::getRunConfigInstance(); + if (RichTbCollID < 0) + return; + // first get the trajectories + G4TrajectoryContainer *trajectoryContainer = evt->GetTrajectoryContainer(); + G4int n_trajectories = 0; + if (trajectoryContainer) { + n_trajectories = trajectoryContainer->entries(); + G4cout << " " << n_trajectories << " Tracks are stored in Trajectorycontainer." << G4endl; } + // Now get the hits + +// G4HCofThisEvent *HCE = evt->GetHCofThisEvent(); +// RichTbHitsCollection *RHC = NULL; +// if (HCE) { +// RHC = (RichTbHitsCollection *)(HCE->GetHC(RichTbCollID)); +// } + +// if (RHC) { +// G4int n_hit = RHC->entries(); + // G4cout << " " << n_hit << " hits are stored in RichTbHitsCollection." << G4endl; +// } // Now for analysis of hits related information. - RichTbAnalysisManager* aAnalysisManager= - RichTbAnalysisManager::getInstance(); + RichTbAnalysisManager *aAnalysisManager = RichTbAnalysisManager::getInstance(); // aAnalysisManager->EndOfEventCountersHisto(evt); - aAnalysisManager->EndOfEventHisto(evt); - - + aAnalysisManager->EndOfEventHisto(evt); - // Now to write out the data + // Now to write out the data - if(RConfig -> DoWriteOutputFile() ) { + if (RConfig->DoWriteOutputFile()) { - RichTbIOData* rTbIOData= RichTbIOData::getRichTbIODataInstance(); - - rTbIOData -> WriteOutEventHeaderData(evt); - rTbIOData -> WriteOutHitData(evt); - // G4cout << ">>> End of Event Number " << evt->GetEventID() << G4endl; + RichTbIOData *rTbIOData = RichTbIOData::getRichTbIODataInstance(); - } - G4int totNumev = RConfig ->getNumEventInBatchMode(); - if( totNumev > 100 ) { - if( (evt->GetEventID()) % (totNumev/100) == 0 ) { - G4cout << ">>> End of Event Number " << evt->GetEventID() << G4endl; - - } - } else { + rTbIOData->WriteOutEventHeaderData(evt); + rTbIOData->WriteOutHitData(evt); + // G4cout << ">>> End of Event Number " << evt->GetEventID() << G4endl; + } + G4int totNumev = RConfig->getNumEventInBatchMode(); + if (totNumev > 100) { + if ((evt->GetEventID()) % (totNumev / 100) == 0) { G4cout << ">>> End of Event Number " << evt->GetEventID() << G4endl; - } - + } + } else { + G4cout << ">>> End of Event Number " << evt->GetEventID() << G4endl; + } } - - diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPEInfo.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPEInfo.cc index b461d365eba4359752d7fd32726751414807b2c6..7ae25f70e1f8dc8aba607a5ffff18c3f60355c1f 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPEInfo.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPEInfo.cc @@ -1,7 +1,5 @@ // $Id: $ -// Include files - - +// Include files // local #include "RichTbPEInfo.hh" @@ -15,10 +13,7 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbPEInfo::RichTbPEInfo( ): mPhOrigin(0), mMotherPhotonInfo(0), - mPeOriginInHpdSupFrame(0){ - -} +RichTbPEInfo::RichTbPEInfo() : mPhOrigin(0), mMotherPhotonInfo(0), mPeOriginInHpdSupFrame(0) {} //============================================================================= // Destructor //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPeUserInfoAttach.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPeUserInfoAttach.cc index f1c91ac6ca28c8974b47e1628366e94a7764b9aa..7eb82a7a90a8c61f3e943ac851b4a0c4e64dccf6 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPeUserInfoAttach.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPeUserInfoAttach.cc @@ -1,68 +1,52 @@ // $Id: $ -// Include files - - +// Include files // local -#include "RichTbUserTrackInfo.hh" #include "RichTbPeUserInfoAttach.hh" -G4Track* RichTbPeInfoAttach( const G4Track& aPhotonTk, G4Track* aPETk, - G4ThreeVector aPeOriginInPhSup) -{ - G4VUserTrackInformation* aTkInfo=aPhotonTk.GetUserInformation(); - RichTbUserTrackInfo* curPhotTrackUserInfo= - (RichTbUserTrackInfo*) aTkInfo; - - G4ThreeVector CurPhotonOrigin = aPhotonTk.GetVertexPosition(); - G4ThreeVector CurPhotonEmisDir = aPhotonTk.GetVertexMomentumDirection(); - RichTbPEInfo* aRichTbPEInfo =new RichTbPEInfo(); - - if(curPhotTrackUserInfo && curPhotTrackUserInfo->HasUserPhotonInfo() ) { - RichTbPhotonInfo* aRichTbPhotonInfo = - curPhotTrackUserInfo->getRichTbPhotonInfo(); - aRichTbPEInfo-> setPhOrigin(CurPhotonOrigin); - aRichTbPEInfo-> setPhotEmisDir(CurPhotonEmisDir); - aRichTbPEInfo->setMotherPhotonInfo(aRichTbPhotonInfo); - aRichTbPEInfo->setPeOriginInHpdSupFrame(aPeOriginInPhSup); - +#include "RichTbUserTrackInfo.hh" +G4Track *RichTbPeInfoAttach(const G4Track &aPhotonTk, G4Track *aPETk, G4ThreeVector aPeOriginInPhSup) { + G4VUserTrackInformation *aTkInfo = aPhotonTk.GetUserInformation(); + RichTbUserTrackInfo *curPhotTrackUserInfo = (RichTbUserTrackInfo *)aTkInfo; + + G4ThreeVector CurPhotonOrigin = aPhotonTk.GetVertexPosition(); + G4ThreeVector CurPhotonEmisDir = aPhotonTk.GetVertexMomentumDirection(); + RichTbPEInfo *aRichTbPEInfo = new RichTbPEInfo(); + + if (curPhotTrackUserInfo && curPhotTrackUserInfo->HasUserPhotonInfo()) { + RichTbPhotonInfo *aRichTbPhotonInfo = curPhotTrackUserInfo->getRichTbPhotonInfo(); + aRichTbPEInfo->setPhOrigin(CurPhotonOrigin); + aRichTbPEInfo->setPhotEmisDir(CurPhotonEmisDir); + aRichTbPEInfo->setMotherPhotonInfo(aRichTbPhotonInfo); + aRichTbPEInfo->setPeOriginInHpdSupFrame(aPeOriginInPhSup); } - RichTbUserTrackInfo* curPeTrackUserInfo= - new RichTbUserTrackInfo( aRichTbPEInfo); - - aPETk->SetUserInformation(curPeTrackUserInfo); - - return aPETk; - + RichTbUserTrackInfo *curPeTrackUserInfo = new RichTbUserTrackInfo(aRichTbPEInfo); + + aPETk->SetUserInformation(curPeTrackUserInfo); + + return aPETk; } -G4Track* RichTbPeBckAttach( const G4Track& aPhotonTk, G4Track* aSecPETrack ) { - - G4VUserTrackInformation* aTkInfo=aPhotonTk.GetUserInformation(); - RichTbUserTrackInfo* curPhotTrackUserInfo= - (RichTbUserTrackInfo*) aTkInfo; +G4Track *RichTbPeBckAttach(const G4Track &aPhotonTk, G4Track *aSecPETrack) { - G4ThreeVector CurPhotonOrigin = aPhotonTk.GetVertexPosition(); - G4ThreeVector CurPhotonEmisDir = aPhotonTk.GetVertexMomentumDirection(); - RichTbPEInfo* aRichTbPEInfo =new RichTbPEInfo(); - - if(curPhotTrackUserInfo && curPhotTrackUserInfo->HasUserPhotonInfo() ) { - RichTbPhotonInfo* aRichTbPhotonInfo = - curPhotTrackUserInfo->getRichTbPhotonInfo(); - aRichTbPEInfo-> setPhOrigin(CurPhotonOrigin); - aRichTbPEInfo-> setPhotEmisDir(CurPhotonEmisDir); - aRichTbPEInfo->setMotherPhotonInfo(aRichTbPhotonInfo); - //aRichTbPEInfo->setPeOriginInHpdSupFrame(aPeOriginInPhSup); - - } + G4VUserTrackInformation *aTkInfo = aPhotonTk.GetUserInformation(); + RichTbUserTrackInfo *curPhotTrackUserInfo = (RichTbUserTrackInfo *)aTkInfo; - RichTbUserTrackInfo* curPeTrackUserInfo= - new RichTbUserTrackInfo( aRichTbPEInfo); - - aSecPETrack ->SetUserInformation(curPeTrackUserInfo); - - return aSecPETrack ; + G4ThreeVector CurPhotonOrigin = aPhotonTk.GetVertexPosition(); + G4ThreeVector CurPhotonEmisDir = aPhotonTk.GetVertexMomentumDirection(); + RichTbPEInfo *aRichTbPEInfo = new RichTbPEInfo(); + + if (curPhotTrackUserInfo && curPhotTrackUserInfo->HasUserPhotonInfo()) { + RichTbPhotonInfo *aRichTbPhotonInfo = curPhotTrackUserInfo->getRichTbPhotonInfo(); + aRichTbPEInfo->setPhOrigin(CurPhotonOrigin); + aRichTbPEInfo->setPhotEmisDir(CurPhotonEmisDir); + aRichTbPEInfo->setMotherPhotonInfo(aRichTbPhotonInfo); + // aRichTbPEInfo->setPeOriginInHpdSupFrame(aPeOriginInPhSup); + } + RichTbUserTrackInfo *curPeTrackUserInfo = new RichTbUserTrackInfo(aRichTbPEInfo); + aSecPETrack->SetUserInformation(curPeTrackUserInfo); + return aSecPETrack; } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPhotonInfo.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPhotonInfo.cc index 90e78a8be6c1b11790f8b668dc11211efe64745a..1f1fae81e894bef5898c22d49189db1124238e9a 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPhotonInfo.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPhotonInfo.cc @@ -1,7 +1,5 @@ // $Id: $ -// Include files - - +// Include files // local #include "RichTbPhotonInfo.hh" @@ -15,19 +13,11 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbPhotonInfo::RichTbPhotonInfo( ): mNumRayleighScat(0), - mPhotonCoordPMTQWExternal(0), - mPhotonPMTQWMultipleIncidenceFlag(0), - mCkvCosThetaAtProd(0.0), - mCkvPhiAtProd(-10.0), - mCkvPhotonEnergyAtProd(-1.0), - mParentChTrackMomentum(0.0), - mParentChTrackThreeMom(0), - mPhotonCrystalDnsTIRCoord(0), - mPhotonSphMirrReflCoord(0), - mPhotonCrystalDnsExitCoord(0), - mPhotonRadiatorMultipleIncidenceFlag(0) - {} +RichTbPhotonInfo::RichTbPhotonInfo() + : mNumRayleighScat(0), mPhotonCoordPMTQWExternal(0), mPhotonPMTQWMultipleIncidenceFlag(0), mCkvCosThetaAtProd(0.0), + mCkvPhiAtProd(-10.0), mCkvPhotonEnergyAtProd(-1.0), mParentChTrackMomentum(0.0), mParentChTrackThreeMom(0), + mPhotonCrystalDnsTIRCoord(0), mPhotonSphMirrReflCoord(0), mPhotonCrystalDnsExitCoord(0), + mPhotonRadiatorMultipleIncidenceFlag(0) {} //============================================================================= // Destructor //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPhotonProdHisto.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPhotonProdHisto.cc index 7a89f7f8540c385f55f3dc0bfe90dcb0140c256e..bed52c5c31a0cebf554ce3f6a62a6a6a64a81908 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPhotonProdHisto.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPhotonProdHisto.cc @@ -1,69 +1,57 @@ -#include "RichTbAnalysisManager.hh" -#include "RichTbMaterialParameters.hh" #include "RichTbPhotonProdHisto.hh" -#include "RichTbGeometryParameters.hh" +#include "RichTbAnalysisManager.hh" #include "RichTbCounter.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbMaterialParameters.hh" - -void RichTbPhotonProductionHisto (const G4Track& /* aChTrack */, - const G4Track* aPhotTrack, - const G4double /* CkvCosTh */, - const G4double /* CkvPhi */, - const G4double CkvPhEner) { - +void RichTbPhotonProductionHisto(const G4Track & /* aChTrack */, const G4Track *aPhotTrack, + const G4double /* CkvCosTh */, const G4double /* CkvPhi */, const G4double CkvPhEner) { // G4cout<<"begin RichTbPhotonProductionHisto "<<G4endl; - - //RichTbAnalysisManager* rAnalysisPhy=RichTbAnalysisManager::getInstance(); + + // RichTbAnalysisManager* rAnalysisPhy=RichTbAnalysisManager::getInstance(); // RichTbCounter* rCounter = RichTbCounter::getRichTbCounterInstance(); // G4double PhotWLength=0.0; // G4double PhotWLengthNano=0.0; - - if( CkvPhEner != 0.0 ) { - + + if (CkvPhEner != 0.0) { + // PhotWLength=PhotMomToWaveLength/ CkvPhEner ; - // PhotWLengthNano = PhotWLength/(CLHEP::nanometer); + // PhotWLengthNano = PhotWLength/(CLHEP::nanometer); } // G4double CkvTh = acos( CkvCosTh); - // G4cout<<" RichTbPhotonProductionHisto Photwlen Phener ckvth ckv phi " - // << PhotWLengthNano<<" "<< CkvTh<<" "<<CkvPhi - // <<G4endl; - + // G4cout<<" RichTbPhotonProductionHisto Photwlen Phener ckvth ckv phi " + // << PhotWLengthNano<<" "<< CkvTh<<" "<<CkvPhi + // <<G4endl; + + // G4String curVolName= aChTrack.GetVolume()->GetName(); + // G4String curMatName= aChTrack.GetMaterial()->GetName(); + // G4String curVolFirstPart = + // (curVolName.length() >= 7) ? curVolName(0,7):curVolName; - // G4String curVolName= aChTrack.GetVolume()->GetName(); - // G4String curMatName= aChTrack.GetMaterial()->GetName(); - //G4String curVolFirstPart = - // (curVolName.length() >= 7) ? curVolName(0,7):curVolName; + // G4cout<<" RichTbPhotonProductionHisto Cur Vol " + // << curVolName <<" "<< curVolFirstPart <<G4endl; - // G4cout<<" RichTbPhotonProductionHisto Cur Vol " - // << curVolName <<" "<< curVolFirstPart <<G4endl; - - G4ThreeVector avPos= aPhotTrack->GetVertexPosition() ; - // if( avPos.z() >= 0.0 && avPos.z() <= MirrrorNominalPivotZLocationInGlobal ) { - // rCounter->bumpnumHitTotProd(); - - // } - + G4ThreeVector avPos = aPhotTrack->GetVertexPosition(); + // if( avPos.z() >= 0.0 && avPos.z() <= MirrrorNominalPivotZLocationInGlobal ) { + // rCounter->bumpnumHitTotProd(); - // if( rAnalysisPhy->getfhistoWProduced() ) { - // rAnalysisPhy->getfhistoWProduced()->fill( PhotWLengthNano); - // } + // } + // if( rAnalysisPhy->getfhistoWProduced() ) { + // rAnalysisPhy->getfhistoWProduced()->fill( PhotWLengthNano); + // } - // if( rAnalysisPhy-> getfhistoCkvProdTheta()) { - - // rAnalysisPhy-> getfhistoCkvProdTheta()->fill( CkvTh ); - // } + // if( rAnalysisPhy-> getfhistoCkvProdTheta()) { - - // if(rAnalysisPhy-> getfhistoCkvProdPhi () ){// - // rAnalysisPhy-> getfhistoCkvProdPhi ()->fill(CkvPhi); - // } + // rAnalysisPhy-> getfhistoCkvProdTheta()->fill( CkvTh ); + // } - + // if(rAnalysisPhy-> getfhistoCkvProdPhi () ){// + // rAnalysisPhy-> getfhistoCkvProdPhi ()->fill(CkvPhi); + // } // G4cout<<"end RichTbPhotonProductionHisto "<<G4endl; - } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPhotonUserInfoAttach.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPhotonUserInfoAttach.cc index bf072112502a41de7f47fb466763ec854437a6fa..acc29064f78384d5d5677e541a350757b9d2554f 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPhotonUserInfoAttach.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPhotonUserInfoAttach.cc @@ -1,131 +1,100 @@ -#include "RichTbPhotonInfo.hh" +#include "RichTbPhotonUserInfoAttach.hh" #include "Geant4/globals.hh" +#include "RichTbPhotonInfo.hh" #include "RichTbUserTrackInfo.hh" -#include "RichTbPhotonUserInfoAttach.hh" -void RichTbPMTQWIncidenceInfoAttach(G4Track* aPhTrack, G4ThreeVector aQWPos) -{ - G4VUserTrackInformation* aUserTrackInfo = aPhTrack->GetUserInformation(); - - RichTbUserTrackInfo* aRichTbUserTrackInfoPhoton = - (RichTbUserTrackInfo * ) aUserTrackInfo; - - // G4cout << "in RichTbPMTQW...\t" << aUserTrackInfo -// << "\t" << aRichTbUserTrackInfoPhoton<< G4endl; - - if(aRichTbUserTrackInfoPhoton) - { - if(aRichTbUserTrackInfoPhoton->HasUserPhotonInfo() ) - { - RichTbPhotonInfo* aRichTbPhotonInfo = - aRichTbUserTrackInfoPhoton->getRichTbPhotonInfo(); - - if( aRichTbPhotonInfo ) - { - - aRichTbPhotonInfo->setPhotonCoordPMTQWExternal(aQWPos); - //G4cout << "Setting HPDQuartz ipmact vector" << G4endl; - aRichTbPhotonInfo->BumpPhotonPMTQWMultipleIncidenceFlag(); - - } - } - } +void RichTbPMTQWIncidenceInfoAttach(G4Track *aPhTrack, G4ThreeVector aQWPos) { + G4VUserTrackInformation *aUserTrackInfo = aPhTrack->GetUserInformation(); + + RichTbUserTrackInfo *aRichTbUserTrackInfoPhoton = (RichTbUserTrackInfo *)aUserTrackInfo; + + // G4cout << "in RichTbPMTQW...\t" << aUserTrackInfo + // << "\t" << aRichTbUserTrackInfoPhoton<< G4endl; + + if (aRichTbUserTrackInfoPhoton) { + if (aRichTbUserTrackInfoPhoton->HasUserPhotonInfo()) { + RichTbPhotonInfo *aRichTbPhotonInfo = aRichTbUserTrackInfoPhoton->getRichTbPhotonInfo(); + + if (aRichTbPhotonInfo) { + + aRichTbPhotonInfo->setPhotonCoordPMTQWExternal(aQWPos); + // G4cout << "Setting HPDQuartz ipmact vector" << G4endl; + aRichTbPhotonInfo->BumpPhotonPMTQWMultipleIncidenceFlag(); + } + } + } } -void RichTbRadiatorBoundaryInfoAttach(G4Track* aPhTrack, G4ThreeVector aBoundaryPos, G4int RFROption ){ - +void RichTbRadiatorBoundaryInfoAttach(G4Track *aPhTrack, G4ThreeVector aBoundaryPos, G4int RFROption) { + // RFROption = 0 means total internal reflection happened at this boundary // RFROption = 1 means normal refraction happened at this boundary. // RFROption = 2 means normal reflection happend at this boundary (mirror reflection) // For nominal signal photons the MultipleIncidenceFlag is bumped three times so that its value=3 + G4VUserTrackInformation *aUserTrackInfo = aPhTrack->GetUserInformation(); - G4VUserTrackInformation* aUserTrackInfo = aPhTrack->GetUserInformation(); - - RichTbUserTrackInfo* aRichTbUserTrackInfoPhoton = - (RichTbUserTrackInfo * ) aUserTrackInfo; - - // G4cout << "in RichTbTIR...\t" << aUserTrackInfo -// << "\t" << aRichTbUserTrackInfoPhoton<< G4endl; - - if(aRichTbUserTrackInfoPhoton) - { - if(aRichTbUserTrackInfoPhoton->HasUserPhotonInfo() ){ - RichTbPhotonInfo* aRichTbPhotonInfo = - aRichTbUserTrackInfoPhoton->getRichTbPhotonInfo(); - - if( aRichTbPhotonInfo ){ - if( RFROption == 0 ){ - aRichTbPhotonInfo->setPhotonCrystalDnsTIRCoord(aBoundaryPos); - }else if (RFROption == 1 ) { - aRichTbPhotonInfo-> setPhotonCrystalDnsExitCoord (aBoundaryPos); - } else if ( RFROption == 2 ) { - aRichTbPhotonInfo-> setPhotonSphMirrReflCoord(aBoundaryPos); - } - - aRichTbPhotonInfo->BumpPhotonRadiatorMultipleIncidenceFlag(); - //G4cout<<" RichTbPhotinfo attach RFR option flag "<< RFROption <<" " - // <<aRichTbPhotonInfo->PhotonRadiatorMultipleIncidenceFlag()<<G4endl; - - } - - } - - } + RichTbUserTrackInfo *aRichTbUserTrackInfoPhoton = (RichTbUserTrackInfo *)aUserTrackInfo; + + // G4cout << "in RichTbTIR...\t" << aUserTrackInfo + // << "\t" << aRichTbUserTrackInfoPhoton<< G4endl; + + if (aRichTbUserTrackInfoPhoton) { + if (aRichTbUserTrackInfoPhoton->HasUserPhotonInfo()) { + RichTbPhotonInfo *aRichTbPhotonInfo = aRichTbUserTrackInfoPhoton->getRichTbPhotonInfo(); + + if (aRichTbPhotonInfo) { + if (RFROption == 0) { + aRichTbPhotonInfo->setPhotonCrystalDnsTIRCoord(aBoundaryPos); + } else if (RFROption == 1) { + aRichTbPhotonInfo->setPhotonCrystalDnsExitCoord(aBoundaryPos); + } else if (RFROption == 2) { + aRichTbPhotonInfo->setPhotonSphMirrReflCoord(aBoundaryPos); + } + aRichTbPhotonInfo->BumpPhotonRadiatorMultipleIncidenceFlag(); + // G4cout<<" RichTbPhotinfo attach RFR option flag "<< RFROption <<" " + // <<aRichTbPhotonInfo->PhotonRadiatorMultipleIncidenceFlag()<<G4endl; + } + } + } } +void RichTbRayleighInfoAttach(const G4Track &aPhotonTrack) { + + G4VUserTrackInformation *aUserTrackInfo = aPhotonTrack.GetUserInformation(); + RichTbUserTrackInfo *aRichTbUserTrackInfoPhoton = (RichTbUserTrackInfo *)aUserTrackInfo; + if (aRichTbUserTrackInfoPhoton) { -void RichTbRayleighInfoAttach (const G4Track& aPhotonTrack) -{ - - G4VUserTrackInformation* aUserTrackInfo=aPhotonTrack.GetUserInformation(); - RichTbUserTrackInfo* aRichTbUserTrackInfoPhoton = - (RichTbUserTrackInfo * ) aUserTrackInfo; - - if(aRichTbUserTrackInfoPhoton) { - - if(aRichTbUserTrackInfoPhoton->HasUserPhotonInfo() ) { - RichTbPhotonInfo* aRichTbPhotonInfo = - aRichTbUserTrackInfoPhoton->getRichTbPhotonInfo(); - - if( aRichTbPhotonInfo ) { - aRichTbPhotonInfo-> BumpNumRaylieghScat(); - - } - - } - - - } - + if (aRichTbUserTrackInfoPhoton->HasUserPhotonInfo()) { + RichTbPhotonInfo *aRichTbPhotonInfo = aRichTbUserTrackInfoPhoton->getRichTbPhotonInfo(); + + if (aRichTbPhotonInfo) { + aRichTbPhotonInfo->BumpNumRaylieghScat(); + } + } + } } -G4Track* RichTbCkvProdInfoAttach(const G4Track& aChTrack, - G4Track* aPhotTrack, - const G4double CkvCosTheta, - const G4double CkvPhi, - const G4double CkvPhotEnergy) -{ - //const G4DynamicParticle* aChTrackParticle - // = aChTrack.GetDynamicParticle(); - - RichTbPhotonInfo* aRichTbPhotonInfo = new RichTbPhotonInfo(); - aRichTbPhotonInfo-> setCkvCosThetaAtProd(CkvCosTheta); - aRichTbPhotonInfo-> setCkvPhiAtProd( CkvPhi); - aRichTbPhotonInfo-> setCkvPhotonEnergyAtProd(CkvPhotEnergy); - aRichTbPhotonInfo-> setParentChTrackMomentum(aChTrack.GetDynamicParticle()-> GetTotalMomentum()); - aRichTbPhotonInfo-> setParentChTrackThreeMom(aChTrack.GetMomentum()); - RichTbUserTrackInfo* aRichTbUserTrackInfo = - new RichTbUserTrackInfo(aRichTbPhotonInfo ); - aPhotTrack->SetUserInformation( aRichTbUserTrackInfo); - - - // G4double Lambda = 1243.125*(CLHEP::nanometer*CLHEP::eV)/CkvPhotEnergy*1000000; - // G4cout<<" CkvprodInfoAttach Lambda Photonenergy " - // <<Lambda<<" "<<CkvPhotEnergy<<G4endl; - return aPhotTrack; +G4Track *RichTbCkvProdInfoAttach(const G4Track &aChTrack, G4Track *aPhotTrack, const G4double CkvCosTheta, + const G4double CkvPhi, const G4double CkvPhotEnergy) { + // const G4DynamicParticle* aChTrackParticle + // = aChTrack.GetDynamicParticle(); + + RichTbPhotonInfo *aRichTbPhotonInfo = new RichTbPhotonInfo(); + aRichTbPhotonInfo->setCkvCosThetaAtProd(CkvCosTheta); + aRichTbPhotonInfo->setCkvPhiAtProd(CkvPhi); + aRichTbPhotonInfo->setCkvPhotonEnergyAtProd(CkvPhotEnergy); + aRichTbPhotonInfo->setParentChTrackMomentum(aChTrack.GetDynamicParticle()->GetTotalMomentum()); + aRichTbPhotonInfo->setParentChTrackThreeMom(aChTrack.GetMomentum()); + RichTbUserTrackInfo *aRichTbUserTrackInfo = new RichTbUserTrackInfo(aRichTbPhotonInfo); + aPhotTrack->SetUserInformation(aRichTbUserTrackInfo); + + // G4double Lambda = 1243.125*(CLHEP::nanometer*CLHEP::eV)/CkvPhotEnergy*1000000; + // G4cout<<" CkvprodInfoAttach Lambda Photonenergy " + // <<Lambda<<" "<<CkvPhotEnergy<<G4endl; + return aPhotTrack; } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPmtSteppingAction.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPmtSteppingAction.cc index 081886d29a9123835b3b654e0d21e1478c50e858..6df6462a5ad418bf86a165d7b1d98a277dc03767 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPmtSteppingAction.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbPmtSteppingAction.cc @@ -1,319 +1,274 @@ -#include "Geant4/globals.hh" -#include <cmath> #include "RichTbPmtSteppingAction.hh" -#include "RichTbAnalysisManager.hh" -#include "RichTbMaterial.hh" -#include "RichTbGeometryParameters.hh" -#include "RichTbMaterialParameters.hh" -#include "RichTbRunConfig.hh" -#include "RichTbPrimaryGeneratorAction.hh" -#include "Geant4/G4ParticleDefinition.hh" #include "Geant4/G4DynamicParticle.hh" -#include "Geant4/G4Material.hh" -#include "Geant4/G4Step.hh" -#include "Geant4/G4Track.hh" #include "Geant4/G4Electron.hh" -#include "Geant4/G4ThreeVector.hh" +#include "Geant4/G4Material.hh" +#include "Geant4/G4Navigator.hh" #include "Geant4/G4OpticalPhoton.hh" +#include "Geant4/G4ParticleDefinition.hh" #include "Geant4/G4PionMinus.hh" -#include "RichTbCounter.hh" -#include "RichTbPhotonUserInfoAttach.hh" +#include "Geant4/G4Step.hh" +#include "Geant4/G4ThreeVector.hh" +#include "Geant4/G4Track.hh" +#include "Geant4/G4TransportationManager.hh" +#include "Geant4/globals.hh" +#include "RichTbAnalysisManager.hh" #include "RichTbBeamProperty.hh" +#include "RichTbCounter.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbMaterial.hh" +#include "RichTbMaterialParameters.hh" #include "RichTbPhotoElectron.hh" -#include "Geant4/G4Navigator.hh" -#include "Geant4/G4TransportationManager.hh" +#include "RichTbPhotonUserInfoAttach.hh" +#include "RichTbPrimaryGeneratorAction.hh" +#include "RichTbRunConfig.hh" #include "RichTbUserTrackInfo.hh" -#include "Geant4/G4ThreeVector.hh" - - -RichTbPmtSteppingAction::RichTbPmtSteppingAction():mChTrackMinMomFactorForHisto(0.95) -{ } -RichTbPmtSteppingAction::~RichTbPmtSteppingAction() -{ - ; -} - -void RichTbPmtSteppingAction::UserSteppingAction(const G4Step * aStep) { +#include <cmath> +RichTbPmtSteppingAction::RichTbPmtSteppingAction() : mChTrackMinMomFactorForHisto(0.95) {} +RichTbPmtSteppingAction::~RichTbPmtSteppingAction() { ; } +void RichTbPmtSteppingAction::UserSteppingAction(const G4Step *aStep) { // RichTbAnalysisManager* aRAnalysisManager = RichTbAnalysisManager::getInstance(); - RichTbRunConfig* aRunConfig = RichTbRunConfig::getRunConfigInstance(); - G4StepPoint* pPreStepPoint = aStep ->GetPreStepPoint(); - G4StepPoint* pPostStepPoint = aStep ->GetPostStepPoint(); - const G4ThreeVector prePos= pPreStepPoint->GetPosition(); - const G4ThreeVector postPos= pPostStepPoint->GetPosition(); - RichTbAnalysisManager * myanalysisManager = - RichTbAnalysisManager::getInstance(); - - - // G4Track* aTrack = aStep -> GetTrack(); - // const G4DynamicParticle* aParticle = aTrack->GetDynamicParticle(); - // const G4double aTrackEnergy = aParticle->GetKineticEnergy(); - - /* - //check for phelectron - if( aParticle->GetDefinition() == RichTbPhotoElectron::PhotoElectron()) { - // G4cout<<" electron! " <<G4endl; - if( aTrackEnergy > 0.0 ) - { - - // check prestep and post are valid physical volume - if( pPreStepPoint -> GetPhysicalVolume() && - pPostStepPoint -> GetPhysicalVolume() ) { - - G4String tpreVol = pPreStepPoint -> GetPhysicalVolume()->GetName(); - G4String tpostVol = pPostStepPoint -> GetPhysicalVolume()->GetName(); - - G4cout<<" pre post stepvol names "<< tpreVol << " "<< - tpostVol <<G4endl; - } - } - } - - */ + RichTbRunConfig *aRunConfig = RichTbRunConfig::getRunConfigInstance(); + G4StepPoint *pPreStepPoint = aStep->GetPreStepPoint(); + G4StepPoint *pPostStepPoint = aStep->GetPostStepPoint(); + const G4ThreeVector prePos = pPreStepPoint->GetPosition(); + const G4ThreeVector postPos = pPostStepPoint->GetPosition(); + RichTbAnalysisManager *myanalysisManager = RichTbAnalysisManager::getInstance(); + + // G4Track* aTrack = aStep -> GetTrack(); + // const G4DynamicParticle* aParticle = aTrack->GetDynamicParticle(); + // const G4double aTrackEnergy = aParticle->GetKineticEnergy(); + + /* + //check for phelectron + if( aParticle->GetDefinition() == RichTbPhotoElectron::PhotoElectron()) { + // G4cout<<" electron! " <<G4endl; + if( aTrackEnergy > 0.0 ) + { + + // check prestep and post are valid physical volume + if( pPreStepPoint -> GetPhysicalVolume() && + pPostStepPoint -> GetPhysicalVolume() ) { + + G4String tpreVol = pPreStepPoint -> GetPhysicalVolume()->GetName(); + G4String tpostVol = pPostStepPoint -> GetPhysicalVolume()->GetName(); + + G4cout<<" pre post stepvol names "<< tpreVol << " "<< + tpostVol <<G4endl; + } + } + } + */ // check photon presetp inside the vessel - if( (prePos.z()< RichTbVesselDnsZEnd ) && - (prePos.x()< RichTbVesselXPosExtreme && - prePos.x() > RichTbVesselXNegExtreme ) && - (prePos.y() < RichTbVesselYPosExtreme && - prePos.y() > RichTbVesselYNegExtreme) ) - - { - // check photon at a geometrical boundary - if (pPostStepPoint->GetStepStatus() == fGeomBoundary) { - - G4Track* aTrack = aStep -> GetTrack(); - const G4DynamicParticle* aParticle = aTrack->GetDynamicParticle(); - const G4double aTrackEnergy = aParticle->GetKineticEnergy(); - - // test for photons which are not already killed. - - if( (aParticle->GetDefinition() == G4OpticalPhoton::OpticalPhoton()) && - ( aTrackEnergy > 0.0 )) - { - - // check prestep and post are valid physical volume - if( pPreStepPoint -> GetPhysicalVolume() && - pPostStepPoint -> GetPhysicalVolume() ) { - - G4String tpreVol = pPreStepPoint -> GetPhysicalVolume()->GetName(); - G4String tpostVol = pPostStepPoint -> GetPhysicalVolume()->GetName(); + if ((prePos.z() < RichTbVesselDnsZEnd) && + (prePos.x() < RichTbVesselXPosExtreme && prePos.x() > RichTbVesselXNegExtreme) && + (prePos.y() < RichTbVesselYPosExtreme && prePos.y() > RichTbVesselYNegExtreme)) - // G4cout<<" pre post stepvol names "<< tpreVol << " "<< - // tpostVol <<G4endl; + { + // check photon at a geometrical boundary + if (pPostStepPoint->GetStepStatus() == fGeomBoundary) { - if((tpreVol == CrystalMasterPhysName) && - ((tpostVol == PhDetSupPhysNameLeft) || (tpostVol == PhDetSupPhysNameRight) - || (tpostVol == PhDetSupPhysNameBottomLeft)) || (tpostVol == PhDetSupPhysNameBottomRight)) { + G4Track *aTrack = aStep->GetTrack(); + const G4DynamicParticle *aParticle = aTrack->GetDynamicParticle(); + const G4double aTrackEnergy = aParticle->GetKineticEnergy(); - //print photon coordinate at the current step. - // G4cout<<" do something " <<G4endl; - // G4cout<<"Photon incidence on Photonframe "<< prePos << " "<<postPos<<G4endl; - if( myanalysisManager -> getPhotonXCoord()) { - // G4cout<<"x coordinate "<< postPos.x() <<G4endl; - myanalysisManager -> getPhotonXCoord()->Fill( postPos.x()); - // G4cout<<"x coordinate "<< postPos.x() <<G4endl; - } - if( myanalysisManager -> getPhotonYCoord()) { - myanalysisManager -> getPhotonYCoord()->Fill( postPos.y()); - // G4cout<<"Y coordinate "<< postPos.y() <<G4endl; - } + // test for photons which are not already killed. - if( myanalysisManager -> getPhotonZCoord()) { - myanalysisManager -> getPhotonZCoord()->Fill( postPos.z()); - // G4cout<<"z coordinate "<< postPos.z() <<G4endl; - } + if ((aParticle->GetDefinition() == G4OpticalPhoton::OpticalPhoton()) && (aTrackEnergy > 0.0)) { - if( myanalysisManager -> getPhotonXYCoord()) { - myanalysisManager -> getPhotonXYCoord()->Fill(postPos.x(), postPos.y()); - //G4cout<<"z coordinate "<< postPos.z() <<G4endl; - } - if( myanalysisManager -> getPhotonXYCoordProfile()) { - myanalysisManager -> getPhotonXYCoordProfile()->Fill(postPos.y(), postPos.x()); - } + // check prestep and post are valid physical volume + if (pPreStepPoint->GetPhysicalVolume() && pPostStepPoint->GetPhysicalVolume()) { + G4String tpreVol = pPreStepPoint->GetPhysicalVolume()->GetName(); + G4String tpostVol = pPostStepPoint->GetPhysicalVolume()->GetName(); + // G4cout<<" pre post stepvol names "<< tpreVol << " "<< + // tpostVol <<G4endl; + if (((tpreVol == CrystalMasterPhysName) && + ((tpostVol == PhDetSupPhysNameLeft) || (tpostVol == PhDetSupPhysNameRight) || + (tpostVol == PhDetSupPhysNameBottomLeft))) || + (tpostVol == PhDetSupPhysNameBottomRight)) { + // print photon coordinate at the current step. + // G4cout<<" do something " <<G4endl; + // G4cout<<"Photon incidence on Photonframe "<< prePos << " "<<postPos<<G4endl; + if (myanalysisManager->getPhotonXCoord()) { + // G4cout<<"x coordinate "<< postPos.x() <<G4endl; + myanalysisManager->getPhotonXCoord()->Fill(postPos.x()); + // G4cout<<"x coordinate "<< postPos.x() <<G4endl; + } + if (myanalysisManager->getPhotonYCoord()) { + myanalysisManager->getPhotonYCoord()->Fill(postPos.y()); + // G4cout<<"Y coordinate "<< postPos.y() <<G4endl; + } - if(postPos.y()>-30.0 && postPos.y()< +30.0){ - if((postPos.x()>-60.0 && postPos.x()< -20.0) || (postPos.x()<60.0 && postPos.x()> 20.0)){ - double y = postPos.y() - 0.0; - double x = postPos.x() + 0.0; - double radius = sqrt(y*y + x*x); - double emisptZ= aTrack->GetVertexPosition().z(); - - myanalysisManager -> getPhotonWidthProfile()->Fill(radius); - if(myanalysisManager -> getfCkvRadiusVsEmisPtPhoton()) - myanalysisManager -> getfCkvRadiusVsEmisPtPhoton()->Fill( emisptZ, radius); - if(myanalysisManager ->getfEmisPtPhoton()) - myanalysisManager ->getfEmisPtPhoton()->Fill(emisptZ); - - G4VUserTrackInformation* aTkInfo=aTrack->GetUserInformation(); - RichTbUserTrackInfo* curPhotTrackUserInfo= (RichTbUserTrackInfo*) aTkInfo; - if(curPhotTrackUserInfo && curPhotTrackUserInfo->HasUserPhotonInfo() ) { - RichTbPhotonInfo* aRichTbPhotonInfo = - curPhotTrackUserInfo->getRichTbPhotonInfo(); - if(aRichTbPhotonInfo) { - G4double aChTrackTotMom = aRichTbPhotonInfo->ParentChTrackMomentum(); - G4ThreeVector aPhotTIR =aRichTbPhotonInfo-> PhotonCrystalDnsTIRCoord(); - G4ThreeVector aPhotMIR =aRichTbPhotonInfo-> PhotonSphMirrReflCoord(); - G4ThreeVector aPhotRFR =aRichTbPhotonInfo-> PhotonCrystalDnsExitCoord(); - - // G4cout<<" aPhotTIR "<<aPhotTIR <<G4endl; - - if( aChTrackTotMom > ( mChTrackMinMomFactorForHisto* (aRunConfig-> getRichTbParticleMomentum()))) { - - if(myanalysisManager ->getfEmisPtPrimaryTrackPhoton()) - myanalysisManager ->getfEmisPtPrimaryTrackPhoton()->Fill(emisptZ); - G4double aCkvAtProd = acos(aRichTbPhotonInfo->CkvCosThetaAtProd()); - - if(myanalysisManager ->getfGeneratedCkvPhoton() ) - myanalysisManager ->getfGeneratedCkvPhoton() ->Fill(aCkvAtProd); - // G4cout<<" aPhotTIR Fill "<<aPhotTIR <<G4endl; - - if(myanalysisManager ->getfTIRXYLocationPhoton() ) - myanalysisManager ->getfTIRXYLocationPhoton()->Fill (aPhotTIR.x(), aPhotTIR.y() ); - - if(myanalysisManager ->getfMIRXYLocationPhoton() ) - myanalysisManager ->getfMIRXYLocationPhoton()->Fill (aPhotMIR.x(), aPhotMIR.y() ); - - if(myanalysisManager ->getfRFRXYLocationPhoton() ) - myanalysisManager ->getfRFRXYLocationPhoton()->Fill (aPhotRFR.x(), aPhotRFR.y() ); - - + if (myanalysisManager->getPhotonZCoord()) { + myanalysisManager->getPhotonZCoord()->Fill(postPos.z()); + // G4cout<<"z coordinate "<< postPos.z() <<G4endl; + } - } + if (myanalysisManager->getPhotonXYCoord()) { + myanalysisManager->getPhotonXYCoord()->Fill(postPos.x(), postPos.y()); + // G4cout<<"z coordinate "<< postPos.z() <<G4endl; + } + if (myanalysisManager->getPhotonXYCoordProfile()) { + myanalysisManager->getPhotonXYCoordProfile()->Fill(postPos.y(), postPos.x()); + } + if (postPos.y() > -30.0 && postPos.y() < +30.0) { + if ((postPos.x() > -60.0 && postPos.x() < -20.0) || (postPos.x() < 60.0 && postPos.x() > 20.0)) { + double y = postPos.y() - 0.0; + double x = postPos.x() + 0.0; + double radius = sqrt(y * y + x * x); + double emisptZ = aTrack->GetVertexPosition().z(); + + myanalysisManager->getPhotonWidthProfile()->Fill(radius); + if (myanalysisManager->getfCkvRadiusVsEmisPtPhoton()) + myanalysisManager->getfCkvRadiusVsEmisPtPhoton()->Fill(emisptZ, radius); + if (myanalysisManager->getfEmisPtPhoton()) + myanalysisManager->getfEmisPtPhoton()->Fill(emisptZ); + + G4VUserTrackInformation *aTkInfo = aTrack->GetUserInformation(); + RichTbUserTrackInfo *curPhotTrackUserInfo = (RichTbUserTrackInfo *)aTkInfo; + if (curPhotTrackUserInfo && curPhotTrackUserInfo->HasUserPhotonInfo()) { + RichTbPhotonInfo *aRichTbPhotonInfo = curPhotTrackUserInfo->getRichTbPhotonInfo(); + if (aRichTbPhotonInfo) { + G4double aChTrackTotMom = aRichTbPhotonInfo->ParentChTrackMomentum(); + G4ThreeVector aPhotTIR = aRichTbPhotonInfo->PhotonCrystalDnsTIRCoord(); + G4ThreeVector aPhotMIR = aRichTbPhotonInfo->PhotonSphMirrReflCoord(); + G4ThreeVector aPhotRFR = aRichTbPhotonInfo->PhotonCrystalDnsExitCoord(); + + // G4cout<<" aPhotTIR "<<aPhotTIR <<G4endl; + + if (aChTrackTotMom > (mChTrackMinMomFactorForHisto * (aRunConfig->getRichTbParticleMomentum()))) { + + if (myanalysisManager->getfEmisPtPrimaryTrackPhoton()) + myanalysisManager->getfEmisPtPrimaryTrackPhoton()->Fill(emisptZ); + G4double aCkvAtProd = acos(aRichTbPhotonInfo->CkvCosThetaAtProd()); + + if (myanalysisManager->getfGeneratedCkvPhoton()) + myanalysisManager->getfGeneratedCkvPhoton()->Fill(aCkvAtProd); + // G4cout<<" aPhotTIR Fill "<<aPhotTIR <<G4endl; + + if (myanalysisManager->getfTIRXYLocationPhoton()) + myanalysisManager->getfTIRXYLocationPhoton()->Fill(aPhotTIR.x(), aPhotTIR.y()); + + if (myanalysisManager->getfMIRXYLocationPhoton()) + myanalysisManager->getfMIRXYLocationPhoton()->Fill(aPhotMIR.x(), aPhotMIR.y()); + + if (myanalysisManager->getfRFRXYLocationPhoton()) + myanalysisManager->getfRFRXYLocationPhoton()->Fill(aPhotRFR.x(), aPhotRFR.y()); + } + } } - - - } - - + } } - - - } - - } - - + } } } - } - } - - - - - - - - /* - //angle on frame - const G4ThreeVector CurPhotDir = aTrack ->GetMomentumDirection() ; - G4cout<<" Photon direction "<< CurPhotDir <<G4endl; - G4double IncidenceAngle = asin(-CurPhotDir.x()/sqrt( CurPhotDir.x()*CurPhotDir.x() + - CurPhotDir.z()*CurPhotDir.z())); - if( myanalysisManager -> getPhotonZAngle()) { - myanalysisManager -> getPhotonZAngle()->Fill( IncidenceAngle); - } - G4double TiltAngle = - aRunConfig->getSpecialStudyCrystalRotationY(); - G4double CherenkovAngle = asin( sin( IncidenceAngle - TiltAngle )/1.5) + TiltAngle; - G4cout<<"Cherenkov angle "<<CherenkovAngle <<G4endl; - if( myanalysisManager -> getCherenkovAngle()) { - myanalysisManager -> getCherenkovAngle()->Fill(CherenkovAngle); - } - - //radius as a function of lambda - const G4ThreeVector CurPhotMom = aTrack ->GetMomentum() ; - - G4double Energy = sqrt( CurPhotMom.x()*CurPhotMom.x() + CurPhotMom.y()*CurPhotMom.y() + - CurPhotMom.z()*CurPhotMom.z()); - G4double Lambda = 1243.125*(CLHEP::nanometer*CLHEP::eV)/Energy*1000000; - G4cout<<"Energy "<< Energy <<G4endl; - G4cout<<"Lambda "<< Lambda <<G4endl; - if( myanalysisManager -> getSpectrum()) { - myanalysisManager -> getSpectrum()->Fill(Lambda); - } - if( myanalysisManager -> getRadiusVsWL()) { - if(postPos.y()>-30.0 && postPos.y()< +30.0){ - if(postPos.x()>-60.0 && postPos.x()< -20.0){ - double y = postPos.y() - 0.0; - double x = postPos.x() + 0.0; - double radius = sqrt(y*y + x*x); - myanalysisManager -> getRadiusVsWL()->Fill(Lambda,radius); - if( myanalysisManager -> getRadiusVsWLProfile()) { - myanalysisManager -> getRadiusVsWLProfile()->Fill(Lambda,radius); - } - } - } - } - - - - //I just keep central hits - if(postPos.y()>-50.0 && postPos.y()< +50.0){ - - if( myanalysisManager -> getPhotonXYCoordProfileCut()) { - myanalysisManager -> getPhotonXYCoordProfileCut()->Fill(postPos.y(), postPos.x()); - } - if( myanalysisManager -> getCherenkovAngleCut()) { - myanalysisManager -> getCherenkovAngleCut()->Fill(CherenkovAngle); - } - } - } - // check post mirror - if(tpreVol == MirrorPhysName && - tpostVol == CrystalMasterPhysName ) { + } + } + + /* + //angle on frame + const G4ThreeVector CurPhotDir = aTrack ->GetMomentumDirection() ; + G4cout<<" Photon direction "<< CurPhotDir <<G4endl; + G4double IncidenceAngle = asin(-CurPhotDir.x()/sqrt( CurPhotDir.x()*CurPhotDir.x() + + CurPhotDir.z()*CurPhotDir.z())); + if( myanalysisManager -> getPhotonZAngle()) { + myanalysisManager -> getPhotonZAngle()->Fill( IncidenceAngle); + } + G4double TiltAngle = - aRunConfig->getSpecialStudyCrystalRotationY(); + G4double CherenkovAngle = asin( sin( IncidenceAngle - TiltAngle )/1.5) + TiltAngle; + G4cout<<"Cherenkov angle "<<CherenkovAngle <<G4endl; + if( myanalysisManager -> getCherenkovAngle()) { + myanalysisManager -> getCherenkovAngle()->Fill(CherenkovAngle); + } + + //radius as a function of lambda + const G4ThreeVector CurPhotMom = aTrack ->GetMomentum() ; + + G4double Energy = sqrt( CurPhotMom.x()*CurPhotMom.x() + CurPhotMom.y()*CurPhotMom.y() + + CurPhotMom.z()*CurPhotMom.z()); + G4double Lambda = 1243.125*(CLHEP::nanometer*CLHEP::eV)/Energy*1000000; + G4cout<<"Energy "<< Energy <<G4endl; + G4cout<<"Lambda "<< Lambda <<G4endl; + if( myanalysisManager -> getSpectrum()) { + myanalysisManager -> getSpectrum()->Fill(Lambda); + } + if( myanalysisManager -> getRadiusVsWL()) { + if(postPos.y()>-30.0 && postPos.y()< +30.0){ + if(postPos.x()>-60.0 && postPos.x()< -20.0){ + double y = postPos.y() - 0.0; + double x = postPos.x() + 0.0; + double radius = sqrt(y*y + x*x); + myanalysisManager -> getRadiusVsWL()->Fill(Lambda,radius); + if( myanalysisManager -> getRadiusVsWLProfile()) { + myanalysisManager -> getRadiusVsWLProfile()->Fill(Lambda,radius); + } + } + } + } - //radius as a function of lambda - const G4ThreeVector CurPhotMom = aTrack ->GetMomentum() ; + //I just keep central hits + if(postPos.y()>-50.0 && postPos.y()< +50.0){ - G4double Energy = sqrt( CurPhotMom.x()*CurPhotMom.x() + CurPhotMom.y()*CurPhotMom.y() + - CurPhotMom.z()*CurPhotMom.z()); - G4double Lambda = 1243.125*(CLHEP::nanometer*CLHEP::eV)/Energy*1000000; - G4cout<<"Energy post mirror "<< Energy <<G4endl; - G4cout<<"Lambda post mirror "<< Lambda <<G4endl; - if( myanalysisManager -> getSpectrumPostMirror()) { - myanalysisManager -> getSpectrumPostMirror()->Fill(Lambda); - } - } + if( myanalysisManager -> getPhotonXYCoordProfileCut()) { + myanalysisManager -> getPhotonXYCoordProfileCut()->Fill(postPos.y(), postPos.x()); + } + if( myanalysisManager -> getCherenkovAngleCut()) { + myanalysisManager -> getCherenkovAngleCut()->Fill(CherenkovAngle); + } + } + } + // check post mirror + if(tpreVol == MirrorPhysName && + tpostVol == CrystalMasterPhysName ) { - // check pre mirror - if(tpreVol == CrystalMasterPhysName && - tpostVol == MirrorPhysName ) { + //radius as a function of lambda + const G4ThreeVector CurPhotMom = aTrack ->GetMomentum() ; - //radius as a function of lambda - const G4ThreeVector CurPhotMom = aTrack ->GetMomentum() ; + G4double Energy = sqrt( CurPhotMom.x()*CurPhotMom.x() + CurPhotMom.y()*CurPhotMom.y() + + CurPhotMom.z()*CurPhotMom.z()); + G4double Lambda = 1243.125*(CLHEP::nanometer*CLHEP::eV)/Energy*1000000; + G4cout<<"Energy post mirror "<< Energy <<G4endl; + G4cout<<"Lambda post mirror "<< Lambda <<G4endl; + if( myanalysisManager -> getSpectrumPostMirror()) { + myanalysisManager -> getSpectrumPostMirror()->Fill(Lambda); + } + } - G4double Energy = sqrt( CurPhotMom.x()*CurPhotMom.x() + CurPhotMom.y()*CurPhotMom.y() + - CurPhotMom.z()*CurPhotMom.z()); - G4double Lambda = 1243.125*(CLHEP::nanometer*CLHEP::eV)/Energy*1000000; - G4cout<<"Energy pre mirror "<< Energy <<G4endl; - G4cout<<"Lambda pre mirror "<< Lambda <<G4endl; - if( myanalysisManager -> getSpectrumPreMirror()) { - myanalysisManager -> getSpectrumPreMirror()->Fill(Lambda); - } - } + // check pre mirror + if(tpreVol == CrystalMasterPhysName && + tpostVol == MirrorPhysName ) { - } - } - */ + //radius as a function of lambda + const G4ThreeVector CurPhotMom = aTrack ->GetMomentum() ; + G4double Energy = sqrt( CurPhotMom.x()*CurPhotMom.x() + CurPhotMom.y()*CurPhotMom.y() + + CurPhotMom.z()*CurPhotMom.z()); + G4double Lambda = 1243.125*(CLHEP::nanometer*CLHEP::eV)/Energy*1000000; + G4cout<<"Energy pre mirror "<< Energy <<G4endl; + G4cout<<"Lambda pre mirror "<< Lambda <<G4endl; + if( myanalysisManager -> getSpectrumPreMirror()) { + myanalysisManager -> getSpectrumPreMirror()->Fill(Lambda); + } + } + } + } + */ } - - diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbStackingAction.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbStackingAction.cc index f48826c5048f8dba1495962dea30790991b78ba9..e2c8c42f351503ba6ef1feab8a02d71e2047093b 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbStackingAction.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbStackingAction.cc @@ -1,12 +1,5 @@ #include "RichTbStackingAction.hh" -RichTbStackingAction::RichTbStackingAction() -{ - ; -} +RichTbStackingAction::RichTbStackingAction() { ; } - -RichTbStackingAction::~RichTbStackingAction() -{ - ; -} +RichTbStackingAction::~RichTbStackingAction() { ; } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbSteppingAction.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbSteppingAction.cc index 1f6a451c092c2d30014ce8ec3d50fe454b594fb6..fd5d06f242c2ceb38c8af4a8f999ca9f962ced69 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbSteppingAction.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbSteppingAction.cc @@ -1,485 +1,390 @@ -#include "Geant4/globals.hh" #include "RichTbSteppingAction.hh" -#include "Geant4/G4SteppingManager.hh" -#include "RichTbAnalysisManager.hh" -#include "RichTbMaterial.hh" -#include "RichTbGeometryParameters.hh" -#include "RichTbMaterialParameters.hh" -#include "RichTbRunConfig.hh" -#include "RichTbPrimaryGeneratorAction.hh" -#include "Geant4/G4ParticleDefinition.hh" #include "Geant4/G4DynamicParticle.hh" -#include "Geant4/G4Material.hh" -#include "Geant4/G4Step.hh" -#include "Geant4/G4Track.hh" #include "Geant4/G4Electron.hh" -#include "Geant4/G4ThreeVector.hh" +#include "Geant4/G4Material.hh" +#include "Geant4/G4Navigator.hh" #include "Geant4/G4OpticalPhoton.hh" +#include "Geant4/G4ParticleDefinition.hh" #include "Geant4/G4PionMinus.hh" +#include "Geant4/G4Step.hh" +#include "Geant4/G4SteppingManager.hh" +#include "Geant4/G4ThreeVector.hh" +#include "Geant4/G4Track.hh" +#include "Geant4/G4TransportationManager.hh" +#include "Geant4/globals.hh" +#include "RichTbAnalysisManager.hh" +#include "RichTbBeamProperty.hh" #include "RichTbCounter.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbMaterial.hh" +#include "RichTbMaterialParameters.hh" #include "RichTbPhotonUserInfoAttach.hh" -#include "RichTbBeamProperty.hh" -#include "Geant4/G4Navigator.hh" -#include "Geant4/G4TransportationManager.hh" - - -RichTbSteppingAction::RichTbSteppingAction() -{ - G4cout<<" Created user RichTbSteppingAction "<<G4endl; - - - // ranalysisManager = RichTbAnalysisManager::getInstance(); - // richtbRunConfig = RichTbRunConfig::getRunConfigInstance(); - // rPrimGenAction = RPrimGenAction; - // PMTPhElectronKE = richtbRunConfig->getPMTPhElectronEnergy(); - // uParticleChange = new G4VParticleChange(); -} +#include "RichTbPrimaryGeneratorAction.hh" +#include "RichTbRunConfig.hh" +RichTbSteppingAction::RichTbSteppingAction() { + G4cout << " Created user RichTbSteppingAction " << G4endl; -RichTbSteppingAction::~RichTbSteppingAction() -{ - ; + // ranalysisManager = RichTbAnalysisManager::getInstance(); + // richtbRunConfig = RichTbRunConfig::getRunConfigInstance(); + // rPrimGenAction = RPrimGenAction; + // PMTPhElectronKE = richtbRunConfig->getPMTPhElectronEnergy(); + // uParticleChange = new G4VParticleChange(); } +RichTbSteppingAction::~RichTbSteppingAction() { ; } -void RichTbSteppingAction::UserSteppingAction(const G4Step * aStep) -{ - - - - RichTbRadiatorLensBoundaryIncidenceStep(aStep); - - RichTbPMTIncidenceStep(aStep); - - // RichTbGenericHisto(aStep); - // RichTbDebugHisto(aStep); - - RichTbCounter* aRCounter = RichTbCounter::getRichTbCounterInstance(); - // RichTbAnalysisManager* aRAnalysisManager = RichTbAnalysisManager::getInstance(); - // RichTbRunConfig* aRunConfig = RichTbRunConfig::getRunConfigInstance(); - - G4StepPoint* pPreStepPoint = aStep ->GetPreStepPoint(); - G4StepPoint* pPostStepPoint = aStep ->GetPostStepPoint(); - const G4ThreeVector prePos= pPreStepPoint->GetPosition(); - const G4ThreeVector postPos= pPostStepPoint->GetPosition(); - // now test if the prestep is inside the vessel. +void RichTbSteppingAction::UserSteppingAction(const G4Step *aStep) { - if( (prePos.z()< RichTbVesselDnsZEnd && prePos.z() >= 0.0*CLHEP::mm) && - (prePos.x()< RichTbVesselXPosExtreme && - prePos.x() > RichTbVesselXNegExtreme ) && - (prePos.y() < RichTbVesselYPosExtreme && - prePos.y() > RichTbVesselYNegExtreme) ) - { + RichTbRadiatorLensBoundaryIncidenceStep(aStep); - // check to see if if we are a boundary. + RichTbPMTIncidenceStep(aStep); - if (pPostStepPoint->GetStepStatus() == fGeomBoundary) - { + // RichTbGenericHisto(aStep); + // RichTbDebugHisto(aStep); - G4Track* aTrack = aStep -> GetTrack(); - const G4DynamicParticle* aParticle = aTrack->GetDynamicParticle(); - const G4double aTrackEnergy = aParticle->GetKineticEnergy(); + RichTbCounter *aRCounter = RichTbCounter::getRichTbCounterInstance(); + // RichTbAnalysisManager* aRAnalysisManager = RichTbAnalysisManager::getInstance(); + // RichTbRunConfig* aRunConfig = RichTbRunConfig::getRunConfigInstance(); - // test for photons which are not already killed. + G4StepPoint *pPreStepPoint = aStep->GetPreStepPoint(); + G4StepPoint *pPostStepPoint = aStep->GetPostStepPoint(); + const G4ThreeVector prePos = pPreStepPoint->GetPosition(); + const G4ThreeVector postPos = pPostStepPoint->GetPosition(); + // now test if the prestep is inside the vessel. - if( (aParticle->GetDefinition() == G4OpticalPhoton::OpticalPhoton()) && - ( aTrackEnergy > 0.0 )) - { + if ((prePos.z() < RichTbVesselDnsZEnd && prePos.z() >= 0.0 * CLHEP::mm) && + (prePos.x() < RichTbVesselXPosExtreme && prePos.x() > RichTbVesselXNegExtreme) && + (prePos.y() < RichTbVesselYPosExtreme && prePos.y() > RichTbVesselYNegExtreme)) { - // G4double curPhotWavLenNano=PhotMomToWaveLength/(aTrackEnergy*CLHEP::nanometer); + // check to see if if we are a boundary. - // check that valid phys vol exist to avoid particles exiting to universe. + if (pPostStepPoint->GetStepStatus() == fGeomBoundary) { - if( pPreStepPoint -> GetPhysicalVolume() && - pPostStepPoint -> GetPhysicalVolume() ) - { + G4Track *aTrack = aStep->GetTrack(); + const G4DynamicParticle *aParticle = aTrack->GetDynamicParticle(); + const G4double aTrackEnergy = aParticle->GetKineticEnergy(); - G4String tpreVol = pPreStepPoint -> GetPhysicalVolume()->GetName(); - G4String tpostVol = pPostStepPoint -> GetPhysicalVolume()->GetName(); + // test for photons which are not already killed. - // G4String tpreVolFirstPart= - // (tpreVol.length() >=7 ) ? tpreVol(0,7) : tpreVol; - // G4String tpostVolFirstPart = - // (tpostVol.length() >= 7) ? tpostVol(0,7):tpostVol; + if ((aParticle->GetDefinition() == G4OpticalPhoton::OpticalPhoton()) && (aTrackEnergy > 0.0)) { + // G4double curPhotWavLenNano=PhotMomToWaveLength/(aTrackEnergy*CLHEP::nanometer); - // G4cout <<"RichTbstep pre post vol "<<tpreVol - // <<" "<<tpostVol<<G4endl; + // check that valid phys vol exist to avoid particles exiting to universe. + if (pPreStepPoint->GetPhysicalVolume() && pPostStepPoint->GetPhysicalVolume()) { + G4String tpreVol = pPreStepPoint->GetPhysicalVolume()->GetName(); + G4String tpostVol = pPostStepPoint->GetPhysicalVolume()->GetName(); + // G4String tpreVolFirstPart= + // (tpreVol.length() >=7 ) ? tpreVol(0,7) : tpreVol; + // G4String tpostVolFirstPart = + // (tpostVol.length() >= 7) ? tpostVol(0,7):tpostVol; - // now for photons entering the mirror - if(tpreVol == VesselPhysName && - tpostVol == MirrorPhysName ) - { - // G4cout<<"StepAction: Entering mirror "<<G4endl; + // G4cout <<"RichTbstep pre post vol "<<tpreVol + // <<" "<<tpostVol<<G4endl; - aRCounter-> bumpnumPhEnterMirror(); - // if( aRAnalysisManager->getfhistoWEnterMirror() ) - // aRAnalysisManager->getfhistoWEnterMirror() - // ->fill(curPhotWavLenNano); + // now for photons entering the mirror + if (tpreVol == VesselPhysName && tpostVol == MirrorPhysName) { + // G4cout<<"StepAction: Entering mirror "<<G4endl; - } - // now for photons exiting the mirror - if(tpreVol == MirrorPhysName && - tpostVol == VesselPhysName ) - { - // G4cout<<"StepAction: Entering mirror "<<G4endl; + aRCounter->bumpnumPhEnterMirror(); + // if( aRAnalysisManager->getfhistoWEnterMirror() ) + // aRAnalysisManager->getfhistoWEnterMirror() + // ->fill(curPhotWavLenNano); + } + // now for photons exiting the mirror + if (tpreVol == MirrorPhysName && tpostVol == VesselPhysName) { + // G4cout<<"StepAction: Entering mirror "<<G4endl; - // if( aRAnalysisManager->getfhistoWExitMirror() ) - // aRAnalysisManager->getfhistoWExitMirror() - // ->fill( curPhotWavLenNano); + // if( aRAnalysisManager->getfhistoWExitMirror() ) + // aRAnalysisManager->getfhistoWExitMirror() + // ->fill( curPhotWavLenNano); + } + // now for photons entering the ph det sup frame. + if (tpreVol == VesselPhysName && tpostVol == GasQuWinPhysName) { - } - // now for photons entering the ph det sup frame. - if(tpreVol == VesselPhysName && - tpostVol == GasQuWinPhysName ) - { + // G4cout<<"StepAction: Entering GasQuWin "<<G4endl; - // G4cout<<"StepAction: Entering GasQuWin "<<G4endl; + aRCounter->bumpnumPhEnterPhSupFrame(); + // if( aRAnalysisManager->getfhistoWEnterPhSupFrame()) + // aRAnalysisManager->getfhistoWEnterPhSupFrame() + // ->fill( curPhotWavLenNano); + } + if (tpreVol == GasQuWinPhysName && tpostVol == PhDetSupName) { + // now exiting Gas qu Win - aRCounter->bumpnumPhEnterPhSupFrame(); - // if( aRAnalysisManager->getfhistoWEnterPhSupFrame()) - // aRAnalysisManager->getfhistoWEnterPhSupFrame() - // ->fill( curPhotWavLenNano); + aRCounter->bumpnumExitGasQuWin(); - } - if(tpreVol == GasQuWinPhysName && - tpostVol == PhDetSupName ) - { - // now exiting Gas qu Win + // if( aRAnalysisManager->getfhistoWExitGasQuWin()) + // aRAnalysisManager->getfhistoWExitGasQuWin() + // ->fill( curPhotWavLenNano); + } - aRCounter->bumpnumExitGasQuWin(); + // now for photons enetering the PMT QW - // if( aRAnalysisManager->getfhistoWExitGasQuWin()) - // aRAnalysisManager->getfhistoWExitGasQuWin() - // ->fill( curPhotWavLenNano); + if (tpreVol == PMTSMasterPhysName && tpostVol == PMTQuartzPhysName) { + // G4cout<<"StepAction: Entering PMT QW "<<G4endl; + aRCounter->bumpnumPhEnterAnPMTQW(); - } - - // now for photons enetering the PMT QW - - if(tpreVol == PMTSMasterPhysName && - tpostVol == PMTQuartzPhysName) - { - // G4cout<<"StepAction: Entering PMT QW "<<G4endl; - - aRCounter->bumpnumPhEnterAnPMTQW(); - - G4TouchableHistory* CurTTB = - (G4TouchableHistory*)(pPreStepPoint->GetTouchable()); - CurTTB -> MoveUpHistory(1); - G4int curPMTNum = CurTTB -> GetVolume() -> GetCopyNo(); - if( curPMTNum == 0 ) - { - // G4cout<<"StepAction: Entering PMT0 QW "<<G4endl; - - // if( aRAnalysisManager->getfhistoWEnterPMT0QW() ) - // aRAnalysisManager->getfhistoWEnterPMT0QW() - // ->fill(curPhotWavLenNano); - aRCounter->bumpnumPhEnterPMT0QW(); - - } - else if( curPMTNum == 1 ) - { - // G4cout<<"StepAction: Entering PMT1 QW "<<G4endl; - - // if( aRAnalysisManager->getfhistoWEnterPMT1QW() ) - // aRAnalysisManager->getfhistoWEnterPMT1QW() - // ->fill(curPhotWavLenNano); - aRCounter->bumpnumPhEnterPMT1QW(); - } - else if( curPMTNum == 2 ) - { - // G4cout<<"StepAction: Entering PMT2 QW "<<G4endl; - - // if( aRAnalysisManager->getfhistoWEnterPMT2QW() ) - // { - // G4cout<<"StepAction: Entering PMT2 QW fil histo " - // << G4endl; - - // aRAnalysisManager->getfhistoWEnterPMT2QW() - // ->fill(curPhotWavLenNano); - // } - - // G4cout<<"StepAction: Entering PMT2 QW bump counter " - // <<G4endl; - - aRCounter->bumpnumPhEnterPMT2QW(); - // G4cout<<"StepAction: Entering PMT2 QW counter bumped up" - // <<G4endl; - } - else if( curPMTNum == 3 ) - { - // G4cout<<"StepAction: Entering PMT3 QW "<<G4endl; - - // if( aRAnalysisManager->getfhistoWEnterPMT3QW() ) - // { - // G4cout<<"StepAction: Entering PMT3 QW fil histo " - // <<G4endl; - - // aRAnalysisManager->getfhistoWEnterPMT3QW() - // ->fill(curPhotWavLenNano); - // } - - // G4cout<<"StepAction: Entering PMT2 QW bump counter " - // <<G4endl; - - aRCounter->bumpnumPhEnterPMT3QW(); - // G4cout<<"StepAction: Entering PMT2 QW counter bumped up" - // <<G4endl; - - - } - else if( curPMTNum == 4 ) - { - // G4cout<<"StepAction: Entering PMT4 QW "<<G4endl; - - // if( aRAnalysisManager->getfhistoWEnterPMT4QW() ) - // { - // G4cout<<"StepAction: Entering PMT4 QW fil histo " - // <<G4endl; - - // aRAnalysisManager->getfhistoWEnterPMT4QW() - // ->fill(curPhotWavLenNano); - // } - - // G4cout<<"StepAction: Entering PMT4 QW bump counter " - // <<G4endl; - - aRCounter->bumpnumPhEnterPMT4QW(); - // G4cout<<"StepAction: Entering PMT4 QW counter bumped up" - // <<G4endl; - } - else if( curPMTNum == 5 ) - { - // G4cout<<"StepAction: Entering PMT5 QW "<<G4endl; - - // if( aRAnalysisManager->getfhistoWEnterPMT5QW() ) - // { - // G4cout<<"StepAction: Entering PMT5 QW fil histo " - // <<G4endl; - - // aRAnalysisManager->getfhistoWEnterPMT5QW() - // ->fill(curPhotWavLenNano); - // } - - // G4cout<<"StepAction: Entering PMT5 QW bump counter " - // <<G4endl; - - aRCounter->bumpnumPhEnterPMT5QW(); - // G4cout<<"StepAction: Entering PMT5 QW counter bumped up" - // <<G4endl; - } - else if( curPMTNum == 6 ) aRCounter->bumpnumPhEnterPMT6QW(); - else if( curPMTNum == 7 ) aRCounter->bumpnumPhEnterPMT7QW(); - else if( curPMTNum == 8 ) aRCounter->bumpnumPhEnterPMT8QW(); - else if( curPMTNum == 9 ) aRCounter->bumpnumPhEnterPMT9QW(); - else if( curPMTNum == 10 ) aRCounter->bumpnumPhEnterPMT10QW(); - else if( curPMTNum == 11 ) aRCounter->bumpnumPhEnterPMT11QW(); - else if( curPMTNum == 12 ) aRCounter->bumpnumPhEnterPMT12QW(); - else if( curPMTNum == 13 ) aRCounter->bumpnumPhEnterPMT13QW(); - else if( curPMTNum == 14 ) aRCounter->bumpnumPhEnterPMT14QW(); - else if( curPMTNum == 15 ) aRCounter->bumpnumPhEnterPMT15QW(); - } - } - } - } - } - // G4cout<<"StepAction: End of Step action "<<G4endl; + G4TouchableHistory *CurTTB = (G4TouchableHistory *)(pPreStepPoint->GetTouchable()); + CurTTB->MoveUpHistory(1); + G4int curPMTNum = CurTTB->GetVolume()->GetCopyNo(); + if (curPMTNum == 0) { + // G4cout<<"StepAction: Entering PMT0 QW "<<G4endl; + + // if( aRAnalysisManager->getfhistoWEnterPMT0QW() ) + // aRAnalysisManager->getfhistoWEnterPMT0QW() + // ->fill(curPhotWavLenNano); + aRCounter->bumpnumPhEnterPMT0QW(); + + } else if (curPMTNum == 1) { + // G4cout<<"StepAction: Entering PMT1 QW "<<G4endl; + + // if( aRAnalysisManager->getfhistoWEnterPMT1QW() ) + // aRAnalysisManager->getfhistoWEnterPMT1QW() + // ->fill(curPhotWavLenNano); + aRCounter->bumpnumPhEnterPMT1QW(); + } else if (curPMTNum == 2) { + // G4cout<<"StepAction: Entering PMT2 QW "<<G4endl; + + // if( aRAnalysisManager->getfhistoWEnterPMT2QW() ) + // { + // G4cout<<"StepAction: Entering PMT2 QW fil histo " + // << G4endl; + + // aRAnalysisManager->getfhistoWEnterPMT2QW() + // ->fill(curPhotWavLenNano); + // } + + // G4cout<<"StepAction: Entering PMT2 QW bump counter " + // <<G4endl; + + aRCounter->bumpnumPhEnterPMT2QW(); + // G4cout<<"StepAction: Entering PMT2 QW counter bumped up" + // <<G4endl; + } else if (curPMTNum == 3) { + // G4cout<<"StepAction: Entering PMT3 QW "<<G4endl; + + // if( aRAnalysisManager->getfhistoWEnterPMT3QW() ) + // { + // G4cout<<"StepAction: Entering PMT3 QW fil histo " + // <<G4endl; + + // aRAnalysisManager->getfhistoWEnterPMT3QW() + // ->fill(curPhotWavLenNano); + // } + + // G4cout<<"StepAction: Entering PMT2 QW bump counter " + // <<G4endl; + + aRCounter->bumpnumPhEnterPMT3QW(); + // G4cout<<"StepAction: Entering PMT2 QW counter bumped up" + // <<G4endl; + + } else if (curPMTNum == 4) { + // G4cout<<"StepAction: Entering PMT4 QW "<<G4endl; + + // if( aRAnalysisManager->getfhistoWEnterPMT4QW() ) + // { + // G4cout<<"StepAction: Entering PMT4 QW fil histo " + // <<G4endl; + + // aRAnalysisManager->getfhistoWEnterPMT4QW() + // ->fill(curPhotWavLenNano); + // } + + // G4cout<<"StepAction: Entering PMT4 QW bump counter " + // <<G4endl; + + aRCounter->bumpnumPhEnterPMT4QW(); + // G4cout<<"StepAction: Entering PMT4 QW counter bumped up" + // <<G4endl; + } else if (curPMTNum == 5) { + // G4cout<<"StepAction: Entering PMT5 QW "<<G4endl; + + // if( aRAnalysisManager->getfhistoWEnterPMT5QW() ) + // { + // G4cout<<"StepAction: Entering PMT5 QW fil histo " + // <<G4endl; + + // aRAnalysisManager->getfhistoWEnterPMT5QW() + // ->fill(curPhotWavLenNano); + // } + + // G4cout<<"StepAction: Entering PMT5 QW bump counter " + // <<G4endl; + + aRCounter->bumpnumPhEnterPMT5QW(); + // G4cout<<"StepAction: Entering PMT5 QW counter bumped up" + // <<G4endl; + } else if (curPMTNum == 6) + aRCounter->bumpnumPhEnterPMT6QW(); + else if (curPMTNum == 7) + aRCounter->bumpnumPhEnterPMT7QW(); + else if (curPMTNum == 8) + aRCounter->bumpnumPhEnterPMT8QW(); + else if (curPMTNum == 9) + aRCounter->bumpnumPhEnterPMT9QW(); + else if (curPMTNum == 10) + aRCounter->bumpnumPhEnterPMT10QW(); + else if (curPMTNum == 11) + aRCounter->bumpnumPhEnterPMT11QW(); + else if (curPMTNum == 12) + aRCounter->bumpnumPhEnterPMT12QW(); + else if (curPMTNum == 13) + aRCounter->bumpnumPhEnterPMT13QW(); + else if (curPMTNum == 14) + aRCounter->bumpnumPhEnterPMT14QW(); + else if (curPMTNum == 15) + aRCounter->bumpnumPhEnterPMT15QW(); + } + } + } + } + } + // G4cout<<"StepAction: End of Step action "<<G4endl; } - - -void RichTbSteppingAction::RichTbDebugHisto(const G4Step * /* aStep */) -{ - -} - - -void RichTbSteppingAction::RichTbGenericHisto(const G4Step * /* aStep */) -{ - - - +void RichTbSteppingAction::RichTbDebugHisto(const G4Step * /* aStep */) {} + +void RichTbSteppingAction::RichTbGenericHisto(const G4Step * /* aStep */) {} +void RichTbSteppingAction::RichTbRadiatorLensBoundaryIncidenceStep(const G4Step *aStep) { + + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); + int aRadiatorConfiguration = aConfig->getRadiatorConfiguration(); + if (/*false*/ aRadiatorConfiguration == 3) { + RichTbRadiatorXNegExtreme_ = RichTbRadiatorXNegExtreme15; + RichTbRadiatorXPosExtreme_ = RichTbRadiatorXPosExtreme15; + RichTbRadiatorYNegExtreme_ = RichTbRadiatorYNegExtreme15; + RichTbRadiatorYPosExtreme_ = RichTbRadiatorYPosExtreme15; + RichTbRadiatorZNegExtreme_ = RichTbRadiatorZNegExtreme15; + RichTbRadiatorZPosExtreme_ = RichTbRadiatorZPosExtreme15; + RichTbRadiatorDnsZLocation_ = RichTbRadiatorDnsZLocation15; + } else { + RichTbRadiatorXNegExtreme_ = RichTbRadiatorXNegExtreme; + RichTbRadiatorXPosExtreme_ = RichTbRadiatorXPosExtreme; + RichTbRadiatorYNegExtreme_ = RichTbRadiatorYNegExtreme; + RichTbRadiatorYPosExtreme_ = RichTbRadiatorYPosExtreme; + RichTbRadiatorZNegExtreme_ = RichTbRadiatorZNegExtreme; + RichTbRadiatorZPosExtreme_ = RichTbRadiatorZPosExtreme; + RichTbRadiatorDnsZLocation_ = RichTbRadiatorDnsZLocation; + } + + G4StepPoint *pPreStepPoint = aStep->GetPreStepPoint(); + G4StepPoint *pPostStepPoint = aStep->GetPostStepPoint(); + const G4ThreeVector prePos = pPreStepPoint->GetPosition(); + const G4ThreeVector postPos = pPostStepPoint->GetPosition(); + RichTbAnalysisManager *myanalysisManager = RichTbAnalysisManager::getInstance(); + + // G4cout<<" Now in radiator boundary step "<< prePos <<" "<<postPos<< G4endl; + if ((prePos.z() < RichTbVesselDnsZEnd) && + (prePos.x() < RichTbVesselXPosExtreme && prePos.x() > RichTbVesselXNegExtreme) && + (prePos.y() < RichTbVesselYPosExtreme && prePos.y() > RichTbVesselYNegExtreme)) { + + if (pPostStepPoint->GetStepStatus() == fGeomBoundary) { + + G4Track *aTrack = aStep->GetTrack(); + + const G4DynamicParticle *aParticle = aTrack->GetDynamicParticle(); + const G4double aTrackEnergy = aParticle->GetKineticEnergy(); + + // G4cout<<" Particle definition direction"<< aParticle->GetDefinition()->GetParticleName() + // << aTrack->GetMomentum() <<G4endl; + + if ((aParticle->GetDefinition() == G4OpticalPhoton::OpticalPhoton()) && (aTrackEnergy > 0.0)) { + + if ((prePos.z() < RichTbRadiatorZPosExtreme_) && (prePos.z() > RichTbRadiatorZNegExtreme_) && + (prePos.x() < RichTbRadiatorXPosExtreme_) && (prePos.x() > RichTbRadiatorXNegExtreme_) && + (prePos.y() < RichTbRadiatorYPosExtreme_) && (prePos.y() > RichTbRadiatorYNegExtreme_)) { + if (pPreStepPoint->GetPhysicalVolume() && pPostStepPoint->GetPhysicalVolume()) { + G4String tpreVol = pPreStepPoint->GetPhysicalVolume()->GetName(); + G4String tpostVol = pPostStepPoint->GetPhysicalVolume()->GetName(); + G4ThreeVector pPostStepMom = pPostStepPoint->GetMomentum(); + G4ThreeVector pPreStepMom = pPreStepPoint->GetMomentum(); + G4int PostStepMomZSign = ((pPostStepMom.z()) > 0.0) ? 1 : -1; + G4int PreStepMomZSign = ((pPreStepMom.z()) > 0.0) ? 1 : -1; + // G4cout<<" Step action pre post vol" <<tpreVol<<" "<<tpostVol<<" "<<prePos<<" " + // <<postPos<<G4endl; + + if ((tpreVol == RadiatorPhysName) && (tpostVol == CrystalMasterPhysName) && + (postPos.z() > (RichTbRadiatorDnsZLocation_ - RichTbRadiatorDnsZLocationTolerence)) && + (postPos.z() < (RichTbRadiatorDnsZLocation_ + RichTbRadiatorDnsZLocationTolerence))) { + + if (myanalysisManager->getfXYRadiatorDnsPhoton()) + myanalysisManager->getfXYRadiatorDnsPhoton()->Fill(postPos.x(), postPos.y()); + + if ((PreStepMomZSign == 1) && (PostStepMomZSign == -1)) { + // G4cout<<" TIR step "<<postPos<<G4endl; + + if (myanalysisManager->getfXYRadiatorTIRDnsPhoton()) + myanalysisManager->getfXYRadiatorTIRDnsPhoton()->Fill(postPos.x(), postPos.y()); + + RichTbRadiatorBoundaryInfoAttach(aTrack, postPos, 0); + } else if ((PreStepMomZSign == 1) && (PostStepMomZSign == 1)) { + // G4cout<<" Refr step "<<postPos<<G4endl; + + if (myanalysisManager->getfXYRadiatorRFRDnsPhoton()) + myanalysisManager->getfXYRadiatorRFRDnsPhoton()->Fill(postPos.x(), postPos.y()); + + RichTbRadiatorBoundaryInfoAttach(aTrack, postPos, 1); + } + + } else if ((tpreVol == RadiatorPhysName) && (tpostVol == MirrorPhysName)) { + if ((PreStepMomZSign == -1) && (PostStepMomZSign == 1)) { + RichTbRadiatorBoundaryInfoAttach(aTrack, postPos, 2); + // G4cout<<" Mirror step "<<postPos<<G4endl; + } + } + } + } + } + } + } } -void RichTbSteppingAction::RichTbRadiatorLensBoundaryIncidenceStep(const G4Step * aStep ) { - - RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - int aRadiatorConfiguration = aConfig ->getRadiatorConfiguration(); - if(/*false*/aRadiatorConfiguration==3) { - RichTbRadiatorXNegExtreme_ = RichTbRadiatorXNegExtreme15; - RichTbRadiatorXPosExtreme_ = RichTbRadiatorXPosExtreme15; - RichTbRadiatorYNegExtreme_ = RichTbRadiatorYNegExtreme15; - RichTbRadiatorYPosExtreme_ = RichTbRadiatorYPosExtreme15; - RichTbRadiatorZNegExtreme_ = RichTbRadiatorZNegExtreme15; - RichTbRadiatorZPosExtreme_ = RichTbRadiatorZPosExtreme15; - RichTbRadiatorDnsZLocation_ = RichTbRadiatorDnsZLocation15; - } else { - RichTbRadiatorXNegExtreme_ = RichTbRadiatorXNegExtreme; - RichTbRadiatorXPosExtreme_ = RichTbRadiatorXPosExtreme; - RichTbRadiatorYNegExtreme_ = RichTbRadiatorYNegExtreme; - RichTbRadiatorYPosExtreme_ = RichTbRadiatorYPosExtreme; - RichTbRadiatorZNegExtreme_ = RichTbRadiatorZNegExtreme; - RichTbRadiatorZPosExtreme_ = RichTbRadiatorZPosExtreme; - RichTbRadiatorDnsZLocation_ = RichTbRadiatorDnsZLocation; - } - - G4StepPoint* pPreStepPoint = aStep ->GetPreStepPoint(); - G4StepPoint* pPostStepPoint = aStep ->GetPostStepPoint(); - const G4ThreeVector prePos= pPreStepPoint->GetPosition(); - const G4ThreeVector postPos= pPostStepPoint->GetPosition(); - RichTbAnalysisManager * myanalysisManager = RichTbAnalysisManager::getInstance(); - - - // G4cout<<" Now in radiator boundary step "<< prePos <<" "<<postPos<< G4endl; - if( (prePos.z()< RichTbVesselDnsZEnd ) && - (prePos.x()< RichTbVesselXPosExtreme && - prePos.x() > RichTbVesselXNegExtreme ) && - (prePos.y() < RichTbVesselYPosExtreme && - prePos.y() > RichTbVesselYNegExtreme) ){ - - if (pPostStepPoint->GetStepStatus() == fGeomBoundary){ - - G4Track* aTrack = aStep -> GetTrack(); - - const G4DynamicParticle* aParticle = aTrack->GetDynamicParticle(); - const G4double aTrackEnergy = aParticle->GetKineticEnergy(); - - // G4cout<<" Particle definition direction"<< aParticle->GetDefinition()->GetParticleName() - // << aTrack->GetMomentum() <<G4endl; - - if( (aParticle->GetDefinition() == G4OpticalPhoton::OpticalPhoton()) && - ( aTrackEnergy > 0.0 )) { - if( (prePos.z() < RichTbRadiatorZPosExtreme_ ) && - (prePos.z() > RichTbRadiatorZNegExtreme_ ) && - (prePos.x() < RichTbRadiatorXPosExtreme_ ) && - (prePos.x() > RichTbRadiatorXNegExtreme_ ) && - (prePos.y() < RichTbRadiatorYPosExtreme_ ) && - (prePos.y() > RichTbRadiatorYNegExtreme_ ) ){ - if( pPreStepPoint -> GetPhysicalVolume() && - pPostStepPoint -> GetPhysicalVolume() ){ - G4String tpreVol = pPreStepPoint->GetPhysicalVolume()->GetName(); - G4String tpostVol = pPostStepPoint->GetPhysicalVolume()->GetName(); - G4ThreeVector pPostStepMom = pPostStepPoint->GetMomentum(); - G4ThreeVector pPreStepMom = pPreStepPoint->GetMomentum(); - G4int PostStepMomZSign= ((pPostStepMom.z()) > 0.0) ? 1 : -1 ; - G4int PreStepMomZSign = ((pPreStepMom.z())> 0.0) ? 1 : -1 ; - // G4cout<<" Step action pre post vol" <<tpreVol<<" "<<tpostVol<<" "<<prePos<<" " - // <<postPos<<G4endl; +void RichTbSteppingAction::RichTbPMTIncidenceStep(const G4Step *aStep) { + G4StepPoint *pPreStepPoint = aStep->GetPreStepPoint(); + G4StepPoint *pPostStepPoint = aStep->GetPostStepPoint(); + const G4ThreeVector prePos = pPreStepPoint->GetPosition(); + const G4ThreeVector postPos = pPostStepPoint->GetPosition(); + // now test if the prestep is inside the vessel. - if(( tpreVol == RadiatorPhysName) && - (tpostVol == CrystalMasterPhysName) && - ( postPos.z() > (RichTbRadiatorDnsZLocation_-RichTbRadiatorDnsZLocationTolerence)) && - ( postPos.z() < (RichTbRadiatorDnsZLocation_+RichTbRadiatorDnsZLocationTolerence)) ){ + if ((prePos.z() < RichTbVesselDnsZEnd && prePos.z() >= 0.0 * CLHEP::mm) && + (prePos.x() < RichTbVesselXPosExtreme && prePos.x() > RichTbVesselXNegExtreme) && + (prePos.y() < RichTbVesselYPosExtreme && prePos.y() > RichTbVesselYNegExtreme)) { - if(myanalysisManager->getfXYRadiatorDnsPhoton()) - myanalysisManager->getfXYRadiatorDnsPhoton()-> Fill(postPos.x(), postPos.y()); + // check to see if if we are a boundary. + if (pPostStepPoint->GetStepStatus() == fGeomBoundary) { - if ( (PreStepMomZSign ==1) && (PostStepMomZSign == -1)) { - // G4cout<<" TIR step "<<postPos<<G4endl; + G4Track *aTrack = aStep->GetTrack(); - if(myanalysisManager->getfXYRadiatorTIRDnsPhoton()) - myanalysisManager->getfXYRadiatorTIRDnsPhoton()-> Fill(postPos.x(), postPos.y()); + const G4DynamicParticle *aParticle = aTrack->GetDynamicParticle(); + const G4double aTrackEnergy = aParticle->GetKineticEnergy(); - RichTbRadiatorBoundaryInfoAttach( aTrack, postPos, 0); - }else if ( (PreStepMomZSign ==1) && (PostStepMomZSign == 1) ){ - // G4cout<<" Refr step "<<postPos<<G4endl; + // test for photons which are not already killed. - if(myanalysisManager->getfXYRadiatorRFRDnsPhoton()) - myanalysisManager->getfXYRadiatorRFRDnsPhoton()-> Fill(postPos.x(), postPos.y()); + if ((aParticle->GetDefinition() == G4OpticalPhoton::OpticalPhoton()) && (aTrackEnergy > 0.0)) { - RichTbRadiatorBoundaryInfoAttach( aTrack, postPos,1); - } - - } else if ( ( tpreVol == RadiatorPhysName ) && - (tpostVol == MirrorPhysName ) ){ - if ( (PreStepMomZSign == -1) && (PostStepMomZSign == 1) ) { - RichTbRadiatorBoundaryInfoAttach( aTrack, postPos,2); - // G4cout<<" Mirror step "<<postPos<<G4endl; - - } - - } - - } - - - - } - - - - } - - } - - } + if (pPreStepPoint->GetPhysicalVolume() && pPostStepPoint->GetPhysicalVolume()) { + G4String tpreVol = pPreStepPoint->GetPhysicalVolume()->GetName(); + G4String tpostVol = pPostStepPoint->GetPhysicalVolume()->GetName(); + // now for the entry at the wuartz window of hpd. + if (tpreVol == PMTSMasterPhysName && tpostVol == PMTQuartzPhysName) { + // G4cout<<" PMT Incidence Pre post pos xyz " + // << prePos.x()<<" "<<prePos.y()<<" "<<prePos.z()<<" " + // <<postPos.x() <<" "<<postPos.y()<<" " + // << postPos.z()<<G4endl; + RichTbPMTQWIncidenceInfoAttach(aTrack, postPos); + } + } + } + } + } } - - -void RichTbSteppingAction::RichTbPMTIncidenceStep(const G4Step * aStep) -{ - G4StepPoint* pPreStepPoint = aStep ->GetPreStepPoint(); - G4StepPoint* pPostStepPoint = aStep ->GetPostStepPoint(); - const G4ThreeVector prePos= pPreStepPoint->GetPosition(); - const G4ThreeVector postPos= pPostStepPoint->GetPosition(); - // now test if the prestep is inside the vessel. - - if( (prePos.z()< RichTbVesselDnsZEnd && prePos.z() >= 0.0*CLHEP::mm) && - (prePos.x()< RichTbVesselXPosExtreme && - prePos.x() > RichTbVesselXNegExtreme ) && - (prePos.y() < RichTbVesselYPosExtreme && - prePos.y() > RichTbVesselYNegExtreme) ) - { - - // check to see if if we are a boundary. - - if (pPostStepPoint->GetStepStatus() == fGeomBoundary) - { - - G4Track* aTrack = aStep -> GetTrack(); - - const G4DynamicParticle* aParticle = aTrack->GetDynamicParticle(); - const G4double aTrackEnergy = aParticle->GetKineticEnergy(); - - // test for photons which are not already killed. - - if( (aParticle->GetDefinition() == G4OpticalPhoton::OpticalPhoton()) && - ( aTrackEnergy > 0.0 )) - { - - if( pPreStepPoint -> GetPhysicalVolume() && - pPostStepPoint -> GetPhysicalVolume() ) - { - G4String tpreVol = pPreStepPoint->GetPhysicalVolume()->GetName(); - G4String tpostVol = pPostStepPoint->GetPhysicalVolume()->GetName(); - // now for the entry at the wuartz window of hpd. - - if(tpreVol == PMTSMasterPhysName && - tpostVol == PMTQuartzPhysName) - { - // G4cout<<" PMT Incidence Pre post pos xyz " - // << prePos.x()<<" "<<prePos.y()<<" "<<prePos.z()<<" " - // <<postPos.x() <<" "<<postPos.y()<<" " - // << postPos.z()<<G4endl; - - RichTbPMTQWIncidenceInfoAttach( aTrack, postPos ); - } - } - } - } - } -} - - - - - - diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbSteppingActionBase.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbSteppingActionBase.cc index 63198f21ab4ea9a055e478dceb38821d5cb63ad7..cc57ddb692f94490286a011e50cfdc5c3883edbf 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbSteppingActionBase.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbSteppingActionBase.cc @@ -1,54 +1,40 @@ -// Include files - - +// Include files // local - //----------------------------------------------------------------------------- // Implementation file for class : RichTbSteppingActionBase // // 2015-03-06 : Sajan Easo //----------------------------------------------------------------------------- -#include "Geant4/globals.hh" #include "RichTbSteppingActionBase.hh" #include "Geant4/G4SteppingManager.hh" +#include "Geant4/globals.hh" //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbSteppingActionBase::RichTbSteppingActionBase( ) { - - InitRichTbStepActions(); - - - -} +RichTbSteppingActionBase::RichTbSteppingActionBase() { InitRichTbStepActions(); } //============================================================================= // Destructor //============================================================================= RichTbSteppingActionBase::~RichTbSteppingActionBase() { - if(mRichTbSteppingAction) delete mRichTbSteppingAction; - if(mRichTbPmtSteppingAction) delete mRichTbPmtSteppingAction; - -} + if (mRichTbSteppingAction) + delete mRichTbSteppingAction; + if (mRichTbPmtSteppingAction) + delete mRichTbPmtSteppingAction; +} //============================================================================= -void RichTbSteppingActionBase::UserSteppingAction(const G4Step * aStep){ +void RichTbSteppingActionBase::UserSteppingAction(const G4Step *aStep) { mRichTbSteppingAction->UserSteppingAction(aStep); mRichTbPmtSteppingAction->UserSteppingAction(aStep); - - - } -void RichTbSteppingActionBase::InitRichTbStepActions(){ +void RichTbSteppingActionBase::InitRichTbStepActions() { - mRichTbSteppingAction=new RichTbSteppingAction(); + mRichTbSteppingAction = new RichTbSteppingAction(); mRichTbPmtSteppingAction = new RichTbPmtSteppingAction(); - - - } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbTrackingAction.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbTrackingAction.cc index 9b3d57d7cb3314907bcd1b807d8708f8e5f49fad..c8e92ba095287e2fbf1adb81eec3a04dfc21b5f9 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbTrackingAction.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbTrackingAction.cc @@ -1,90 +1,66 @@ #include "RichTbTrackingAction.hh" #include "Geant4/G4DynamicParticle.hh" +#include "Geant4/G4OpticalPhoton.hh" #include "Geant4/G4ParticleDefinition.hh" #include "Geant4/G4ThreeVector.hh" -#include "Geant4/G4OpticalPhoton.hh" #include "Geant4/globals.hh" -#include "RichTbUserTrackInfo.hh" -#include "RichTbPhotoElectron.hh" -#include "RichTbBeamProperty.hh" #include "RichTbAnalysisManager.hh" +#include "RichTbBeamProperty.hh" +#include "RichTbPhotoElectron.hh" #include "RichTbRunConfig.hh" +#include "RichTbUserTrackInfo.hh" + +RichTbTrackingAction::RichTbTrackingAction() { ; } +RichTbTrackingAction::~RichTbTrackingAction() { ; } +void RichTbTrackingAction::PreUserTrackingAction(const G4Track * /* aTrack */) { ; } +void RichTbTrackingAction::PostUserTrackingAction(const G4Track *aTrack) { + if (aTrack != 0) { + + const G4DynamicParticle *aParticle = aTrack->GetDynamicParticle(); + if (aParticle->GetDefinition() == G4OpticalPhoton::OpticalPhoton()) { + + // delete the photon user info at the end of + // tracking the photon. This is so that it does not + // accumulate over the events and fill up the memory. + // This removes dangling reference to the trackuserinformation class. + // no deletion for now. SE 20-1-2004. + + // G4double cPhotTrueCkv = 0.0; -RichTbTrackingAction::RichTbTrackingAction() -{;} -RichTbTrackingAction::~RichTbTrackingAction() -{ ;} -void RichTbTrackingAction::PreUserTrackingAction(const G4Track * /* aTrack */) -{;} -void RichTbTrackingAction:: PostUserTrackingAction(const G4Track * aTrack) -{ - if( aTrack != 0 ) { - - const G4DynamicParticle * aParticle = aTrack->GetDynamicParticle(); - if( aParticle->GetDefinition() == G4OpticalPhoton::OpticalPhoton() ){ + G4VUserTrackInformation *aTkInfo = aTrack->GetUserInformation(); - // delete the photon user info at the end of - // tracking the photon. This is so that it does not - // accumulate over the events and fill up the memory. - // This removes dangling reference to the trackuserinformation class. - // no deletion for now. SE 20-1-2004. + if (aTkInfo) { + RichTbUserTrackInfo *curPhotTrackUserInfo = (RichTbUserTrackInfo *)aTkInfo; - // G4double cPhotTrueCkv = 0.0; - - G4VUserTrackInformation* aTkInfo = aTrack->GetUserInformation(); - - if( aTkInfo) { - RichTbUserTrackInfo* curPhotTrackUserInfo = - (RichTbUserTrackInfo*) aTkInfo; + if (curPhotTrackUserInfo && curPhotTrackUserInfo->HasUserPhotonInfo()) { + RichTbPhotonInfo *aRichTbPhotonInfo = curPhotTrackUserInfo->getRichTbPhotonInfo(); + if (aRichTbPhotonInfo) { - if(curPhotTrackUserInfo && curPhotTrackUserInfo->HasUserPhotonInfo() ){ - RichTbPhotonInfo* aRichTbPhotonInfo = - curPhotTrackUserInfo->getRichTbPhotonInfo(); - if( aRichTbPhotonInfo ) { + // cPhotTrueCkv=aRichTbPhotonInfo->CkvCosThetaAtProd(); - // cPhotTrueCkv=aRichTbPhotonInfo->CkvCosThetaAtProd(); - - // delete aRichTbPhotonInfo; - - } - + // delete aRichTbPhotonInfo; + } + } + } - } - - } - - - } else if (aParticle->GetDefinition() == - RichTbPhotoElectron::PhotoElectron()) { - // delete the photoelectron user info at the end of tracking the - // photoelectron. This is so that they do not accumulate - // over the events and fill up the memory. - // This removes dangling reference to the trackuserinformation class. - // no deletion for now. SE 20-1-2004. - G4VUserTrackInformation* aTkInfoP = aTrack->GetUserInformation(); - if( aTkInfoP) { + } else if (aParticle->GetDefinition() == RichTbPhotoElectron::PhotoElectron()) { + // delete the photoelectron user info at the end of tracking the + // photoelectron. This is so that they do not accumulate + // over the events and fill up the memory. + // This removes dangling reference to the trackuserinformation class. + // no deletion for now. SE 20-1-2004. + G4VUserTrackInformation *aTkInfoP = aTrack->GetUserInformation(); + if (aTkInfoP) { - RichTbUserTrackInfo* curPeTrackUserInfo = - (RichTbUserTrackInfo*) aTkInfoP; - - if( curPeTrackUserInfo && curPeTrackUserInfo-> HasUserPEInfo()) { - RichTbPEInfo* aRichTbPEInfo = - curPeTrackUserInfo->getRichTbPEInfo(); - if(aRichTbPEInfo ) { - // delete aRichTbPEInfo; - - } - + RichTbUserTrackInfo *curPeTrackUserInfo = (RichTbUserTrackInfo *)aTkInfoP; - } - - - } - - } - - + if (curPeTrackUserInfo && curPeTrackUserInfo->HasUserPEInfo()) { + RichTbPEInfo *aRichTbPEInfo = curPeTrackUserInfo->getRichTbPEInfo(); + if (aRichTbPEInfo) { + // delete aRichTbPEInfo; + } + } + } + } } - - } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbUserTrackInfo.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbUserTrackInfo.cc index 5c21508f4127b70e36131f4a4e379f9b0731821c..3904fcd077a38acac9aeaa5e7640edd9637b05d3 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbUserTrackInfo.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcev/RichTbUserTrackInfo.cc @@ -1,7 +1,5 @@ // $Id: $ -// Include files - - +// Include files // local #include "RichTbUserTrackInfo.hh" @@ -15,23 +13,18 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbUserTrackInfo::RichTbUserTrackInfo( ): mRichTbPhotonInfo(0), - mRichTbPEInfo(0),mHasUserPhotonInfo(false),mHasUserPEInfo(false) { - +RichTbUserTrackInfo::RichTbUserTrackInfo() + : mRichTbPhotonInfo(0), mRichTbPEInfo(0), mHasUserPhotonInfo(false), mHasUserPEInfo(false) {} +RichTbUserTrackInfo::RichTbUserTrackInfo(RichTbPhotonInfo *aRichTbPhotonInfo) + : mRichTbPEInfo(0), mHasUserPEInfo(false) { + mRichTbPhotonInfo = aRichTbPhotonInfo; + mHasUserPhotonInfo = true; } -RichTbUserTrackInfo::RichTbUserTrackInfo(RichTbPhotonInfo* aRichTbPhotonInfo): - mRichTbPEInfo(0),mHasUserPEInfo(false){ - mRichTbPhotonInfo= aRichTbPhotonInfo; - mHasUserPhotonInfo=true; - +RichTbUserTrackInfo::RichTbUserTrackInfo(RichTbPEInfo *aRichTbPEInfo) + : mRichTbPhotonInfo(0), mHasUserPhotonInfo(false) { + mRichTbPEInfo = aRichTbPEInfo; + mHasUserPEInfo = true; } -RichTbUserTrackInfo::RichTbUserTrackInfo(RichTbPEInfo* aRichTbPEInfo): -mRichTbPhotonInfo(0), mHasUserPhotonInfo(false){ - mRichTbPEInfo=aRichTbPEInfo; - mHasUserPEInfo=true; - -} - //============================================================================= // Destructor diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgr/RichTbGraphics.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgr/RichTbGraphics.cc index 836154663850fc8c30926fd90a9a00212e02b5af..e438b663e5c774a2d17da1880d9e9fa87473691c 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgr/RichTbGraphics.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgr/RichTbGraphics.cc @@ -1,1955 +1,1748 @@ -#include <iostream> -#include "RichTbGeometryParameters.hh" -#include "RichTbMaterial.hh" #include "RichTbGraphics.hh" +#include "Geant4/G4Colour.hh" #include "Geant4/G4LogicalVolume.hh" #include "Geant4/G4VisAttributes.hh" -#include "Geant4/G4Colour.hh" -#include "RichTbRunConfig.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbMaterial.hh" #include "RichTbPMT.hh" -RichTbGraphics::RichTbGraphics() -{ - ; -} - +#include "RichTbRunConfig.hh" +#include <iostream> +RichTbGraphics::RichTbGraphics() { ; } -RichTbGraphics::RichTbGraphics(RichTbDetectorConstruction* aDetector ) +RichTbGraphics::RichTbGraphics(RichTbDetectorConstruction *aDetector) { + curDetector = aDetector; - - curDetector = aDetector; - - setAllGraphicsAttributes(); - + setAllGraphicsAttributes(); } -RichTbGraphics::~RichTbGraphics() -{ - ; -} - -void RichTbGraphics::setAllGraphicsAttributes() -{ - - //now for the RichTbHall. +RichTbGraphics::~RichTbGraphics() { ; } - setRichTbHallGraphicsAttibutes(); +void RichTbGraphics::setAllGraphicsAttributes() { + // now for the RichTbHall. + setRichTbHallGraphicsAttibutes(); } -void RichTbGraphics::setRichTbHallGraphicsAttibutes() -{ - - // For Following variables on visibility - // 0 means make the volume invisible; - // 1 means make it visible as a solid. - // 2 means make it visible as a wireframe. - - RichTbRunConfig* aRunConfig= RichTbRunConfig::getRunConfigInstance(); - G4int aRadiatorConfiguration = aRunConfig ->getRadiatorConfiguration(); - - - G4int RichTbHall_vis = aRunConfig->getRichTbHall_visib(); - - if( (curDetector != 0) && (curDetector->getRichTbHall() != 0) ) { - - G4LogicalVolume *RichTbHall_LV =curDetector->getRichTbHall() - ->getRichTbHallLogicalVolume(); +void RichTbGraphics::setRichTbHallGraphicsAttibutes() { - if( RichTbHall_LV != 0 ) { + // For Following variables on visibility + // 0 means make the volume invisible; + // 1 means make it visible as a solid. + // 2 means make it visible as a wireframe. - if (RichTbHall_vis == 0) { - RichTbHall_LV->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes *RichTbHall_LogVisAtt = - new G4VisAttributes(G4Colour(0., 1., 1.)); - if (RichTbHall_vis == 2) { - RichTbHall_LogVisAtt->SetForceSolid(false); - RichTbHall_LogVisAtt->SetForceWireframe(true); - } - if (RichTbHall_vis == 1) { - RichTbHall_LogVisAtt->SetForceSolid(true); - } - RichTbHall_LogVisAtt->SetVisibility(true); - RichTbHall_LV->SetVisAttributes(RichTbHall_LogVisAtt); - // - } - } - - } - - // now for the vessel - - G4int RichTbUpgradeVessel_vis = aRunConfig->getRichTbUpgradeVessel_visib(); - // G4cout<<"vessel visib flag "<<RichTbUpgradeVessel_vis<<G4endl; - - if( (curDetector != 0) && (curDetector-> getRichTbUpgradeVessel() != 0)) - { - // G4cout<<"now setting vessel visb options "<<RichTbUpgradeVessel_vis<<G4endl; - - G4LogicalVolume * RichTbUpgradeVessel_LV =curDetector-> - getRichTbUpgradeVessel()-> getRichTbGasVesselLVol(); - if(RichTbUpgradeVessel_LV != 0 ) { - if(RichTbUpgradeVessel_vis == 0 ) { - RichTbUpgradeVessel_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbUpgradeVessel_LogVisAtt = - new G4VisAttributes(G4Colour(0.5,0.5,0.0)); - if(RichTbUpgradeVessel_vis == 2 ) { - RichTbUpgradeVessel_LogVisAtt ->SetForceSolid(false); - RichTbUpgradeVessel_LogVisAtt ->SetForceWireframe(true); - } - if(RichTbUpgradeVessel_vis == 1 ) { - RichTbUpgradeVessel_LogVisAtt ->SetForceSolid(true); - } - RichTbUpgradeVessel_LogVisAtt->SetVisibility(true); - RichTbUpgradeVessel_LV -> SetVisAttributes(RichTbUpgradeVessel_LogVisAtt); - - } - - } - - } - - //G4int aRadiatorConfiguration = - // aRunConfig ->getRadiatorConfiguration(); - - if(aRadiatorConfiguration == 0){ - - - // now for the crystal - - G4int RichTbCrystal_vis = aRunConfig->getRichTbCrystal_visib(); - G4cout<<"Crystal visib flag "<<RichTbCrystal_vis<<G4endl; - - if( (curDetector != 0) && (curDetector-> getRichTbCrystal() != 0)) - { - G4cout<<"now setting crystal visib options "<<RichTbCrystal_vis<<G4endl; - - G4LogicalVolume * RichTbCrystal_LV =curDetector-> - getRichTbCrystal()-> getRichTbCrystalLVol(); - if(RichTbCrystal_LV != 0 ) { - if(RichTbCrystal_vis == 0 ) { - RichTbCrystal_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbCrystal_LogVisAtt = - new G4VisAttributes(G4Colour(1.,0.0,0.0)); - if(RichTbCrystal_vis == 2 ) { - RichTbCrystal_LogVisAtt ->SetForceSolid(false); - RichTbCrystal_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test crystal vis "<<RichTbCrystal_vis<<G4endl; - } - if(RichTbCrystal_vis == 1 ) { - RichTbCrystal_LogVisAtt ->SetForceSolid(true); - } - RichTbCrystal_LogVisAtt->SetVisibility(true); - RichTbCrystal_LV -> SetVisAttributes(RichTbCrystal_LogVisAtt); - - } - - } - - } - - // now for the crystal cover - - G4int RichTbCrystalCover_vis = aRunConfig->getRichTbCrystalCover_visib(); - G4cout<<"Crystal cover visib flag "<<RichTbCrystalCover_vis<<G4endl; - - if( (curDetector != 0) && (curDetector-> getRichTbCrystalCover() != 0)) - { - G4cout<<"now setting crystal visb options "<<RichTbCrystalCover_vis<<G4endl; - - G4LogicalVolume * RichTbCrystalCover_LV =curDetector-> - getRichTbCrystalCover()-> getRichTbCrystalCoverLVol(); - if(RichTbCrystalCover_LV != 0 ) { - if(RichTbCrystalCover_vis == 0 ) { - RichTbCrystalCover_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbCrystalCover_LogVisAtt = - new G4VisAttributes(G4Colour(0.0,0.0,1.0)); - if(RichTbCrystalCover_vis == 2 ) { - RichTbCrystalCover_LogVisAtt ->SetForceSolid(false); - RichTbCrystalCover_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test crystal cover vis "<<RichTbCrystalCover_vis<<G4endl; - } - if(RichTbCrystalCover_vis == 1 ) { - RichTbCrystalCover_LogVisAtt ->SetForceSolid(true); - } - RichTbCrystalCover_LogVisAtt->SetVisibility(true); - RichTbCrystalCover_LV -> SetVisAttributes(RichTbCrystalCover_LogVisAtt); - - } - - } - - } - - // now for the lens - - G4int RichTbLens_vis = aRunConfig->getRichTbLens_visib(); - G4cout<<"Lens visib flag "<<RichTbLens_vis<<G4endl; - - if( (curDetector != 0) && (curDetector-> getRichTbLens() != 0)) - { - G4cout<<"now setting lens visb options "<<RichTbLens_vis<<G4endl; - - G4LogicalVolume * RichTbLens_LV =curDetector-> - getRichTbLens()-> getRichTbLensLVol(); - if(RichTbLens_LV != 0 ) { - if(RichTbLens_vis == 0 ) { - RichTbLens_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbLens_LogVisAtt = - new G4VisAttributes(G4Colour(1.,0.0,0.0)); - if(RichTbLens_vis == 2 ) { - RichTbLens_LogVisAtt ->SetForceSolid(false); - RichTbLens_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test lens vis "<<RichTbLens_vis<<G4endl; - } - if(RichTbLens_vis == 1 ) { - RichTbLens_LogVisAtt ->SetForceSolid(true); - } - RichTbLens_LogVisAtt->SetVisibility(true); - RichTbLens_LV -> SetVisAttributes(RichTbLens_LogVisAtt); - - } - - } - - } - - } - else{ - - // now for the radiator - - G4int RichTbUpgradeRadiator_vis = aRunConfig->getRichTbUpgradeRadiator_visib(); - G4cout<<"Radiator visib flag "<<RichTbUpgradeRadiator_vis<<G4endl; - - if( (curDetector != 0) && (curDetector-> getRichTbUpgradeRadiator() != 0)) - { - G4cout<<"now setting radiator visb options "<<RichTbUpgradeRadiator_vis<<G4endl; - - G4LogicalVolume * RichTbUpgradeRadiator_LV =curDetector-> - getRichTbUpgradeRadiator()-> getRichTbUpgradeRadiatorLVol(); - if(RichTbUpgradeRadiator_LV != 0 ) { - if(RichTbUpgradeRadiator_vis == 0 ) { - RichTbUpgradeRadiator_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbUpgradeRadiator_LogVisAtt = - new G4VisAttributes(G4Colour(0.7,0.1,0.4)); - if(RichTbUpgradeRadiator_vis == 2 ) { - RichTbUpgradeRadiator_LogVisAtt ->SetForceSolid(false); - RichTbUpgradeRadiator_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test radiator vis "<<RichTbUpgradeRadiator_vis<<G4endl; - } - if(RichTbUpgradeRadiator_vis == 1 ) { - RichTbUpgradeRadiator_LogVisAtt ->SetForceSolid(true); - } - RichTbUpgradeRadiator_LogVisAtt->SetVisibility(true); - RichTbUpgradeRadiator_LV -> SetVisAttributes(RichTbUpgradeRadiator_LogVisAtt); - - } - - } - - } - - // now for the dark cover - - G4int RichTbUpgradeDarkCover_vis = aRunConfig->getRichTbUpgradeDarkCover_visib(); - G4cout<<"Dark cover visib flag "<<RichTbUpgradeDarkCover_vis<<G4endl; - - if( (curDetector != 0) && (curDetector-> getRichTbUpgradeDarkCover() != 0)) - { - G4cout<<"now setting dark cover visib options "<<RichTbUpgradeDarkCover_vis<<G4endl; - - G4LogicalVolume * RichTbUpgradeDarkCover_LV =curDetector-> - getRichTbUpgradeDarkCover()-> getRichTbUpgradeDarkCoverLVol(); - if(RichTbUpgradeDarkCover_LV != 0 ) { - if(RichTbUpgradeDarkCover_vis == 0 ) { - RichTbUpgradeDarkCover_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbUpgradeDarkCover_LogVisAtt = - new G4VisAttributes(G4Colour(0.0,0.1,0.05)); - if(RichTbUpgradeDarkCover_vis == 2 ) { - RichTbUpgradeDarkCover_LogVisAtt ->SetForceSolid(false); - RichTbUpgradeDarkCover_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test dark cover vis "<<RichTbUpgradeDarkCover_vis<<G4endl; - } - if(RichTbUpgradeDarkCover_vis == 1 ) { - RichTbUpgradeDarkCover_LogVisAtt ->SetForceSolid(true); - } - RichTbUpgradeDarkCover_LogVisAtt->SetVisibility(true); - RichTbUpgradeDarkCover_LV -> SetVisAttributes(RichTbUpgradeDarkCover_LogVisAtt); - - } - - } - - } - - - G4int RichTbUpgradeUpsDarkCover_vis = aRunConfig->getRichTbUpgradeUpsDarkCover_visib(); - G4cout<<"Ups Dark cover visib flag "<<RichTbUpgradeUpsDarkCover_vis<<G4endl; - - if( (curDetector != 0) && (curDetector-> getRichTbUpgradeDarkCover() != 0)) - { - G4cout<<"now setting ups dark cover visib options "<<RichTbUpgradeUpsDarkCover_vis<<G4endl; - - G4LogicalVolume * RichTbUpgradeUpsDarkCover_LV =curDetector-> - getRichTbUpgradeDarkCover()-> getRichTbUpgradeUpsDarkCoverLVol() ; - if(RichTbUpgradeUpsDarkCover_LV != 0 ) { - if(RichTbUpgradeUpsDarkCover_vis == 0 ) { - RichTbUpgradeUpsDarkCover_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbUpgradeUpsDarkCover_LogVisAtt = - new G4VisAttributes(G4Colour(0.0,0.1,0.05)); - if(RichTbUpgradeUpsDarkCover_vis == 2 ) { - RichTbUpgradeUpsDarkCover_LogVisAtt ->SetForceSolid(false); - RichTbUpgradeUpsDarkCover_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test dark cover vis "<<RichTbUpgradeUpsDarkCover_vis<<G4endl; - } - if(RichTbUpgradeUpsDarkCover_vis == 1 ) { - RichTbUpgradeUpsDarkCover_LogVisAtt ->SetForceSolid(true); - } - RichTbUpgradeUpsDarkCover_LogVisAtt->SetVisibility(true); - RichTbUpgradeUpsDarkCover_LV -> SetVisAttributes(RichTbUpgradeUpsDarkCover_LogVisAtt); - - } - - } - - } - - - G4int RichTbUpgradeSideDarkCover_vis = aRunConfig->getRichTbUpgradeSideDarkCover_visib(); - G4cout<<"Ups Dark cover visib flag "<<RichTbUpgradeSideDarkCover_vis<<G4endl; - - if( (curDetector != 0) && (curDetector-> getRichTbUpgradeDarkCover() != 0)) - { - G4cout<<"now setting ups dark cover visib options "<<RichTbUpgradeSideDarkCover_vis<<G4endl; - - G4LogicalVolume * RichTbUpgradeSideDarkCover_LV =curDetector-> - getRichTbUpgradeDarkCover()-> getRichTbUpgradeSideDarkCoverLVol() ; - if(RichTbUpgradeSideDarkCover_LV != 0 ) { - if(RichTbUpgradeSideDarkCover_vis == 0 ) { - RichTbUpgradeSideDarkCover_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbUpgradeSideDarkCover_LogVisAtt = - new G4VisAttributes(G4Colour(0.4,0.4,0.05)); - if(RichTbUpgradeSideDarkCover_vis == 2 ) { - RichTbUpgradeSideDarkCover_LogVisAtt ->SetForceSolid(false); - RichTbUpgradeSideDarkCover_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test dark cover vis "<<RichTbUpgradeSideDarkCover_vis<<G4endl; - } - if(RichTbUpgradeSideDarkCover_vis == 1 ) { - RichTbUpgradeSideDarkCover_LogVisAtt ->SetForceSolid(true); - } - RichTbUpgradeSideDarkCover_LogVisAtt->SetVisibility(true); - RichTbUpgradeSideDarkCover_LV -> SetVisAttributes(RichTbUpgradeSideDarkCover_LogVisAtt); + RichTbRunConfig *aRunConfig = RichTbRunConfig::getRunConfigInstance(); + G4int aRadiatorConfiguration = aRunConfig->getRadiatorConfiguration(); - } + G4int RichTbHall_vis = aRunConfig->getRichTbHall_visib(); - } + if ((curDetector != 0) && (curDetector->getRichTbHall() != 0)) { - } + G4LogicalVolume *RichTbHall_LV = curDetector->getRichTbHall()->getRichTbHallLogicalVolume(); - G4int RichTbUpgradeDnsDarkCover_vis = aRunConfig->getRichTbUpgradeDnsDarkCover_visib(); - G4cout<<"Dns Dark cover visib flag "<<RichTbUpgradeDnsDarkCover_vis<<G4endl; + if (RichTbHall_LV != 0) { - if( (curDetector != 0) && (curDetector-> getRichTbEC() != 0)) - { - G4cout<<"now setting dns dark cover visib options "<<RichTbUpgradeDnsDarkCover_vis<<G4endl; + if (RichTbHall_vis == 0) { + RichTbHall_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes *RichTbHall_LogVisAtt = new G4VisAttributes(G4Colour(0., 1., 1.)); + if (RichTbHall_vis == 2) { + RichTbHall_LogVisAtt->SetForceSolid(false); + RichTbHall_LogVisAtt->SetForceWireframe(true); + } + if (RichTbHall_vis == 1) { + RichTbHall_LogVisAtt->SetForceSolid(true); + } + RichTbHall_LogVisAtt->SetVisibility(true); + RichTbHall_LV->SetVisAttributes(RichTbHall_LogVisAtt); + // + } + } + } - G4LogicalVolume * RichTbUpgradeDnsDarkCover_LV =curDetector-> - getRichTbEC()->getRichTbECSupLVol () ; - if(RichTbUpgradeDnsDarkCover_LV != 0 ) { - if(RichTbUpgradeDnsDarkCover_vis == 0 ) { - RichTbUpgradeDnsDarkCover_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbUpgradeDnsDarkCover_LogVisAtt = - new G4VisAttributes(G4Colour(0.5,0.6,0.05)); - if(RichTbUpgradeDnsDarkCover_vis == 2 ) { - RichTbUpgradeDnsDarkCover_LogVisAtt ->SetForceSolid(false); - RichTbUpgradeDnsDarkCover_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test dark cover vis "<<RichTbUpgradeDnsDarkCover_vis<<G4endl; - } - if(RichTbUpgradeDnsDarkCover_vis == 1 ) { - RichTbUpgradeDnsDarkCover_LogVisAtt ->SetForceSolid(true); - } - RichTbUpgradeDnsDarkCover_LogVisAtt->SetVisibility(true); - RichTbUpgradeDnsDarkCover_LV -> SetVisAttributes(RichTbUpgradeDnsDarkCover_LogVisAtt); + // now for the vessel - } + G4int RichTbUpgradeVessel_vis = aRunConfig->getRichTbUpgradeVessel_visib(); + // G4cout<<"vessel visib flag "<<RichTbUpgradeVessel_vis<<G4endl; - } + if ((curDetector != 0) && (curDetector->getRichTbUpgradeVessel() != 0)) { + // G4cout<<"now setting vessel visb options "<<RichTbUpgradeVessel_vis<<G4endl; - } + G4LogicalVolume *RichTbUpgradeVessel_LV = curDetector->getRichTbUpgradeVessel()->getRichTbGasVesselLVol(); + if (RichTbUpgradeVessel_LV != 0) { + if (RichTbUpgradeVessel_vis == 0) { + RichTbUpgradeVessel_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes *RichTbUpgradeVessel_LogVisAtt = new G4VisAttributes(G4Colour(0.5, 0.5, 0.0)); + if (RichTbUpgradeVessel_vis == 2) { + RichTbUpgradeVessel_LogVisAtt->SetForceSolid(false); + RichTbUpgradeVessel_LogVisAtt->SetForceWireframe(true); + } + if (RichTbUpgradeVessel_vis == 1) { + RichTbUpgradeVessel_LogVisAtt->SetForceSolid(true); + } + RichTbUpgradeVessel_LogVisAtt->SetVisibility(true); + RichTbUpgradeVessel_LV->SetVisAttributes(RichTbUpgradeVessel_LogVisAtt); + } + } + } + // G4int aRadiatorConfiguration = + // aRunConfig ->getRadiatorConfiguration(); + if (aRadiatorConfiguration == 0) { + // now for the crystal - // now for the mirror + G4int RichTbCrystal_vis = aRunConfig->getRichTbCrystal_visib(); + G4cout << "Crystal visib flag " << RichTbCrystal_vis << G4endl; - G4int RichTbUpgradeMirror_vis = aRunConfig->getRichTbUpgradeMirror_visib(); - if( (curDetector != 0) && (curDetector-> getRichTbUpgradeMirror() != 0)){ - G4cout<<"now setting mirror visb options "<<RichTbUpgradeMirror_vis<<G4endl; - G4LogicalVolume * RichTbUpgradeMirror_LV = curDetector-> - getRichTbUpgradeMirror()->getRichTbUpgradeMirrorLVol(); + if ((curDetector != 0) && (curDetector->getRichTbCrystal() != 0)) { + G4cout << "now setting crystal visib options " << RichTbCrystal_vis << G4endl; - if( RichTbUpgradeMirror_LV != 0 ) { - // G4cout<<" mirror log vol "<<RichTbUpgradeMirror_LV<<G4endl; + G4LogicalVolume *RichTbCrystal_LV = curDetector->getRichTbCrystal()->getRichTbCrystalLVol(); + if (RichTbCrystal_LV != 0) { + if (RichTbCrystal_vis == 0) { + RichTbCrystal_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes *RichTbCrystal_LogVisAtt = new G4VisAttributes(G4Colour(1., 0.0, 0.0)); + if (RichTbCrystal_vis == 2) { + RichTbCrystal_LogVisAtt->SetForceSolid(false); + RichTbCrystal_LogVisAtt->SetForceWireframe(true); + G4cout << "test crystal vis " << RichTbCrystal_vis << G4endl; + } + if (RichTbCrystal_vis == 1) { + RichTbCrystal_LogVisAtt->SetForceSolid(true); + } + RichTbCrystal_LogVisAtt->SetVisibility(true); + RichTbCrystal_LV->SetVisAttributes(RichTbCrystal_LogVisAtt); + } + } + } - if(RichTbUpgradeMirror_vis == 0) { - RichTbUpgradeMirror_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { + // now for the crystal cover - G4VisAttributes * RichTbUpgradeMirror_LogVisAtt = - new G4VisAttributes(G4Colour(0.1,0.8,0.8)); + G4int RichTbCrystalCover_vis = aRunConfig->getRichTbCrystalCover_visib(); + G4cout << "Crystal cover visib flag " << RichTbCrystalCover_vis << G4endl; - if( RichTbUpgradeMirror_vis == 2 ) { - RichTbUpgradeMirror_LogVisAtt ->SetForceSolid(false); - RichTbUpgradeMirror_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test mirror vis "<<RichTbUpgradeMirror_vis<<G4endl; - } - if( RichTbUpgradeMirror_vis == 1 ) { - RichTbUpgradeMirror_LogVisAtt ->SetForceSolid(true); - } + if ((curDetector != 0) && (curDetector->getRichTbCrystalCover() != 0)) { + G4cout << "now setting crystal visb options " << RichTbCrystalCover_vis << G4endl; - RichTbUpgradeMirror_LogVisAtt ->SetVisibility(true); - RichTbUpgradeMirror_LV -> SetVisAttributes( RichTbUpgradeMirror_LogVisAtt); - } - - } - - - } - - } - - - // now for the crystal master - - G4int RichTbCrystal_vis = aRunConfig->getRichTbCrystal_visib(); - // G4cout<<"Crystal visib flag "<<RichTbCrystal_vis<<G4endl; - - if( (curDetector != 0) && (curDetector-> getRichTbUpgradeCrystalMaster() != 0)) - { - G4cout<<"now setting crystal master visb options "<<G4endl; - - G4LogicalVolume * RichTbUpgradeCrystalMaster_LV =curDetector-> - getRichTbUpgradeCrystalMaster()-> getRichTbUpgradeCrystalMasterLVol(); - if(RichTbUpgradeCrystalMaster_LV != 0 ) { - - if(RichTbCrystal_vis == 0 ) - { - - RichTbUpgradeCrystalMaster_LV ->SetVisAttributes(G4VisAttributes::Invisible); - }else{ - - - - - G4VisAttributes * RichTbUpgradeCrystalMaster_LogVisAtt = - new G4VisAttributes(G4Colour(0.2,0.3,0.0)); - - // RichTbUpgradeCrystalMaster_LogVisAtt ->SetForceSolid(false); - // RichTbUpgradeCrystalMaster_LogVisAtt ->SetForceWireframe(true); - - - /* - else { - */ - //G4VisAttributes * RichTbCrystal_LogVisAtt = - // new G4VisAttributes(G4Colour(1.,0.0,0.0)); - if(RichTbCrystal_vis == 2 ) { - RichTbUpgradeCrystalMaster_LogVisAtt ->SetForceSolid(false); - RichTbUpgradeCrystalMaster_LogVisAtt ->SetForceWireframe(true); - // G4cout<<"test crystal vis "<<RichTbCrystal_vis<<G4endl; - } - if(RichTbCrystal_vis == 1 ) { - RichTbUpgradeCrystalMaster_LogVisAtt ->SetForceSolid(true); - } - RichTbUpgradeCrystalMaster_LogVisAtt->SetVisibility(true); - RichTbUpgradeCrystalMaster_LV -> SetVisAttributes(RichTbUpgradeCrystalMaster_LogVisAtt); - - } - - - } - - - } - - // now for the upgrade phdet frame - G4int RichTbPhdet_vis = aRunConfig->getRichTbPhDetSupFrame_visib(); - if( (curDetector != 0) && (curDetector-> getRichTbUpgradePhDetSupFrame() != 0)) - { - G4cout<<" Now setting PhDetFrame visib options " <<G4endl; - G4LogicalVolume * RichTbPhDetLeft_LV =curDetector-> - getRichTbUpgradePhDetSupFrame() -> getRichTbPhDetSupFrameLeftLVol(); - G4LogicalVolume * RichTbPhDetRight_LV =curDetector-> - getRichTbUpgradePhDetSupFrame() -> getRichTbPhDetSupFrameRightLVol(); - G4LogicalVolume * RichTbPhDetBottomLeft_LV; - G4LogicalVolume * RichTbPhDetBottomRight_LV; - if(aRadiatorConfiguration == 3) { - RichTbPhDetBottomLeft_LV =curDetector-> - getRichTbUpgradePhDetSupFrame()->getRichTbPhDetSupFrameBottomLeftLVol(); - RichTbPhDetBottomRight_LV =curDetector-> - getRichTbUpgradePhDetSupFrame()->getRichTbPhDetSupFrameBottomRightLVol(); - } - if((RichTbPhDetLeft_LV !=0) && (RichTbPhDetRight_LV != 0)) { - if(RichTbPhdet_vis == 0){ - RichTbPhDetLeft_LV ->SetVisAttributes(G4VisAttributes::Invisible); - RichTbPhDetRight_LV ->SetVisAttributes(G4VisAttributes::Invisible); - if((aRadiatorConfiguration == 3) && (RichTbPhDetBottomLeft_LV !=0) && (RichTbPhDetBottomRight_LV != 0)) { - RichTbPhDetBottomLeft_LV->SetVisAttributes(G4VisAttributes::Invisible); - RichTbPhDetBottomRight_LV->SetVisAttributes(G4VisAttributes::Invisible); - } - }else { - G4VisAttributes * RichTbPhDetSupFrame_LogVisAtt = - new G4VisAttributes(G4Colour(0.3,0.3,0.7)); - - if(RichTbPhdet_vis == 2) - { - RichTbPhDetSupFrame_LogVisAtt->SetForceSolid(false); - RichTbPhDetSupFrame_LogVisAtt->SetForceWireframe(true); - } - if(RichTbPhdet_vis == 1) - { - RichTbPhDetSupFrame_LogVisAtt->SetForceSolid(true); - } - RichTbPhDetSupFrame_LogVisAtt->SetVisibility(true); - RichTbPhDetLeft_LV->SetVisAttributes(RichTbPhDetSupFrame_LogVisAtt); - RichTbPhDetRight_LV->SetVisAttributes(RichTbPhDetSupFrame_LogVisAtt); - if((aRadiatorConfiguration == 3) && (RichTbPhDetBottomLeft_LV !=0) && (RichTbPhDetBottomRight_LV != 0)) { - RichTbPhDetBottomLeft_LV->SetVisAttributes(RichTbPhDetSupFrame_LogVisAtt); - RichTbPhDetBottomRight_LV->SetVisAttributes(RichTbPhDetSupFrame_LogVisAtt); - } - } - } - } - - // now for the upgrade EC - G4int RichTbEC_vis = aRunConfig->getRichTbEC_visib(); - if( (curDetector != 0) && (curDetector-> getRichTbEC() != 0)) - { - G4cout<<" Now setting EC visib options " <<G4endl; - G4LogicalVolume * RichTbECLeft_LV =curDetector-> - getRichTbEC()-> getRichTbECLeftLVol(); - G4LogicalVolume * RichTbECRight_LV = - (aRadiatorConfiguration == 2) ? 0 : curDetector-> getRichTbEC()-> getRichTbECRightLVol(); - G4LogicalVolume * RichTbECBottomLeft_LV; - G4LogicalVolume * RichTbECBottomRight_LV; - if(aRadiatorConfiguration == 3) { - RichTbECBottomLeft_LV = curDetector->getRichTbEC()->getRichTbECBottomLeftLVol(); - RichTbECBottomRight_LV = curDetector->getRichTbEC()->getRichTbECBottomRightLVol(); - } - G4VisAttributes * RichTbEC_LogVisAtt = new G4VisAttributes(G4Colour(0.7,0.3,0.7)); - if(RichTbECLeft_LV !=0 ) { - if( RichTbEC_vis == 0 ){ - RichTbECLeft_LV->SetVisAttributes(G4VisAttributes::Invisible); - if((aRadiatorConfiguration == 3) && (RichTbECBottomLeft_LV!=0) && (RichTbECBottomRight_LV!=0)){ - RichTbECBottomLeft_LV->SetVisAttributes(G4VisAttributes::Invisible); - RichTbECBottomRight_LV->SetVisAttributes(G4VisAttributes::Invisible); - } - }else { - - if(RichTbEC_vis == 2 ) { - RichTbEC_LogVisAtt->SetForceSolid(false); - RichTbEC_LogVisAtt->SetForceWireframe(true); - } - if(RichTbEC_vis == 1 ) RichTbEC_LogVisAtt->SetForceSolid(true); - RichTbEC_LogVisAtt->SetVisibility(true); - RichTbECLeft_LV-> SetVisAttributes(RichTbEC_LogVisAtt); - if((aRadiatorConfiguration == 3) && (RichTbECBottomLeft_LV!=0) && (RichTbECBottomRight_LV!=0)){ - RichTbECBottomLeft_LV->SetVisAttributes(RichTbEC_LogVisAtt); - RichTbECBottomRight_LV->SetVisAttributes(RichTbEC_LogVisAtt); - } - } - } - if(RichTbECRight_LV != 0) { - if(RichTbEC_vis == 0) RichTbECRight_LV->SetVisAttributes(G4VisAttributes::Invisible); - else RichTbECRight_LV->SetVisAttributes(RichTbEC_LogVisAtt); - } - } - - - // now for the upgrade PMTmaster - // TESTnumPmts - G4int CurNumPmts = NumPmtsOld; -// G4int CurNumPmts = RichTbPMTGeometryParameters::getNumPmts(); - if (aRadiatorConfiguration == 2) CurNumPmts = NumPmtsWithHpd; - else if (aRadiatorConfiguration == 3) CurNumPmts = NumPmtsUpgrade15; -// else if (aRadiatorConfiguration == 3) CurNumPmts = RichTbPMTGeometryParameters::getNumPmtsUpgrade(); - // CurNumPmts = (aRadiatorConfiguration==3) ? NumPmtsUpgrade15 : NumPmts; - - G4int RichTbPMTMaster_vis = aRunConfig->getRichTbPMTMaster_visib(); - G4cout<<"RichTb PMT Master visib flag "<<RichTbPMTMaster_vis<<G4endl; - - if( (curDetector != 0) && (curDetector-> getRichTbPMT() != 0)){ - G4cout<<"now setting PMT master visb options "<<RichTbPMTMaster_vis<<G4endl; - - std::vector<G4LogicalVolume *> RichTbPMTMaster_LV =curDetector-> - getRichTbPMT()-> getRichTbPMTMasterLVol() ; - - if((int) RichTbPMTMaster_LV.size() != 0 ) { - if(RichTbPMTMaster_vis == 0 ) { - for (int i=0; i<CurNumPmts; i++){ - RichTbPMTMaster_LV[i] ->SetVisAttributes(G4VisAttributes::Invisible); - } - } else { - G4VisAttributes * RichTbPMTMaster_LogVisAtt = - new G4VisAttributes(G4Colour(0.0,0.2,0.5)); - if(RichTbPMTMaster_vis == 2 ) { - RichTbPMTMaster_LogVisAtt ->SetForceSolid(false); - RichTbPMTMaster_LogVisAtt ->SetForceWireframe(true); - } - if(RichTbPMTMaster_vis == 1 ) { - RichTbPMTMaster_LogVisAtt ->SetForceSolid(true); - } - RichTbPMTMaster_LogVisAtt->SetVisibility(true); - - for (int i=0; i<CurNumPmts; i++){ - RichTbPMTMaster_LV [i] -> SetVisAttributes(RichTbPMTMaster_LogVisAtt); - } - } - } - } - - - G4int RichTbPMTSMaster_vis = aRunConfig->getRichTbPMTSMaster_visib(); - G4cout<<"RichTb PMT SMaster visib flag "<<RichTbPMTSMaster_vis<<G4endl; - - if((curDetector != 0) && (curDetector-> getRichTbPMT() != 0)){ - G4cout<<"now setting PMT SMaster visib options "<<RichTbPMTSMaster_vis<<G4endl; - - std::vector<G4LogicalVolume *> RichTbPMTSMaster_LV = curDetector-> - getRichTbPMT()-> getRichTbPMTSMasterLVol() ; - - if((int) RichTbPMTSMaster_LV.size() != 0 ) { - if(RichTbPMTSMaster_vis == 0 ) { - for (int i=0; i<CurNumPmts; i++){ - RichTbPMTSMaster_LV[i]->SetVisAttributes(G4VisAttributes::Invisible); - } - } else { - G4VisAttributes * RichTbPMTSMaster_LogVisAtt = - new G4VisAttributes(G4Colour(0.0,0.2,0.5)); - if(RichTbPMTSMaster_vis == 2 ) { - RichTbPMTSMaster_LogVisAtt->SetForceSolid(false); - RichTbPMTSMaster_LogVisAtt->SetForceWireframe(true); - } - if(RichTbPMTSMaster_vis == 1 ) { - RichTbPMTSMaster_LogVisAtt->SetForceSolid(true); - } - RichTbPMTSMaster_LogVisAtt->SetVisibility(true); - for (int i=0; i<CurNumPmts; i++){ - RichTbPMTSMaster_LV [i] -> SetVisAttributes(RichTbPMTSMaster_LogVisAtt); - } - } - } - } - - - - G4int RichTbPMTAnode_vis = aRunConfig->getRichTbPMTAnode_visib(); - G4cout<<"RichTb PMT Anode visib flag "<<RichTbPMTAnode_vis<<G4endl; - - if( (curDetector != 0) && (curDetector-> getRichTbPMT() != 0)){ - G4cout<<"now setting PMT Anode visib options "<<RichTbPMTAnode_vis<<G4endl; - - std::vector<G4LogicalVolume *> RichTbPMTAnode_LV =curDetector-> - getRichTbPMT()-> getRichTbPMTAnodeLVol() ; - - if((int) RichTbPMTAnode_LV.size() != 0 ) { - if(RichTbPMTAnode_vis == 0 ) { - for (int i=0; i<CurNumPmts; i++){ - RichTbPMTAnode_LV[i] ->SetVisAttributes(G4VisAttributes::Invisible); - } - - } else { - G4VisAttributes * RichTbPMTAnode_LogVisAtt = - new G4VisAttributes(G4Colour(0.0,0.2,0.5)); - if(RichTbPMTAnode_vis == 2 ) { - RichTbPMTAnode_LogVisAtt ->SetForceSolid(false); - RichTbPMTAnode_LogVisAtt ->SetForceWireframe(true); - - } - if(RichTbPMTAnode_vis == 1 ) { - RichTbPMTAnode_LogVisAtt ->SetForceSolid(true); - } - RichTbPMTAnode_LogVisAtt->SetVisibility(true); - for (int i=0; i<CurNumPmts; i++){ - RichTbPMTAnode_LV [i] -> SetVisAttributes(RichTbPMTAnode_LogVisAtt); - } - - } - - - } - } - - - - - G4int RichTbPMTEnvelope_vis = aRunConfig->getRichTbPMTEnvelope_visib(); - G4cout<<"PMT Envelope visib flag "<<RichTbPMTEnvelope_vis<<G4endl; - - if( (curDetector != 0) && (curDetector-> getRichTbPMT() != 0)) - { - G4cout<<"now setting pmt envelope visb options "<<RichTbPMTEnvelope_vis<<G4endl; + G4LogicalVolume *RichTbCrystalCover_LV = curDetector->getRichTbCrystalCover()->getRichTbCrystalCoverLVol(); + if (RichTbCrystalCover_LV != 0) { + if (RichTbCrystalCover_vis == 0) { + RichTbCrystalCover_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes *RichTbCrystalCover_LogVisAtt = new G4VisAttributes(G4Colour(0.0, 0.0, 1.0)); + if (RichTbCrystalCover_vis == 2) { + RichTbCrystalCover_LogVisAtt->SetForceSolid(false); + RichTbCrystalCover_LogVisAtt->SetForceWireframe(true); + G4cout << "test crystal cover vis " << RichTbCrystalCover_vis << G4endl; + } + if (RichTbCrystalCover_vis == 1) { + RichTbCrystalCover_LogVisAtt->SetForceSolid(true); + } + RichTbCrystalCover_LogVisAtt->SetVisibility(true); + RichTbCrystalCover_LV->SetVisAttributes(RichTbCrystalCover_LogVisAtt); + } + } + } - G4LogicalVolume * RichTbPMTEnvelope_LV =curDetector-> - getRichTbPMT()-> getRichTbPMTEnvelopeLVol(); - G4cout<<"test PMT Envelope LV "<<RichTbPMTEnvelope_LV<<G4endl; - if(RichTbPMTEnvelope_LV != 0 ) { - if(RichTbPMTEnvelope_vis == 0 ) { - RichTbPMTEnvelope_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMTEnvelope_LogVisAtt = - new G4VisAttributes(G4Colour(0.0,0.8,0.2)); - if(RichTbPMTEnvelope_vis == 2 ) { - RichTbPMTEnvelope_LogVisAtt ->SetForceSolid(false); - RichTbPMTEnvelope_LogVisAtt ->SetForceWireframe(true); - } - if(RichTbPMTEnvelope_vis == 1 ) { - RichTbPMTEnvelope_LogVisAtt ->SetForceSolid(true); - } - RichTbPMTEnvelope_LogVisAtt->SetVisibility(true); - RichTbPMTEnvelope_LV -> SetVisAttributes(RichTbPMTEnvelope_LogVisAtt); + // now for the lens - } + G4int RichTbLens_vis = aRunConfig->getRichTbLens_visib(); + G4cout << "Lens visib flag " << RichTbLens_vis << G4endl; - } + if ((curDetector != 0) && (curDetector->getRichTbLens() != 0)) { + G4cout << "now setting lens visb options " << RichTbLens_vis << G4endl; - } + G4LogicalVolume *RichTbLens_LV = curDetector->getRichTbLens()->getRichTbLensLVol(); + if (RichTbLens_LV != 0) { + if (RichTbLens_vis == 0) { + RichTbLens_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes *RichTbLens_LogVisAtt = new G4VisAttributes(G4Colour(1., 0.0, 0.0)); + if (RichTbLens_vis == 2) { + RichTbLens_LogVisAtt->SetForceSolid(false); + RichTbLens_LogVisAtt->SetForceWireframe(true); + G4cout << "test lens vis " << RichTbLens_vis << G4endl; + } + if (RichTbLens_vis == 1) { + RichTbLens_LogVisAtt->SetForceSolid(true); + } + RichTbLens_LogVisAtt->SetVisibility(true); + RichTbLens_LV->SetVisAttributes(RichTbLens_LogVisAtt); + } + } + } + } else { + // now for the radiator - G4int RichTbPMTQuartzW_vis = aRunConfig->getRichTbPMTQuartzW_visib(); - G4cout<<"PMT QW window visib flag "<<RichTbPMTQuartzW_vis<<G4endl; + G4int RichTbUpgradeRadiator_vis = aRunConfig->getRichTbUpgradeRadiator_visib(); + G4cout << "Radiator visib flag " << RichTbUpgradeRadiator_vis << G4endl; - if( (curDetector != 0) && (curDetector-> getRichTbPMT() != 0)) - { - G4cout<<"now setting qw window visb options "<<RichTbPMTQuartzW_vis<<G4endl; + if ((curDetector != 0) && (curDetector->getRichTbUpgradeRadiator() != 0)) { + G4cout << "now setting radiator visb options " << RichTbUpgradeRadiator_vis << G4endl; - G4LogicalVolume * RichTbPMTQuartzW_LV =curDetector->getRichTbPMT()-> getRichTbPMTQuartzWLVol(); + G4LogicalVolume *RichTbUpgradeRadiator_LV = + curDetector->getRichTbUpgradeRadiator()->getRichTbUpgradeRadiatorLVol(); + if (RichTbUpgradeRadiator_LV != 0) { + if (RichTbUpgradeRadiator_vis == 0) { + RichTbUpgradeRadiator_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes *RichTbUpgradeRadiator_LogVisAtt = new G4VisAttributes(G4Colour(0.7, 0.1, 0.4)); + if (RichTbUpgradeRadiator_vis == 2) { + RichTbUpgradeRadiator_LogVisAtt->SetForceSolid(false); + RichTbUpgradeRadiator_LogVisAtt->SetForceWireframe(true); + G4cout << "test radiator vis " << RichTbUpgradeRadiator_vis << G4endl; + } + if (RichTbUpgradeRadiator_vis == 1) { + RichTbUpgradeRadiator_LogVisAtt->SetForceSolid(true); + } + RichTbUpgradeRadiator_LogVisAtt->SetVisibility(true); + RichTbUpgradeRadiator_LV->SetVisAttributes(RichTbUpgradeRadiator_LogVisAtt); + } + } + } + // now for the dark cover - if(RichTbPMTQuartzW_LV != 0 ) { - if(RichTbPMTQuartzW_vis == 0 ) { - RichTbPMTQuartzW_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMTQuartzW_LogVisAtt = - new G4VisAttributes(G4Colour(0.2,0.0,0.8)); - if(RichTbPMTQuartzW_vis == 2 ) { - RichTbPMTQuartzW_LogVisAtt ->SetForceSolid(false); - RichTbPMTQuartzW_LogVisAtt ->SetForceWireframe(true); - } - if(RichTbPMTQuartzW_vis == 1 ) { - RichTbPMTQuartzW_LogVisAtt ->SetForceSolid(true); - } - RichTbPMTQuartzW_LogVisAtt->SetVisibility(true); - RichTbPMTQuartzW_LV -> SetVisAttributes(RichTbPMTQuartzW_LogVisAtt); + G4int RichTbUpgradeDarkCover_vis = aRunConfig->getRichTbUpgradeDarkCover_visib(); + G4cout << "Dark cover visib flag " << RichTbUpgradeDarkCover_vis << G4endl; - } + if ((curDetector != 0) && (curDetector->getRichTbUpgradeDarkCover() != 0)) { + G4cout << "now setting dark cover visib options " << RichTbUpgradeDarkCover_vis << G4endl; - } + G4LogicalVolume *RichTbUpgradeDarkCover_LV = + curDetector->getRichTbUpgradeDarkCover()->getRichTbUpgradeDarkCoverLVol(); + if (RichTbUpgradeDarkCover_LV != 0) { + if (RichTbUpgradeDarkCover_vis == 0) { + RichTbUpgradeDarkCover_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes *RichTbUpgradeDarkCover_LogVisAtt = new G4VisAttributes(G4Colour(0.0, 0.1, 0.05)); + if (RichTbUpgradeDarkCover_vis == 2) { + RichTbUpgradeDarkCover_LogVisAtt->SetForceSolid(false); + RichTbUpgradeDarkCover_LogVisAtt->SetForceWireframe(true); + G4cout << "test dark cover vis " << RichTbUpgradeDarkCover_vis << G4endl; + } + if (RichTbUpgradeDarkCover_vis == 1) { + RichTbUpgradeDarkCover_LogVisAtt->SetForceSolid(true); + } + RichTbUpgradeDarkCover_LogVisAtt->SetVisibility(true); + RichTbUpgradeDarkCover_LV->SetVisAttributes(RichTbUpgradeDarkCover_LogVisAtt); + } + } + } - } + G4int RichTbUpgradeUpsDarkCover_vis = aRunConfig->getRichTbUpgradeUpsDarkCover_visib(); + G4cout << "Ups Dark cover visib flag " << RichTbUpgradeUpsDarkCover_vis << G4endl; + if ((curDetector != 0) && (curDetector->getRichTbUpgradeDarkCover() != 0)) { + G4cout << "now setting ups dark cover visib options " << RichTbUpgradeUpsDarkCover_vis << G4endl; + G4LogicalVolume *RichTbUpgradeUpsDarkCover_LV = + curDetector->getRichTbUpgradeDarkCover()->getRichTbUpgradeUpsDarkCoverLVol(); + if (RichTbUpgradeUpsDarkCover_LV != 0) { + if (RichTbUpgradeUpsDarkCover_vis == 0) { + RichTbUpgradeUpsDarkCover_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes *RichTbUpgradeUpsDarkCover_LogVisAtt = new G4VisAttributes(G4Colour(0.0, 0.1, 0.05)); + if (RichTbUpgradeUpsDarkCover_vis == 2) { + RichTbUpgradeUpsDarkCover_LogVisAtt->SetForceSolid(false); + RichTbUpgradeUpsDarkCover_LogVisAtt->SetForceWireframe(true); + G4cout << "test dark cover vis " << RichTbUpgradeUpsDarkCover_vis << G4endl; + } + if (RichTbUpgradeUpsDarkCover_vis == 1) { + RichTbUpgradeUpsDarkCover_LogVisAtt->SetForceSolid(true); + } + RichTbUpgradeUpsDarkCover_LogVisAtt->SetVisibility(true); + RichTbUpgradeUpsDarkCover_LV->SetVisAttributes(RichTbUpgradeUpsDarkCover_LogVisAtt); + } + } + } - G4int RichTbPMTCathode_vis = aRunConfig->getRichTbPMTPhCathode_visib(); - G4cout<<"PMT cathod visib flag "<<RichTbPMTCathode_vis<<G4endl; + G4int RichTbUpgradeSideDarkCover_vis = aRunConfig->getRichTbUpgradeSideDarkCover_visib(); + G4cout << "Ups Dark cover visib flag " << RichTbUpgradeSideDarkCover_vis << G4endl; - if( (curDetector != 0) && (curDetector-> getRichTbPMT() != 0)) - { - G4cout<<"now setting cathode visib options "<<RichTbPMTCathode_vis<<G4endl; + if ((curDetector != 0) && (curDetector->getRichTbUpgradeDarkCover() != 0)) { + G4cout << "now setting ups dark cover visib options " << RichTbUpgradeSideDarkCover_vis << G4endl; - G4LogicalVolume * RichTbPMTCathode_LV =curDetector-> - getRichTbPMT()-> getRichTbPMTPhCathodeLVol(); - if(RichTbPMTCathode_LV != 0 ) { - if(RichTbPMTCathode_vis == 0 ) { - RichTbPMTCathode_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMTCathode_LogVisAtt = - new G4VisAttributes(G4Colour(1.0,0.0,0.0)); - if(RichTbPMTCathode_vis == 2 ) { - RichTbPMTCathode_LogVisAtt ->SetForceSolid(false); - RichTbPMTCathode_LogVisAtt ->SetForceWireframe(true); - } - if(RichTbPMTCathode_vis == 1 ) { - RichTbPMTCathode_LogVisAtt ->SetForceSolid(true); - } - RichTbPMTCathode_LogVisAtt->SetVisibility(true); - RichTbPMTCathode_LV -> SetVisAttributes(RichTbPMTCathode_LogVisAtt); + G4LogicalVolume *RichTbUpgradeSideDarkCover_LV = + curDetector->getRichTbUpgradeDarkCover()->getRichTbUpgradeSideDarkCoverLVol(); + if (RichTbUpgradeSideDarkCover_LV != 0) { + if (RichTbUpgradeSideDarkCover_vis == 0) { + RichTbUpgradeSideDarkCover_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes *RichTbUpgradeSideDarkCover_LogVisAtt = new G4VisAttributes(G4Colour(0.4, 0.4, 0.05)); + if (RichTbUpgradeSideDarkCover_vis == 2) { + RichTbUpgradeSideDarkCover_LogVisAtt->SetForceSolid(false); + RichTbUpgradeSideDarkCover_LogVisAtt->SetForceWireframe(true); + G4cout << "test dark cover vis " << RichTbUpgradeSideDarkCover_vis << G4endl; + } + if (RichTbUpgradeSideDarkCover_vis == 1) { + RichTbUpgradeSideDarkCover_LogVisAtt->SetForceSolid(true); + } + RichTbUpgradeSideDarkCover_LogVisAtt->SetVisibility(true); + RichTbUpgradeSideDarkCover_LV->SetVisAttributes(RichTbUpgradeSideDarkCover_LogVisAtt); + } + } + } + G4int RichTbUpgradeDnsDarkCover_vis = aRunConfig->getRichTbUpgradeDnsDarkCover_visib(); + G4cout << "Dns Dark cover visib flag " << RichTbUpgradeDnsDarkCover_vis << G4endl; - } + if ((curDetector != 0) && (curDetector->getRichTbEC() != 0)) { + G4cout << "now setting dns dark cover visib options " << RichTbUpgradeDnsDarkCover_vis << G4endl; - } + G4LogicalVolume *RichTbUpgradeDnsDarkCover_LV = curDetector->getRichTbEC()->getRichTbECSupLVol(); + if (RichTbUpgradeDnsDarkCover_LV != 0) { + if (RichTbUpgradeDnsDarkCover_vis == 0) { + RichTbUpgradeDnsDarkCover_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes *RichTbUpgradeDnsDarkCover_LogVisAtt = new G4VisAttributes(G4Colour(0.5, 0.6, 0.05)); + if (RichTbUpgradeDnsDarkCover_vis == 2) { + RichTbUpgradeDnsDarkCover_LogVisAtt->SetForceSolid(false); + RichTbUpgradeDnsDarkCover_LogVisAtt->SetForceWireframe(true); + G4cout << "test dark cover vis " << RichTbUpgradeDnsDarkCover_vis << G4endl; + } + if (RichTbUpgradeDnsDarkCover_vis == 1) { + RichTbUpgradeDnsDarkCover_LogVisAtt->SetForceSolid(true); + } + RichTbUpgradeDnsDarkCover_LogVisAtt->SetVisibility(true); + RichTbUpgradeDnsDarkCover_LV->SetVisAttributes(RichTbUpgradeDnsDarkCover_LogVisAtt); + } + } + } - } + // now for the mirror + G4int RichTbUpgradeMirror_vis = aRunConfig->getRichTbUpgradeMirror_visib(); + if ((curDetector != 0) && (curDetector->getRichTbUpgradeMirror() != 0)) { + G4cout << "now setting mirror visb options " << RichTbUpgradeMirror_vis << G4endl; + G4LogicalVolume *RichTbUpgradeMirror_LV = curDetector->getRichTbUpgradeMirror()->getRichTbUpgradeMirrorLVol(); + if (RichTbUpgradeMirror_LV != 0) { + // G4cout<<" mirror log vol "<<RichTbUpgradeMirror_LV<<G4endl; + if (RichTbUpgradeMirror_vis == 0) { + RichTbUpgradeMirror_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { - G4int RichTbPMTFrontRing_vis = aRunConfig->getRichTbPMTFrontRing_visib(); - G4cout<<"PMT front ring visib flag "<<RichTbPMTFrontRing_vis<<G4endl; + G4VisAttributes *RichTbUpgradeMirror_LogVisAtt = new G4VisAttributes(G4Colour(0.1, 0.8, 0.8)); - if( (curDetector != 0) && (curDetector-> getRichTbPMT() != 0)){ + if (RichTbUpgradeMirror_vis == 2) { + RichTbUpgradeMirror_LogVisAtt->SetForceSolid(false); + RichTbUpgradeMirror_LogVisAtt->SetForceWireframe(true); + G4cout << "test mirror vis " << RichTbUpgradeMirror_vis << G4endl; + } + if (RichTbUpgradeMirror_vis == 1) { + RichTbUpgradeMirror_LogVisAtt->SetForceSolid(true); + } - G4cout<<"now setting front ring visib options "<<RichTbPMTFrontRing_vis<<G4endl; + RichTbUpgradeMirror_LogVisAtt->SetVisibility(true); + RichTbUpgradeMirror_LV->SetVisAttributes(RichTbUpgradeMirror_LogVisAtt); + } + } + } + } - G4LogicalVolume * RichTbPMTFrontRing_LV =curDetector-> - getRichTbPMT()-> getRichTbPMTFrontRingLVol(); - if(RichTbPMTFrontRing_LV != 0 ) { - if(RichTbPMTFrontRing_vis == 0 ) { - RichTbPMTFrontRing_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMTFrontRing_LogVisAtt = - new G4VisAttributes(G4Colour(1.0,0.0,0.0)); - if(RichTbPMTFrontRing_vis == 2 ) { - RichTbPMTFrontRing_LogVisAtt ->SetForceSolid(false); - RichTbPMTFrontRing_LogVisAtt ->SetForceWireframe(true); - } - if(RichTbPMTFrontRing_vis == 1 ) { - RichTbPMTFrontRing_LogVisAtt ->SetForceSolid(true); - } - RichTbPMTFrontRing_LogVisAtt->SetVisibility(true); - RichTbPMTFrontRing_LV -> SetVisAttributes(RichTbPMTFrontRing_LogVisAtt); + // now for the crystal master + G4int RichTbCrystal_vis = aRunConfig->getRichTbCrystal_visib(); + // G4cout<<"Crystal visib flag "<<RichTbCrystal_vis<<G4endl; - } + if ((curDetector != 0) && (curDetector->getRichTbUpgradeCrystalMaster() != 0)) { + G4cout << "now setting crystal master visb options " << G4endl; - } + G4LogicalVolume *RichTbUpgradeCrystalMaster_LV = + curDetector->getRichTbUpgradeCrystalMaster()->getRichTbUpgradeCrystalMasterLVol(); + if (RichTbUpgradeCrystalMaster_LV != 0) { - } + if (RichTbCrystal_vis == 0) { + RichTbUpgradeCrystalMaster_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { - if( aRadiatorConfiguration == 2 ) { + G4VisAttributes *RichTbUpgradeCrystalMaster_LogVisAtt = new G4VisAttributes(G4Colour(0.2, 0.3, 0.0)); - G4int RichTbHpdQW_vis = aRunConfig->getRichTbHpdQW_visib(); - if( (curDetector != 0) && (curDetector-> getRichTbHpd() != 0 ) ) { + // RichTbUpgradeCrystalMaster_LogVisAtt ->SetForceSolid(false); + // RichTbUpgradeCrystalMaster_LogVisAtt ->SetForceWireframe(true); - G4cout<<"now setting HPD QW visib options "<< RichTbHpdQW_vis <<G4endl; + /* +else { + */ + // G4VisAttributes * RichTbCrystal_LogVisAtt = + // new G4VisAttributes(G4Colour(1.,0.0,0.0)); + if (RichTbCrystal_vis == 2) { + RichTbUpgradeCrystalMaster_LogVisAtt->SetForceSolid(false); + RichTbUpgradeCrystalMaster_LogVisAtt->SetForceWireframe(true); + // G4cout<<"test crystal vis "<<RichTbCrystal_vis<<G4endl; + } + if (RichTbCrystal_vis == 1) { + RichTbUpgradeCrystalMaster_LogVisAtt->SetForceSolid(true); + } + RichTbUpgradeCrystalMaster_LogVisAtt->SetVisibility(true); + RichTbUpgradeCrystalMaster_LV->SetVisAttributes(RichTbUpgradeCrystalMaster_LogVisAtt); + } + } + } + + // now for the upgrade phdet frame + G4int RichTbPhdet_vis = aRunConfig->getRichTbPhDetSupFrame_visib(); + if ((curDetector != 0) && (curDetector->getRichTbUpgradePhDetSupFrame() != 0)) { + G4cout << " Now setting PhDetFrame visib options " << G4endl; + G4LogicalVolume *RichTbPhDetLeft_LV = + curDetector->getRichTbUpgradePhDetSupFrame()->getRichTbPhDetSupFrameLeftLVol(); + G4LogicalVolume *RichTbPhDetRight_LV = + curDetector->getRichTbUpgradePhDetSupFrame()->getRichTbPhDetSupFrameRightLVol(); + G4LogicalVolume *RichTbPhDetBottomLeft_LV; + G4LogicalVolume *RichTbPhDetBottomRight_LV; + if (aRadiatorConfiguration == 3) { + RichTbPhDetBottomLeft_LV = curDetector->getRichTbUpgradePhDetSupFrame()->getRichTbPhDetSupFrameBottomLeftLVol(); + RichTbPhDetBottomRight_LV = curDetector->getRichTbUpgradePhDetSupFrame()->getRichTbPhDetSupFrameBottomRightLVol(); + } + if ((RichTbPhDetLeft_LV != 0) && (RichTbPhDetRight_LV != 0)) { + if (RichTbPhdet_vis == 0) { + RichTbPhDetLeft_LV->SetVisAttributes(G4VisAttributes::Invisible); + RichTbPhDetRight_LV->SetVisAttributes(G4VisAttributes::Invisible); + if ((aRadiatorConfiguration == 3) && (RichTbPhDetBottomLeft_LV != 0) && (RichTbPhDetBottomRight_LV != 0)) { + RichTbPhDetBottomLeft_LV->SetVisAttributes(G4VisAttributes::Invisible); + RichTbPhDetBottomRight_LV->SetVisAttributes(G4VisAttributes::Invisible); + } + } else { + G4VisAttributes *RichTbPhDetSupFrame_LogVisAtt = new G4VisAttributes(G4Colour(0.3, 0.3, 0.7)); - G4LogicalVolume * RichTbHpdQW_LV =curDetector->getRichTbHpd()-> getRichTbHpdQuartzWLVol(); - if( RichTbHpdQW_LV != 0 ) { + if (RichTbPhdet_vis == 2) { + RichTbPhDetSupFrame_LogVisAtt->SetForceSolid(false); + RichTbPhDetSupFrame_LogVisAtt->SetForceWireframe(true); + } + if (RichTbPhdet_vis == 1) { + RichTbPhDetSupFrame_LogVisAtt->SetForceSolid(true); + } + RichTbPhDetSupFrame_LogVisAtt->SetVisibility(true); + RichTbPhDetLeft_LV->SetVisAttributes(RichTbPhDetSupFrame_LogVisAtt); + RichTbPhDetRight_LV->SetVisAttributes(RichTbPhDetSupFrame_LogVisAtt); + if ((aRadiatorConfiguration == 3) && (RichTbPhDetBottomLeft_LV != 0) && (RichTbPhDetBottomRight_LV != 0)) { + RichTbPhDetBottomLeft_LV->SetVisAttributes(RichTbPhDetSupFrame_LogVisAtt); + RichTbPhDetBottomRight_LV->SetVisAttributes(RichTbPhDetSupFrame_LogVisAtt); + } + } + } + } + + // now for the upgrade EC + G4int RichTbEC_vis = aRunConfig->getRichTbEC_visib(); + if ((curDetector != 0) && (curDetector->getRichTbEC() != 0)) { + G4cout << " Now setting EC visib options " << G4endl; + G4LogicalVolume *RichTbECLeft_LV = curDetector->getRichTbEC()->getRichTbECLeftLVol(); + G4LogicalVolume *RichTbECRight_LV = + (aRadiatorConfiguration == 2) ? 0 : curDetector->getRichTbEC()->getRichTbECRightLVol(); + G4LogicalVolume *RichTbECBottomLeft_LV; + G4LogicalVolume *RichTbECBottomRight_LV; + if (aRadiatorConfiguration == 3) { + RichTbECBottomLeft_LV = curDetector->getRichTbEC()->getRichTbECBottomLeftLVol(); + RichTbECBottomRight_LV = curDetector->getRichTbEC()->getRichTbECBottomRightLVol(); + } + G4VisAttributes *RichTbEC_LogVisAtt = new G4VisAttributes(G4Colour(0.7, 0.3, 0.7)); + if (RichTbECLeft_LV != 0) { + if (RichTbEC_vis == 0) { + RichTbECLeft_LV->SetVisAttributes(G4VisAttributes::Invisible); + if ((aRadiatorConfiguration == 3) && (RichTbECBottomLeft_LV != 0) && (RichTbECBottomRight_LV != 0)) { + RichTbECBottomLeft_LV->SetVisAttributes(G4VisAttributes::Invisible); + RichTbECBottomRight_LV->SetVisAttributes(G4VisAttributes::Invisible); + } + } else { - if( RichTbHpdQW_vis == 0 ){ - RichTbHpdQW_LV -> SetVisAttributes(G4VisAttributes::Invisible); - } else { + if (RichTbEC_vis == 2) { + RichTbEC_LogVisAtt->SetForceSolid(false); + RichTbEC_LogVisAtt->SetForceWireframe(true); + } + if (RichTbEC_vis == 1) + RichTbEC_LogVisAtt->SetForceSolid(true); + RichTbEC_LogVisAtt->SetVisibility(true); + RichTbECLeft_LV->SetVisAttributes(RichTbEC_LogVisAtt); + if ((aRadiatorConfiguration == 3) && (RichTbECBottomLeft_LV != 0) && (RichTbECBottomRight_LV != 0)) { + RichTbECBottomLeft_LV->SetVisAttributes(RichTbEC_LogVisAtt); + RichTbECBottomRight_LV->SetVisAttributes(RichTbEC_LogVisAtt); + } + } + } + if (RichTbECRight_LV != 0) { + if (RichTbEC_vis == 0) + RichTbECRight_LV->SetVisAttributes(G4VisAttributes::Invisible); + else + RichTbECRight_LV->SetVisAttributes(RichTbEC_LogVisAtt); + } + } + + // now for the upgrade PMTmaster + // TESTnumPmts + G4int CurNumPmts = NumPmtsOld; + // G4int CurNumPmts = RichTbPMTGeometryParameters::getNumPmts(); + if (aRadiatorConfiguration == 2) + CurNumPmts = NumPmtsWithHpd; + else if (aRadiatorConfiguration == 3) + CurNumPmts = NumPmtsUpgrade15; + // else if (aRadiatorConfiguration == 3) CurNumPmts = RichTbPMTGeometryParameters::getNumPmtsUpgrade(); + // CurNumPmts = (aRadiatorConfiguration==3) ? NumPmtsUpgrade15 : NumPmts; + + G4int RichTbPMTMaster_vis = aRunConfig->getRichTbPMTMaster_visib(); + G4cout << "RichTb PMT Master visib flag " << RichTbPMTMaster_vis << G4endl; + + if ((curDetector != 0) && (curDetector->getRichTbPMT() != 0)) { + G4cout << "now setting PMT master visb options " << RichTbPMTMaster_vis << G4endl; + + std::vector<G4LogicalVolume *> RichTbPMTMaster_LV = curDetector->getRichTbPMT()->getRichTbPMTMasterLVol(); + + if ((int)RichTbPMTMaster_LV.size() != 0) { + if (RichTbPMTMaster_vis == 0) { + for (int i = 0; i < CurNumPmts; i++) { + RichTbPMTMaster_LV[i]->SetVisAttributes(G4VisAttributes::Invisible); + } + } else { + G4VisAttributes *RichTbPMTMaster_LogVisAtt = new G4VisAttributes(G4Colour(0.0, 0.2, 0.5)); + if (RichTbPMTMaster_vis == 2) { + RichTbPMTMaster_LogVisAtt->SetForceSolid(false); + RichTbPMTMaster_LogVisAtt->SetForceWireframe(true); + } + if (RichTbPMTMaster_vis == 1) { + RichTbPMTMaster_LogVisAtt->SetForceSolid(true); + } + RichTbPMTMaster_LogVisAtt->SetVisibility(true); - G4VisAttributes * RichTbHpdQW_LogVisAtt = - new G4VisAttributes(G4Colour(1.0,0.6,0.0)); - if( RichTbHpdQW_vis == 2 ) { - RichTbHpdQW_LogVisAtt -> SetForceSolid(false); - RichTbHpdQW_LogVisAtt -> SetForceWireframe(true); - } - if( RichTbHpdQW_vis == 1 ) { - RichTbHpdQW_LogVisAtt -> SetForceSolid(true); - } - RichTbHpdQW_LogVisAtt ->SetVisibility(true); - RichTbHpdQW_LV -> SetVisAttributes(RichTbHpdQW_LogVisAtt); + for (int i = 0; i < CurNumPmts; i++) { + RichTbPMTMaster_LV[i]->SetVisAttributes(RichTbPMTMaster_LogVisAtt); + } + } + } + } + G4int RichTbPMTSMaster_vis = aRunConfig->getRichTbPMTSMaster_visib(); + G4cout << "RichTb PMT SMaster visib flag " << RichTbPMTSMaster_vis << G4endl; - } + if ((curDetector != 0) && (curDetector->getRichTbPMT() != 0)) { + G4cout << "now setting PMT SMaster visib options " << RichTbPMTSMaster_vis << G4endl; - } + std::vector<G4LogicalVolume *> RichTbPMTSMaster_LV = curDetector->getRichTbPMT()->getRichTbPMTSMasterLVol(); - } + if ((int)RichTbPMTSMaster_LV.size() != 0) { + if (RichTbPMTSMaster_vis == 0) { + for (int i = 0; i < CurNumPmts; i++) { + RichTbPMTSMaster_LV[i]->SetVisAttributes(G4VisAttributes::Invisible); + } + } else { + G4VisAttributes *RichTbPMTSMaster_LogVisAtt = new G4VisAttributes(G4Colour(0.0, 0.2, 0.5)); + if (RichTbPMTSMaster_vis == 2) { + RichTbPMTSMaster_LogVisAtt->SetForceSolid(false); + RichTbPMTSMaster_LogVisAtt->SetForceWireframe(true); + } + if (RichTbPMTSMaster_vis == 1) { + RichTbPMTSMaster_LogVisAtt->SetForceSolid(true); + } + RichTbPMTSMaster_LogVisAtt->SetVisibility(true); + for (int i = 0; i < CurNumPmts; i++) { + RichTbPMTSMaster_LV[i]->SetVisAttributes(RichTbPMTSMaster_LogVisAtt); + } + } + } + } - G4int RichTbHpdPHC_vis = aRunConfig->getRichTbHpdPHC_visib(); - if( (curDetector != 0) && (curDetector-> getRichTbHpd() != 0 ) ) { + G4int RichTbPMTAnode_vis = aRunConfig->getRichTbPMTAnode_visib(); + G4cout << "RichTb PMT Anode visib flag " << RichTbPMTAnode_vis << G4endl; - G4cout<<"now setting HPD PHC visib options "<< RichTbHpdPHC_vis <<G4endl; + if ((curDetector != 0) && (curDetector->getRichTbPMT() != 0)) { + G4cout << "now setting PMT Anode visib options " << RichTbPMTAnode_vis << G4endl; - G4LogicalVolume * RichTbHpdPHC_LV =curDetector->getRichTbHpd()-> getRichTbHpdPhCathodeLVol(); - if( RichTbHpdPHC_LV != 0 ) { + std::vector<G4LogicalVolume *> RichTbPMTAnode_LV = curDetector->getRichTbPMT()->getRichTbPMTAnodeLVol(); - if( RichTbHpdPHC_vis == 0 ){ - RichTbHpdPHC_LV -> SetVisAttributes(G4VisAttributes::Invisible); - } else { + if ((int)RichTbPMTAnode_LV.size() != 0) { + if (RichTbPMTAnode_vis == 0) { + for (int i = 0; i < CurNumPmts; i++) { + RichTbPMTAnode_LV[i]->SetVisAttributes(G4VisAttributes::Invisible); + } - G4VisAttributes * RichTbHpdPHC_LogVisAtt = - new G4VisAttributes(G4Colour(0.3,0.6,0.8)); - if( RichTbHpdPHC_vis == 2 ) { - RichTbHpdPHC_LogVisAtt -> SetForceSolid(false); - RichTbHpdPHC_LogVisAtt -> SetForceWireframe(true); - } - if( RichTbHpdPHC_vis == 1 ) { - RichTbHpdPHC_LogVisAtt -> SetForceSolid(true); - } - RichTbHpdPHC_LogVisAtt ->SetVisibility(true); - RichTbHpdPHC_LV -> SetVisAttributes(RichTbHpdPHC_LogVisAtt); + } else { + G4VisAttributes *RichTbPMTAnode_LogVisAtt = new G4VisAttributes(G4Colour(0.0, 0.2, 0.5)); + if (RichTbPMTAnode_vis == 2) { + RichTbPMTAnode_LogVisAtt->SetForceSolid(false); + RichTbPMTAnode_LogVisAtt->SetForceWireframe(true); + } + if (RichTbPMTAnode_vis == 1) { + RichTbPMTAnode_LogVisAtt->SetForceSolid(true); + } + RichTbPMTAnode_LogVisAtt->SetVisibility(true); + for (int i = 0; i < CurNumPmts; i++) { + RichTbPMTAnode_LV[i]->SetVisAttributes(RichTbPMTAnode_LogVisAtt); + } + } + } + } + + G4int RichTbPMTEnvelope_vis = aRunConfig->getRichTbPMTEnvelope_visib(); + G4cout << "PMT Envelope visib flag " << RichTbPMTEnvelope_vis << G4endl; + + if ((curDetector != 0) && (curDetector->getRichTbPMT() != 0)) { + G4cout << "now setting pmt envelope visb options " << RichTbPMTEnvelope_vis << G4endl; + + G4LogicalVolume *RichTbPMTEnvelope_LV = curDetector->getRichTbPMT()->getRichTbPMTEnvelopeLVol(); + G4cout << "test PMT Envelope LV " << RichTbPMTEnvelope_LV << G4endl; + if (RichTbPMTEnvelope_LV != 0) { + if (RichTbPMTEnvelope_vis == 0) { + RichTbPMTEnvelope_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes *RichTbPMTEnvelope_LogVisAtt = new G4VisAttributes(G4Colour(0.0, 0.8, 0.2)); + if (RichTbPMTEnvelope_vis == 2) { + RichTbPMTEnvelope_LogVisAtt->SetForceSolid(false); + RichTbPMTEnvelope_LogVisAtt->SetForceWireframe(true); + } + if (RichTbPMTEnvelope_vis == 1) { + RichTbPMTEnvelope_LogVisAtt->SetForceSolid(true); + } + RichTbPMTEnvelope_LogVisAtt->SetVisibility(true); + RichTbPMTEnvelope_LV->SetVisAttributes(RichTbPMTEnvelope_LogVisAtt); + } + } + } + G4int RichTbPMTQuartzW_vis = aRunConfig->getRichTbPMTQuartzW_visib(); + G4cout << "PMT QW window visib flag " << RichTbPMTQuartzW_vis << G4endl; - } + if ((curDetector != 0) && (curDetector->getRichTbPMT() != 0)) { + G4cout << "now setting qw window visb options " << RichTbPMTQuartzW_vis << G4endl; - } + G4LogicalVolume *RichTbPMTQuartzW_LV = curDetector->getRichTbPMT()->getRichTbPMTQuartzWLVol(); - } + if (RichTbPMTQuartzW_LV != 0) { + if (RichTbPMTQuartzW_vis == 0) { + RichTbPMTQuartzW_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes *RichTbPMTQuartzW_LogVisAtt = new G4VisAttributes(G4Colour(0.2, 0.0, 0.8)); + if (RichTbPMTQuartzW_vis == 2) { + RichTbPMTQuartzW_LogVisAtt->SetForceSolid(false); + RichTbPMTQuartzW_LogVisAtt->SetForceWireframe(true); + } + if (RichTbPMTQuartzW_vis == 1) { + RichTbPMTQuartzW_LogVisAtt->SetForceSolid(true); + } + RichTbPMTQuartzW_LogVisAtt->SetVisibility(true); + RichTbPMTQuartzW_LV->SetVisAttributes(RichTbPMTQuartzW_LogVisAtt); + } + } + } + + G4int RichTbPMTCathode_vis = aRunConfig->getRichTbPMTPhCathode_visib(); + G4cout << "PMT cathod visib flag " << RichTbPMTCathode_vis << G4endl; + + if ((curDetector != 0) && (curDetector->getRichTbPMT() != 0)) { + G4cout << "now setting cathode visib options " << RichTbPMTCathode_vis << G4endl; + + G4LogicalVolume *RichTbPMTCathode_LV = curDetector->getRichTbPMT()->getRichTbPMTPhCathodeLVol(); + if (RichTbPMTCathode_LV != 0) { + if (RichTbPMTCathode_vis == 0) { + RichTbPMTCathode_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes *RichTbPMTCathode_LogVisAtt = new G4VisAttributes(G4Colour(1.0, 0.0, 0.0)); + if (RichTbPMTCathode_vis == 2) { + RichTbPMTCathode_LogVisAtt->SetForceSolid(false); + RichTbPMTCathode_LogVisAtt->SetForceWireframe(true); + } + if (RichTbPMTCathode_vis == 1) { + RichTbPMTCathode_LogVisAtt->SetForceSolid(true); + } + RichTbPMTCathode_LogVisAtt->SetVisibility(true); + RichTbPMTCathode_LV->SetVisAttributes(RichTbPMTCathode_LogVisAtt); + } + } + } - G4int RichTbHpdSID_vis = aRunConfig->getRichTbHpdSID_visib(); - if( (curDetector != 0) && (curDetector-> getRichTbHpd() != 0 ) ) { + G4int RichTbPMTFrontRing_vis = aRunConfig->getRichTbPMTFrontRing_visib(); + G4cout << "PMT front ring visib flag " << RichTbPMTFrontRing_vis << G4endl; - G4cout<<"now setting HPD SiDet visib options "<< RichTbHpdSID_vis <<G4endl; + if ((curDetector != 0) && (curDetector->getRichTbPMT() != 0)) { - G4LogicalVolume * RichTbHpdSID_LV =curDetector->getRichTbHpd()-> getRichTbHpdSiDetLVol (); - if( RichTbHpdSID_LV != 0 ) { + G4cout << "now setting front ring visib options " << RichTbPMTFrontRing_vis << G4endl; - if( RichTbHpdSID_vis == 0 ){ - RichTbHpdSID_LV -> SetVisAttributes(G4VisAttributes::Invisible); - } else { + G4LogicalVolume *RichTbPMTFrontRing_LV = curDetector->getRichTbPMT()->getRichTbPMTFrontRingLVol(); + if (RichTbPMTFrontRing_LV != 0) { + if (RichTbPMTFrontRing_vis == 0) { + RichTbPMTFrontRing_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes *RichTbPMTFrontRing_LogVisAtt = new G4VisAttributes(G4Colour(1.0, 0.0, 0.0)); + if (RichTbPMTFrontRing_vis == 2) { + RichTbPMTFrontRing_LogVisAtt->SetForceSolid(false); + RichTbPMTFrontRing_LogVisAtt->SetForceWireframe(true); + } + if (RichTbPMTFrontRing_vis == 1) { + RichTbPMTFrontRing_LogVisAtt->SetForceSolid(true); + } + RichTbPMTFrontRing_LogVisAtt->SetVisibility(true); + RichTbPMTFrontRing_LV->SetVisAttributes(RichTbPMTFrontRing_LogVisAtt); + } + } + } - G4VisAttributes * RichTbHpdSID_LogVisAtt = - new G4VisAttributes(G4Colour(0.3,0.6,0.8)); - if( RichTbHpdSID_vis == 2 ) { - RichTbHpdSID_LogVisAtt -> SetForceSolid(false); - RichTbHpdSID_LogVisAtt -> SetForceWireframe(true); - } - if( RichTbHpdSID_vis == 1 ) { - RichTbHpdSID_LogVisAtt -> SetForceSolid(true); - } - RichTbHpdSID_LogVisAtt ->SetVisibility(true); - RichTbHpdSID_LV -> SetVisAttributes(RichTbHpdSID_LogVisAtt); + if (aRadiatorConfiguration == 2) { + G4int RichTbHpdQW_vis = aRunConfig->getRichTbHpdQW_visib(); + if ((curDetector != 0) && (curDetector->getRichTbHpd() != 0)) { - } + G4cout << "now setting HPD QW visib options " << RichTbHpdQW_vis << G4endl; - } + G4LogicalVolume *RichTbHpdQW_LV = curDetector->getRichTbHpd()->getRichTbHpdQuartzWLVol(); + if (RichTbHpdQW_LV != 0) { - } + if (RichTbHpdQW_vis == 0) { + RichTbHpdQW_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes *RichTbHpdQW_LogVisAtt = new G4VisAttributes(G4Colour(1.0, 0.6, 0.0)); + if (RichTbHpdQW_vis == 2) { + RichTbHpdQW_LogVisAtt->SetForceSolid(false); + RichTbHpdQW_LogVisAtt->SetForceWireframe(true); + } + if (RichTbHpdQW_vis == 1) { + RichTbHpdQW_LogVisAtt->SetForceSolid(true); + } + RichTbHpdQW_LogVisAtt->SetVisibility(true); + RichTbHpdQW_LV->SetVisAttributes(RichTbHpdQW_LogVisAtt); + } + } + } - G4int RichTbHpdENV_vis = aRunConfig->getRichTbHpdENV_visib(); - if( (curDetector != 0) && (curDetector-> getRichTbHpd() != 0 ) ) { + G4int RichTbHpdPHC_vis = aRunConfig->getRichTbHpdPHC_visib(); + if ((curDetector != 0) && (curDetector->getRichTbHpd() != 0)) { - G4cout<<"now setting HPD Envelope tube visib options "<< RichTbHpdENV_vis <<G4endl; + G4cout << "now setting HPD PHC visib options " << RichTbHpdPHC_vis << G4endl; - G4LogicalVolume * RichTbHpdENV_LV =curDetector->getRichTbHpd()-> getRichTbHpdEnvelopeTubeLVol (); + G4LogicalVolume *RichTbHpdPHC_LV = curDetector->getRichTbHpd()->getRichTbHpdPhCathodeLVol(); + if (RichTbHpdPHC_LV != 0) { - if( RichTbHpdENV_LV != 0 ) { + if (RichTbHpdPHC_vis == 0) { + RichTbHpdPHC_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { - if( RichTbHpdENV_vis == 0 ){ - RichTbHpdENV_LV -> SetVisAttributes(G4VisAttributes::Invisible); - } else { + G4VisAttributes *RichTbHpdPHC_LogVisAtt = new G4VisAttributes(G4Colour(0.3, 0.6, 0.8)); + if (RichTbHpdPHC_vis == 2) { + RichTbHpdPHC_LogVisAtt->SetForceSolid(false); + RichTbHpdPHC_LogVisAtt->SetForceWireframe(true); + } + if (RichTbHpdPHC_vis == 1) { + RichTbHpdPHC_LogVisAtt->SetForceSolid(true); + } + RichTbHpdPHC_LogVisAtt->SetVisibility(true); + RichTbHpdPHC_LV->SetVisAttributes(RichTbHpdPHC_LogVisAtt); + } + } + } - G4VisAttributes * RichTbHpdENV_LogVisAtt = - new G4VisAttributes(G4Colour(0.2,0.2,0.5)); - if( RichTbHpdENV_vis == 2 ) { - RichTbHpdENV_LogVisAtt -> SetForceSolid(false); - RichTbHpdENV_LogVisAtt -> SetForceWireframe(true); - } - if( RichTbHpdENV_vis == 1 ) { - RichTbHpdENV_LogVisAtt -> SetForceSolid(true); - } - RichTbHpdENV_LogVisAtt ->SetVisibility(true); - RichTbHpdENV_LV -> SetVisAttributes(RichTbHpdENV_LogVisAtt); + G4int RichTbHpdSID_vis = aRunConfig->getRichTbHpdSID_visib(); + if ((curDetector != 0) && (curDetector->getRichTbHpd() != 0)) { + G4cout << "now setting HPD SiDet visib options " << RichTbHpdSID_vis << G4endl; - } + G4LogicalVolume *RichTbHpdSID_LV = curDetector->getRichTbHpd()->getRichTbHpdSiDetLVol(); + if (RichTbHpdSID_LV != 0) { - } + if (RichTbHpdSID_vis == 0) { + RichTbHpdSID_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { - } + G4VisAttributes *RichTbHpdSID_LogVisAtt = new G4VisAttributes(G4Colour(0.3, 0.6, 0.8)); + if (RichTbHpdSID_vis == 2) { + RichTbHpdSID_LogVisAtt->SetForceSolid(false); + RichTbHpdSID_LogVisAtt->SetForceWireframe(true); + } + if (RichTbHpdSID_vis == 1) { + RichTbHpdSID_LogVisAtt->SetForceSolid(true); + } + RichTbHpdSID_LogVisAtt->SetVisibility(true); + RichTbHpdSID_LV->SetVisAttributes(RichTbHpdSID_LogVisAtt); + } + } + } - G4int RichTbHpdENVCAP_vis = aRunConfig->getRichTbHpdENVCAP_visib(); - if( (curDetector != 0) && (curDetector-> getRichTbHpd() != 0 ) ) { + G4int RichTbHpdENV_vis = aRunConfig->getRichTbHpdENV_visib(); + if ((curDetector != 0) && (curDetector->getRichTbHpd() != 0)) { - G4cout<<"now setting HPD Envelope endcap visib options "<< RichTbHpdENVCAP_vis <<G4endl; + G4cout << "now setting HPD Envelope tube visib options " << RichTbHpdENV_vis << G4endl; - G4LogicalVolume * RichTbHpdENVCAP_LV =curDetector->getRichTbHpd()-> getRichTbHpdEnvelopeEndCapLVol(); + G4LogicalVolume *RichTbHpdENV_LV = curDetector->getRichTbHpd()->getRichTbHpdEnvelopeTubeLVol(); - if( RichTbHpdENVCAP_LV != 0 ) { + if (RichTbHpdENV_LV != 0) { - if( RichTbHpdENVCAP_vis == 0 ){ - RichTbHpdENVCAP_LV -> SetVisAttributes(G4VisAttributes::Invisible); - } else { + if (RichTbHpdENV_vis == 0) { + RichTbHpdENV_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { - G4VisAttributes * RichTbHpdENVCAP_LogVisAtt = - new G4VisAttributes(G4Colour(0.2,0.2,0.5)); - if( RichTbHpdENVCAP_vis == 2 ) { - RichTbHpdENVCAP_LogVisAtt -> SetForceSolid(false); - RichTbHpdENVCAP_LogVisAtt -> SetForceWireframe(true); - } - if( RichTbHpdENVCAP_vis == 1 ) { - RichTbHpdENVCAP_LogVisAtt -> SetForceSolid(true); - } - RichTbHpdENVCAP_LogVisAtt ->SetVisibility(true); - RichTbHpdENVCAP_LV -> SetVisAttributes(RichTbHpdENVCAP_LogVisAtt); + G4VisAttributes *RichTbHpdENV_LogVisAtt = new G4VisAttributes(G4Colour(0.2, 0.2, 0.5)); + if (RichTbHpdENV_vis == 2) { + RichTbHpdENV_LogVisAtt->SetForceSolid(false); + RichTbHpdENV_LogVisAtt->SetForceWireframe(true); + } + if (RichTbHpdENV_vis == 1) { + RichTbHpdENV_LogVisAtt->SetForceSolid(true); + } + RichTbHpdENV_LogVisAtt->SetVisibility(true); + RichTbHpdENV_LV->SetVisAttributes(RichTbHpdENV_LogVisAtt); + } + } + } + G4int RichTbHpdENVCAP_vis = aRunConfig->getRichTbHpdENVCAP_visib(); + if ((curDetector != 0) && (curDetector->getRichTbHpd() != 0)) { - } + G4cout << "now setting HPD Envelope endcap visib options " << RichTbHpdENVCAP_vis << G4endl; - } + G4LogicalVolume *RichTbHpdENVCAP_LV = curDetector->getRichTbHpd()->getRichTbHpdEnvelopeEndCapLVol(); - } + if (RichTbHpdENVCAP_LV != 0) { + if (RichTbHpdENVCAP_vis == 0) { + RichTbHpdENVCAP_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { - G4int RichTbHpdSM_vis = aRunConfig->getRichTbHpdSM_visib(); - if( (curDetector != 0) && (curDetector-> getRichTbHpd() != 0 ) ) { + G4VisAttributes *RichTbHpdENVCAP_LogVisAtt = new G4VisAttributes(G4Colour(0.2, 0.2, 0.5)); + if (RichTbHpdENVCAP_vis == 2) { + RichTbHpdENVCAP_LogVisAtt->SetForceSolid(false); + RichTbHpdENVCAP_LogVisAtt->SetForceWireframe(true); + } + if (RichTbHpdENVCAP_vis == 1) { + RichTbHpdENVCAP_LogVisAtt->SetForceSolid(true); + } + RichTbHpdENVCAP_LogVisAtt->SetVisibility(true); + RichTbHpdENVCAP_LV->SetVisAttributes(RichTbHpdENVCAP_LogVisAtt); + } + } + } - G4cout<<"now setting HPD Smaster visib options "<< RichTbHpdSM_vis <<G4endl; + G4int RichTbHpdSM_vis = aRunConfig->getRichTbHpdSM_visib(); + if ((curDetector != 0) && (curDetector->getRichTbHpd() != 0)) { - G4LogicalVolume * RichTbHpdSM_LV =curDetector->getRichTbHpd()-> getRichTbHpdSMasterLVol (); + G4cout << "now setting HPD Smaster visib options " << RichTbHpdSM_vis << G4endl; - if( RichTbHpdSM_LV != 0 ) { + G4LogicalVolume *RichTbHpdSM_LV = curDetector->getRichTbHpd()->getRichTbHpdSMasterLVol(); - if( RichTbHpdSM_vis == 0 ){ - RichTbHpdSM_LV -> SetVisAttributes(G4VisAttributes::Invisible); - } else { + if (RichTbHpdSM_LV != 0) { - G4VisAttributes * RichTbHpdSM_LogVisAtt = - new G4VisAttributes(G4Colour(0.7,0.4,0.1)); - if( RichTbHpdSM_vis == 2 ) { - RichTbHpdSM_LogVisAtt -> SetForceSolid(false); - RichTbHpdSM_LogVisAtt -> SetForceWireframe(true); - } - if( RichTbHpdSM_vis == 1 ) { - RichTbHpdSM_LogVisAtt -> SetForceSolid(true); - } - RichTbHpdSM_LogVisAtt ->SetVisibility(true); - RichTbHpdSM_LV -> SetVisAttributes(RichTbHpdSM_LogVisAtt); + if (RichTbHpdSM_vis == 0) { + RichTbHpdSM_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes *RichTbHpdSM_LogVisAtt = new G4VisAttributes(G4Colour(0.7, 0.4, 0.1)); + if (RichTbHpdSM_vis == 2) { + RichTbHpdSM_LogVisAtt->SetForceSolid(false); + RichTbHpdSM_LogVisAtt->SetForceWireframe(true); + } + if (RichTbHpdSM_vis == 1) { + RichTbHpdSM_LogVisAtt->SetForceSolid(true); + } + RichTbHpdSM_LogVisAtt->SetVisibility(true); + RichTbHpdSM_LV->SetVisAttributes(RichTbHpdSM_LogVisAtt); + } + } + } - } + G4int RichTbHpdMas_vis = aRunConfig->getRichTbHpdMas_visib(); + if ((curDetector != 0) && (curDetector->getRichTbHpd() != 0)) { - } + G4cout << "now setting HPD master visib options " << RichTbHpdMas_vis << G4endl; - } + G4LogicalVolume *RichTbHpdMas_LV = curDetector->getRichTbHpd()->getRichTbHpdMasterLVol(); - G4int RichTbHpdMas_vis = aRunConfig->getRichTbHpdMas_visib(); - if( (curDetector != 0) && (curDetector-> getRichTbHpd() != 0 ) ) { + if (RichTbHpdMas_LV != 0) { - G4cout<<"now setting HPD master visib options "<< RichTbHpdMas_vis <<G4endl; + if (RichTbHpdMas_vis == 0) { + RichTbHpdMas_LV->SetVisAttributes(G4VisAttributes::Invisible); + } else { - G4LogicalVolume * RichTbHpdMas_LV =curDetector->getRichTbHpd()-> getRichTbHpdMasterLVol (); + G4VisAttributes *RichTbHpdMas_LogVisAtt = new G4VisAttributes(G4Colour(0.3, 0.7, 0.5)); + if (RichTbHpdMas_vis == 2) { + RichTbHpdMas_LogVisAtt->SetForceSolid(false); + RichTbHpdMas_LogVisAtt->SetForceWireframe(true); + } + if (RichTbHpdMas_vis == 1) { + RichTbHpdMas_LogVisAtt->SetForceSolid(true); + } + RichTbHpdMas_LogVisAtt->SetVisibility(true); + RichTbHpdMas_LV->SetVisAttributes(RichTbHpdMas_LogVisAtt); + } + } + } - if( RichTbHpdMas_LV != 0 ) { + G4int RichTbHpdPix_vis = aRunConfig->getRichTbHpdSiPix_visib(); + if (RichTbHpdPix_vis > 5) { - if( RichTbHpdMas_vis == 0 ){ - RichTbHpdMas_LV -> SetVisAttributes(G4VisAttributes::Invisible); - } else { + if ((curDetector != 0) && (curDetector->getRichTbHpd() != 0)) { - G4VisAttributes * RichTbHpdMas_LogVisAtt = - new G4VisAttributes(G4Colour(0.3,0.7,0.5)); - if( RichTbHpdMas_vis == 2 ) { - RichTbHpdMas_LogVisAtt -> SetForceSolid(false); - RichTbHpdMas_LogVisAtt -> SetForceWireframe(true); - } - if( RichTbHpdMas_vis == 1 ) { - RichTbHpdMas_LogVisAtt -> SetForceSolid(true); - } - RichTbHpdMas_LogVisAtt ->SetVisibility(true); - RichTbHpdMas_LV -> SetVisAttributes(RichTbHpdMas_LogVisAtt); + G4cout << "now setting HPD si pixel visib options " << RichTbHpdPix_vis << G4endl; + G4LogicalVolume *RichTbHpdPix_LV = curDetector->getRichTbHpd()->getRichTbSiPixelLVol(); + if (RichTbHpdPix_vis == 10) { - } + RichTbHpdPix_LV->SetVisAttributes(G4VisAttributes::Invisible); - } + } else { - } + G4VisAttributes *RichTbHpdPix_LogVisAtt = new G4VisAttributes(G4Colour(0.2, 0.4, 0.7)); + if (RichTbHpdPix_vis == 12) { + RichTbHpdPix_LogVisAtt->SetForceSolid(false); + RichTbHpdPix_LogVisAtt->SetForceWireframe(true); + } + if (RichTbHpdPix_vis == 11) { + RichTbHpdPix_LogVisAtt->SetForceSolid(true); + } + RichTbHpdPix_LogVisAtt->SetVisibility(true); + RichTbHpdPix_LV->SetVisAttributes(RichTbHpdPix_LogVisAtt); + } + } + } + } + // now the PMT1 ! - G4int RichTbHpdPix_vis = aRunConfig->getRichTbHpdSiPix_visib(); - if( RichTbHpdPix_vis > 5 ) { + // now for the PMTEnvelope - if( (curDetector != 0) && (curDetector-> getRichTbHpd() != 0 ) ) { + /* +G4int RichTbPMT1Envelope_vis = aRunConfig->getRichTbPMTEnvelope_visib(); +G4cout<<"PMT Envelope visib flag "<<RichTbPMT1Envelope_vis<<G4endl; - G4cout<<"now setting HPD si pixel visib options "<< RichTbHpdPix_vis <<G4endl; +if( (curDetector != 0) && (curDetector-> getRichTbPMT1() != 0)) +{ + G4cout<<"now setting pmt envelope visb options "<<RichTbPMT1Envelope_vis<<G4endl; + +G4LogicalVolume * RichTbPMTEnvelope_LV =curDetector-> + getRichTbPMT1()-> getRichTbPMTEnvelopeBoxLVol(); +G4cout<<"test PMT Envelope LV "<<RichTbPMTEnvelope_LV<<G4endl; +if(RichTbPMTEnvelope_LV != 0 ) { + if(RichTbPMT1Envelope_vis == 0 ) { + RichTbPMTEnvelope_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPMT1Envelope_LogVisAtt = + new G4VisAttributes(G4Colour(0.0,0.8,0.2)); + if(RichTbPMT1Envelope_vis == 2 ) { + RichTbPMT1Envelope_LogVisAtt ->SetForceSolid(false); + RichTbPMT1Envelope_LogVisAtt ->SetForceWireframe(true); + G4cout<<"test Hped Envelope vis "<<RichTbPMT1Envelope_vis<<G4endl; + } + if(RichTbPMT1Envelope_vis == 1 ) { + RichTbPMT1Envelope_LogVisAtt ->SetForceSolid(true); + } + RichTbPMT1Envelope_LogVisAtt->SetVisibility(true); + RichTbPMTEnvelope_LV -> SetVisAttributes(RichTbPMT1Envelope_LogVisAtt); - G4LogicalVolume * RichTbHpdPix_LV =curDetector->getRichTbHpd()-> getRichTbSiPixelLVol() ; - if( RichTbHpdPix_vis == 10 ) { + } - RichTbHpdPix_LV -> SetVisAttributes(G4VisAttributes::Invisible); +} - }else { +} - G4VisAttributes * RichTbHpdPix_LogVisAtt = - new G4VisAttributes(G4Colour(0.2,0.4,0.7)); +// now for the PMT window - if( RichTbHpdPix_vis == 12 ) { - RichTbHpdPix_LogVisAtt -> SetForceSolid(false); - RichTbHpdPix_LogVisAtt -> SetForceWireframe(true); - } - if( RichTbHpdPix_vis == 11 ) { - RichTbHpdPix_LogVisAtt -> SetForceSolid(true); - } - RichTbHpdPix_LogVisAtt ->SetVisibility(true); - RichTbHpdPix_LV -> SetVisAttributes( RichTbHpdPix_LogVisAtt ); +G4int RichTbPMT1QuartzW_vis = aRunConfig->getRichTbPMTQuartzW_visib(); +G4cout<<"PMT window visib flag "<<RichTbPMT1QuartzW_vis<<G4endl; +if( (curDetector != 0) && (curDetector-> getRichTbPMT1() != 0)) +{ + G4cout<<"now setting window visb options "<<RichTbPMT1QuartzW_vis<<G4endl; + +G4LogicalVolume * RichTbPMTQuartzW_LV =curDetector-> + getRichTbPMT1()-> getRichTbPMTQuartzWLVol(); +// G4cout<<"test PMT window LV "<<RichTbPMTQuartzW_LV<<G4endl; +if(RichTbPMTQuartzW_LV != 0 ) { + if(RichTbPMT1QuartzW_vis == 0 ) { + RichTbPMTQuartzW_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPMT1QuartzW_LogVisAtt = + new G4VisAttributes(G4Colour(0.2,0.0,0.8)); + if(RichTbPMT1QuartzW_vis == 2 ) { + RichTbPMT1QuartzW_LogVisAtt ->SetForceSolid(false); + RichTbPMT1QuartzW_LogVisAtt ->SetForceWireframe(true); + G4cout<<"test PMT window vis "<<RichTbPMT1QuartzW_vis<<G4endl; + } + if(RichTbPMT1QuartzW_vis == 1 ) { + RichTbPMT1QuartzW_LogVisAtt ->SetForceSolid(true); + } + RichTbPMT1QuartzW_LogVisAtt->SetVisibility(true); + RichTbPMTQuartzW_LV -> SetVisAttributes(RichTbPMT1QuartzW_LogVisAtt); - } - } - } - } + } +} +} +// now for the PMT photocathode +G4int RichTbPMT1Cathode_vis = aRunConfig->getRichTbPMTPhCathode_visib(); +G4cout<<"PMT cathod visib flag "<<RichTbPMT1Cathode_vis<<G4endl; +if( (curDetector != 0) && (curDetector-> getRichTbPMT1() != 0)) +{ + G4cout<<"now setting cathode visb options "<<RichTbPMT1Cathode_vis<<G4endl; + +G4LogicalVolume * RichTbPMTCathode_LV =curDetector-> + getRichTbPMT1()-> getRichTbPMTPhCathodeLVol(); +if(RichTbPMTCathode_LV != 0 ) { + if(RichTbPMT1Cathode_vis == 0 ) { + RichTbPMTCathode_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPMT1Cathode_LogVisAtt = + new G4VisAttributes(G4Colour(1.0,0.0,0.0)); + if(RichTbPMT1Cathode_vis == 2 ) { + RichTbPMT1Cathode_LogVisAtt ->SetForceSolid(false); + RichTbPMT1Cathode_LogVisAtt ->SetForceWireframe(true); + G4cout<<"test PMT photocathode vis "<<RichTbPMT1Cathode_vis<<G4endl; + } + if(RichTbPMT1Cathode_vis == 1 ) { + RichTbPMT1Cathode_LogVisAtt ->SetForceSolid(true); + } + RichTbPMT1Cathode_LogVisAtt->SetVisibility(true); + RichTbPMTCathode_LV -> SetVisAttributes(RichTbPMT1Cathode_LogVisAtt); + G4cout<<"prova prova "<<G4endl; + } +} +} +// now for the PMT anode +G4int RichTbPMT1Anode_vis = aRunConfig->getRichTbPMTAnode_visib(); +G4cout<<"PMT anod visib flag "<<RichTbPMT1Anode_vis<<G4endl; +if( (curDetector != 0) && (curDetector-> getRichTbPMT1() != 0)) +{ + G4cout<<"now setting cathode visb options "<<RichTbPMT1Anode_vis<<G4endl; + +G4LogicalVolume * RichTbPMTAnode_LV =curDetector-> + getRichTbPMT1()-> getRichTbPMTAnodeLVol(); +if(RichTbPMTAnode_LV != 0 ) { + if(RichTbPMT1Anode_vis == 0 ) { + RichTbPMTAnode_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPMT1Anode_LogVisAtt = + new G4VisAttributes(G4Colour(0.5,0.0,0.2)); + if(RichTbPMT1Anode_vis == 2 ) { + RichTbPMT1Anode_LogVisAtt ->SetForceSolid(false); + RichTbPMT1Anode_LogVisAtt ->SetForceWireframe(true); + G4cout<<"test PMT anode vis "<<RichTbPMT1Anode_vis<<G4endl; + } + if(RichTbPMT1Anode_vis == 1 ) { + RichTbPMT1Anode_LogVisAtt ->SetForceSolid(true); + } + RichTbPMT1Anode_LogVisAtt->SetVisibility(true); + RichTbPMTAnode_LV -> SetVisAttributes(RichTbPMT1Anode_LogVisAtt); - //now the PMT1 ! - // now for the PMTEnvelope + } - /* - G4int RichTbPMT1Envelope_vis = aRunConfig->getRichTbPMTEnvelope_visib(); - G4cout<<"PMT Envelope visib flag "<<RichTbPMT1Envelope_vis<<G4endl; +} - if( (curDetector != 0) && (curDetector-> getRichTbPMT1() != 0)) - { - G4cout<<"now setting pmt envelope visb options "<<RichTbPMT1Envelope_vis<<G4endl; +} - G4LogicalVolume * RichTbPMTEnvelope_LV =curDetector-> - getRichTbPMT1()-> getRichTbPMTEnvelopeBoxLVol(); - G4cout<<"test PMT Envelope LV "<<RichTbPMTEnvelope_LV<<G4endl; - if(RichTbPMTEnvelope_LV != 0 ) { - if(RichTbPMT1Envelope_vis == 0 ) { - RichTbPMTEnvelope_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMT1Envelope_LogVisAtt = - new G4VisAttributes(G4Colour(0.0,0.8,0.2)); - if(RichTbPMT1Envelope_vis == 2 ) { - RichTbPMT1Envelope_LogVisAtt ->SetForceSolid(false); - RichTbPMT1Envelope_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test Hped Envelope vis "<<RichTbPMT1Envelope_vis<<G4endl; - } - if(RichTbPMT1Envelope_vis == 1 ) { - RichTbPMT1Envelope_LogVisAtt ->SetForceSolid(true); - } - RichTbPMT1Envelope_LogVisAtt->SetVisibility(true); - RichTbPMTEnvelope_LV -> SetVisAttributes(RichTbPMT1Envelope_LogVisAtt); +//now the PMT2 ! - } +// now for the PMTEnvelope - } +G4int RichTbPMT2Envelope_vis = aRunConfig->getRichTbPMTEnvelope_visib(); +G4cout<<"PMT Envelope visib flag "<<RichTbPMT2Envelope_vis<<G4endl; +if( (curDetector != 0) && (curDetector-> getRichTbPMT2() != 0)) +{ + G4cout<<"now setting hpd envelope visb options "<<RichTbPMT2Envelope_vis<<G4endl; + +G4LogicalVolume * RichTbPMTEnvelope_LV =curDetector-> + getRichTbPMT2()-> getRichTbPMTEnvelopeBoxLVol(); +G4cout<<"test PMT Envelope LV "<<RichTbPMTEnvelope_LV<<G4endl; +if(RichTbPMTEnvelope_LV != 0 ) { + if(RichTbPMT2Envelope_vis == 0 ) { + RichTbPMTEnvelope_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPMT2Envelope_LogVisAtt = + new G4VisAttributes(G4Colour(0.0,0.8,0.2)); + if(RichTbPMT2Envelope_vis == 2 ) { + RichTbPMT2Envelope_LogVisAtt ->SetForceSolid(false); + RichTbPMT2Envelope_LogVisAtt ->SetForceWireframe(true); + G4cout<<"test Hped Envelope vis "<<RichTbPMT2Envelope_vis<<G4endl; } + if(RichTbPMT2Envelope_vis == 1 ) { + RichTbPMT2Envelope_LogVisAtt ->SetForceSolid(true); + } + RichTbPMT2Envelope_LogVisAtt->SetVisibility(true); + RichTbPMTEnvelope_LV -> SetVisAttributes(RichTbPMT2Envelope_LogVisAtt); -// now for the PMT window - - G4int RichTbPMT1QuartzW_vis = aRunConfig->getRichTbPMTQuartzW_visib(); - G4cout<<"PMT window visib flag "<<RichTbPMT1QuartzW_vis<<G4endl; + } - if( (curDetector != 0) && (curDetector-> getRichTbPMT1() != 0)) - { - G4cout<<"now setting window visb options "<<RichTbPMT1QuartzW_vis<<G4endl; +} - G4LogicalVolume * RichTbPMTQuartzW_LV =curDetector-> - getRichTbPMT1()-> getRichTbPMTQuartzWLVol(); - // G4cout<<"test PMT window LV "<<RichTbPMTQuartzW_LV<<G4endl; - if(RichTbPMTQuartzW_LV != 0 ) { - if(RichTbPMT1QuartzW_vis == 0 ) { - RichTbPMTQuartzW_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMT1QuartzW_LogVisAtt = - new G4VisAttributes(G4Colour(0.2,0.0,0.8)); - if(RichTbPMT1QuartzW_vis == 2 ) { - RichTbPMT1QuartzW_LogVisAtt ->SetForceSolid(false); - RichTbPMT1QuartzW_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test PMT window vis "<<RichTbPMT1QuartzW_vis<<G4endl; - } - if(RichTbPMT1QuartzW_vis == 1 ) { - RichTbPMT1QuartzW_LogVisAtt ->SetForceSolid(true); - } - RichTbPMT1QuartzW_LogVisAtt->SetVisibility(true); - RichTbPMTQuartzW_LV -> SetVisAttributes(RichTbPMT1QuartzW_LogVisAtt); +} - } +// now for the PMT window - } +G4int RichTbPMT2QuartzW_vis = aRunConfig->getRichTbPMTQuartzW_visib(); +G4cout<<"PMT window visib flag "<<RichTbPMT2QuartzW_vis<<G4endl; +if( (curDetector != 0) && (curDetector-> getRichTbPMT2() != 0)) +{ + G4cout<<"now setting window visb options "<<RichTbPMT2QuartzW_vis<<G4endl; + +G4LogicalVolume * RichTbPMTQuartzW_LV =curDetector-> + getRichTbPMT2()-> getRichTbPMTQuartzWLVol(); +G4cout<<"test PMT window LV "<<RichTbPMTQuartzW_LV<<G4endl; +if(RichTbPMTQuartzW_LV != 0 ) { + if(RichTbPMT2QuartzW_vis == 0 ) { + RichTbPMTQuartzW_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPMT2QuartzW_LogVisAtt = + new G4VisAttributes(G4Colour(0.2,0.0,0.8)); + if(RichTbPMT2QuartzW_vis == 2 ) { + RichTbPMT2QuartzW_LogVisAtt ->SetForceSolid(false); + RichTbPMT2QuartzW_LogVisAtt ->SetForceWireframe(true); + G4cout<<"test PMT window vis "<<RichTbPMT2QuartzW_vis<<G4endl; } + if(RichTbPMT2QuartzW_vis == 1 ) { + RichTbPMT2QuartzW_LogVisAtt ->SetForceSolid(true); + } + RichTbPMT2QuartzW_LogVisAtt->SetVisibility(true); + RichTbPMTQuartzW_LV -> SetVisAttributes(RichTbPMT2QuartzW_LogVisAtt); -// now for the PMT photocathode - - G4int RichTbPMT1Cathode_vis = aRunConfig->getRichTbPMTPhCathode_visib(); - G4cout<<"PMT cathod visib flag "<<RichTbPMT1Cathode_vis<<G4endl; + } - if( (curDetector != 0) && (curDetector-> getRichTbPMT1() != 0)) - { - G4cout<<"now setting cathode visb options "<<RichTbPMT1Cathode_vis<<G4endl; +} - G4LogicalVolume * RichTbPMTCathode_LV =curDetector-> - getRichTbPMT1()-> getRichTbPMTPhCathodeLVol(); - if(RichTbPMTCathode_LV != 0 ) { - if(RichTbPMT1Cathode_vis == 0 ) { - RichTbPMTCathode_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMT1Cathode_LogVisAtt = - new G4VisAttributes(G4Colour(1.0,0.0,0.0)); - if(RichTbPMT1Cathode_vis == 2 ) { - RichTbPMT1Cathode_LogVisAtt ->SetForceSolid(false); - RichTbPMT1Cathode_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test PMT photocathode vis "<<RichTbPMT1Cathode_vis<<G4endl; - } - if(RichTbPMT1Cathode_vis == 1 ) { - RichTbPMT1Cathode_LogVisAtt ->SetForceSolid(true); - } - RichTbPMT1Cathode_LogVisAtt->SetVisibility(true); - RichTbPMTCathode_LV -> SetVisAttributes(RichTbPMT1Cathode_LogVisAtt); - G4cout<<"prova prova "<<G4endl; +} - } +// now for the PMT photocathode - } +G4int RichTbPMT2Cathode_vis = aRunConfig->getRichTbPMTPhCathode_visib(); +G4cout<<"PMT cathod visib flag "<<RichTbPMT2Cathode_vis<<G4endl; +if( (curDetector != 0) && (curDetector-> getRichTbPMT2() != 0)) +{ + G4cout<<"now setting cathode visb options "<<RichTbPMT2Cathode_vis<<G4endl; + +G4LogicalVolume * RichTbPMTCathode_LV =curDetector-> + getRichTbPMT2()-> getRichTbPMTPhCathodeLVol(); +if(RichTbPMTCathode_LV != 0 ) { + if(RichTbPMT2Cathode_vis == 0 ) { + RichTbPMTCathode_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPMT2Cathode_LogVisAtt = + new G4VisAttributes(G4Colour(1.0,0.0,0.0)); + if(RichTbPMT2Cathode_vis == 2 ) { + RichTbPMT2Cathode_LogVisAtt ->SetForceSolid(false); + RichTbPMT2Cathode_LogVisAtt ->SetForceWireframe(true); + G4cout<<"test PMT photocathode vis "<<RichTbPMT2Cathode_vis<<G4endl; } + if(RichTbPMT2Cathode_vis == 1 ) { + RichTbPMT2Cathode_LogVisAtt ->SetForceSolid(true); + } + RichTbPMT2Cathode_LogVisAtt->SetVisibility(true); + RichTbPMTCathode_LV -> SetVisAttributes(RichTbPMT2Cathode_LogVisAtt); + G4cout<<"prova prova "<<G4endl; -// now for the PMT anode - - G4int RichTbPMT1Anode_vis = aRunConfig->getRichTbPMTAnode_visib(); - G4cout<<"PMT anod visib flag "<<RichTbPMT1Anode_vis<<G4endl; - - if( (curDetector != 0) && (curDetector-> getRichTbPMT1() != 0)) - { - G4cout<<"now setting cathode visb options "<<RichTbPMT1Anode_vis<<G4endl; + } - G4LogicalVolume * RichTbPMTAnode_LV =curDetector-> - getRichTbPMT1()-> getRichTbPMTAnodeLVol(); - if(RichTbPMTAnode_LV != 0 ) { - if(RichTbPMT1Anode_vis == 0 ) { - RichTbPMTAnode_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMT1Anode_LogVisAtt = - new G4VisAttributes(G4Colour(0.5,0.0,0.2)); - if(RichTbPMT1Anode_vis == 2 ) { - RichTbPMT1Anode_LogVisAtt ->SetForceSolid(false); - RichTbPMT1Anode_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test PMT anode vis "<<RichTbPMT1Anode_vis<<G4endl; - } - if(RichTbPMT1Anode_vis == 1 ) { - RichTbPMT1Anode_LogVisAtt ->SetForceSolid(true); - } - RichTbPMT1Anode_LogVisAtt->SetVisibility(true); - RichTbPMTAnode_LV -> SetVisAttributes(RichTbPMT1Anode_LogVisAtt); +} +} - } +// now for the PMT anode - } +G4int RichTbPMT2Anode_vis = aRunConfig->getRichTbPMTAnode_visib(); +G4cout<<"PMT anod visib flag "<<RichTbPMT2Anode_vis<<G4endl; +if( (curDetector != 0) && (curDetector-> getRichTbPMT2() != 0)) +{ + G4cout<<"now setting cathode visb options "<<RichTbPMT2Anode_vis<<G4endl; + +G4LogicalVolume * RichTbPMTAnode_LV =curDetector-> + getRichTbPMT2()-> getRichTbPMTAnodeLVol(); +if(RichTbPMTAnode_LV != 0 ) { + if(RichTbPMT2Anode_vis == 0 ) { + RichTbPMTAnode_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPMT2Anode_LogVisAtt = + new G4VisAttributes(G4Colour(0.5,0.0,0.2)); + if(RichTbPMT2Anode_vis == 2 ) { + RichTbPMT2Anode_LogVisAtt ->SetForceSolid(false); + RichTbPMT2Anode_LogVisAtt ->SetForceWireframe(true); + G4cout<<"test PMT anode vis "<<RichTbPMT2Anode_vis<<G4endl; } + if(RichTbPMT2Anode_vis == 1 ) { + RichTbPMT2Anode_LogVisAtt ->SetForceSolid(true); + } + RichTbPMT2Anode_LogVisAtt->SetVisibility(true); + RichTbPMTAnode_LV -> SetVisAttributes(RichTbPMT2Anode_LogVisAtt); + G4cout<<"prova prova "<<G4endl; - //now the PMT2 ! - - // now for the PMTEnvelope + } - G4int RichTbPMT2Envelope_vis = aRunConfig->getRichTbPMTEnvelope_visib(); - G4cout<<"PMT Envelope visib flag "<<RichTbPMT2Envelope_vis<<G4endl; +} - if( (curDetector != 0) && (curDetector-> getRichTbPMT2() != 0)) - { - G4cout<<"now setting hpd envelope visb options "<<RichTbPMT2Envelope_vis<<G4endl; +} - G4LogicalVolume * RichTbPMTEnvelope_LV =curDetector-> - getRichTbPMT2()-> getRichTbPMTEnvelopeBoxLVol(); - G4cout<<"test PMT Envelope LV "<<RichTbPMTEnvelope_LV<<G4endl; - if(RichTbPMTEnvelope_LV != 0 ) { - if(RichTbPMT2Envelope_vis == 0 ) { - RichTbPMTEnvelope_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMT2Envelope_LogVisAtt = - new G4VisAttributes(G4Colour(0.0,0.8,0.2)); - if(RichTbPMT2Envelope_vis == 2 ) { - RichTbPMT2Envelope_LogVisAtt ->SetForceSolid(false); - RichTbPMT2Envelope_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test Hped Envelope vis "<<RichTbPMT2Envelope_vis<<G4endl; - } - if(RichTbPMT2Envelope_vis == 1 ) { - RichTbPMT2Envelope_LogVisAtt ->SetForceSolid(true); - } - RichTbPMT2Envelope_LogVisAtt->SetVisibility(true); - RichTbPMTEnvelope_LV -> SetVisAttributes(RichTbPMT2Envelope_LogVisAtt); +//now the PMT 3 ! - } +// now for the PMTEnvelope - } +G4int RichTbPMT3Envelope_vis = aRunConfig->getRichTbPMTEnvelope_visib(); +G4cout<<"PMT Envelope visib flag "<<RichTbPMT3Envelope_vis<<G4endl; +if( (curDetector != 0) && (curDetector-> getRichTbPMT3() != 0)) +{ + G4cout<<"now setting hpd envelope visb options "<<RichTbPMT3Envelope_vis<<G4endl; + +G4LogicalVolume * RichTbPMTEnvelope_LV =curDetector-> + getRichTbPMT3()-> getRichTbPMTEnvelopeBoxLVol(); +G4cout<<"test PMT Envelope LV "<<RichTbPMTEnvelope_LV<<G4endl; +if(RichTbPMTEnvelope_LV != 0 ) { + if(RichTbPMT3Envelope_vis == 0 ) { + RichTbPMTEnvelope_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPMT3Envelope_LogVisAtt = + new G4VisAttributes(G4Colour(0.0,0.8,0.2)); + if(RichTbPMT3Envelope_vis == 2 ) { + RichTbPMT3Envelope_LogVisAtt ->SetForceSolid(false); + RichTbPMT3Envelope_LogVisAtt ->SetForceWireframe(true); + G4cout<<"test Hped Envelope vis "<<RichTbPMT3Envelope_vis<<G4endl; } + if(RichTbPMT3Envelope_vis == 1 ) { + RichTbPMT3Envelope_LogVisAtt ->SetForceSolid(true); + } + RichTbPMT3Envelope_LogVisAtt->SetVisibility(true); + RichTbPMTEnvelope_LV -> SetVisAttributes(RichTbPMT3Envelope_LogVisAtt); -// now for the PMT window - - G4int RichTbPMT2QuartzW_vis = aRunConfig->getRichTbPMTQuartzW_visib(); - G4cout<<"PMT window visib flag "<<RichTbPMT2QuartzW_vis<<G4endl; + } - if( (curDetector != 0) && (curDetector-> getRichTbPMT2() != 0)) - { - G4cout<<"now setting window visb options "<<RichTbPMT2QuartzW_vis<<G4endl; +} - G4LogicalVolume * RichTbPMTQuartzW_LV =curDetector-> - getRichTbPMT2()-> getRichTbPMTQuartzWLVol(); - G4cout<<"test PMT window LV "<<RichTbPMTQuartzW_LV<<G4endl; - if(RichTbPMTQuartzW_LV != 0 ) { - if(RichTbPMT2QuartzW_vis == 0 ) { - RichTbPMTQuartzW_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMT2QuartzW_LogVisAtt = - new G4VisAttributes(G4Colour(0.2,0.0,0.8)); - if(RichTbPMT2QuartzW_vis == 2 ) { - RichTbPMT2QuartzW_LogVisAtt ->SetForceSolid(false); - RichTbPMT2QuartzW_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test PMT window vis "<<RichTbPMT2QuartzW_vis<<G4endl; - } - if(RichTbPMT2QuartzW_vis == 1 ) { - RichTbPMT2QuartzW_LogVisAtt ->SetForceSolid(true); - } - RichTbPMT2QuartzW_LogVisAtt->SetVisibility(true); - RichTbPMTQuartzW_LV -> SetVisAttributes(RichTbPMT2QuartzW_LogVisAtt); +} - } +// now for the PMT window - } +G4int RichTbPMT3QuartzW_vis = aRunConfig->getRichTbPMTQuartzW_visib(); +G4cout<<"PMT window visib flag "<<RichTbPMT3QuartzW_vis<<G4endl; +if( (curDetector != 0) && (curDetector-> getRichTbPMT3() != 0)) +{ + G4cout<<"now setting window visb options "<<RichTbPMT3QuartzW_vis<<G4endl; + +G4LogicalVolume * RichTbPMTQuartzW_LV =curDetector-> + getRichTbPMT3()-> getRichTbPMTQuartzWLVol(); +// G4cout<<"test PMT window LV "<<RichTbPMTQuartzW_LV<<G4endl; +if(RichTbPMTQuartzW_LV != 0 ) { + if(RichTbPMT3QuartzW_vis == 0 ) { + RichTbPMTQuartzW_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPMT3QuartzW_LogVisAtt = + new G4VisAttributes(G4Colour(0.2,0.0,0.8)); + if(RichTbPMT3QuartzW_vis == 2 ) { + RichTbPMT3QuartzW_LogVisAtt ->SetForceSolid(false); + RichTbPMT3QuartzW_LogVisAtt ->SetForceWireframe(true); + G4cout<<"test PMT window vis "<<RichTbPMT3QuartzW_vis<<G4endl; } + if(RichTbPMT3QuartzW_vis == 1 ) { + RichTbPMT3QuartzW_LogVisAtt ->SetForceSolid(true); + } + RichTbPMT3QuartzW_LogVisAtt->SetVisibility(true); + RichTbPMTQuartzW_LV -> SetVisAttributes(RichTbPMT3QuartzW_LogVisAtt); -// now for the PMT photocathode - - G4int RichTbPMT2Cathode_vis = aRunConfig->getRichTbPMTPhCathode_visib(); - G4cout<<"PMT cathod visib flag "<<RichTbPMT2Cathode_vis<<G4endl; + } - if( (curDetector != 0) && (curDetector-> getRichTbPMT2() != 0)) - { - G4cout<<"now setting cathode visb options "<<RichTbPMT2Cathode_vis<<G4endl; +} - G4LogicalVolume * RichTbPMTCathode_LV =curDetector-> - getRichTbPMT2()-> getRichTbPMTPhCathodeLVol(); - if(RichTbPMTCathode_LV != 0 ) { - if(RichTbPMT2Cathode_vis == 0 ) { - RichTbPMTCathode_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMT2Cathode_LogVisAtt = - new G4VisAttributes(G4Colour(1.0,0.0,0.0)); - if(RichTbPMT2Cathode_vis == 2 ) { - RichTbPMT2Cathode_LogVisAtt ->SetForceSolid(false); - RichTbPMT2Cathode_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test PMT photocathode vis "<<RichTbPMT2Cathode_vis<<G4endl; - } - if(RichTbPMT2Cathode_vis == 1 ) { - RichTbPMT2Cathode_LogVisAtt ->SetForceSolid(true); - } - RichTbPMT2Cathode_LogVisAtt->SetVisibility(true); - RichTbPMTCathode_LV -> SetVisAttributes(RichTbPMT2Cathode_LogVisAtt); - G4cout<<"prova prova "<<G4endl; +} - } +// now for the PMT photocathode - } +G4int RichTbPMT3Cathode_vis = aRunConfig->getRichTbPMTPhCathode_visib(); +G4cout<<"PMT cathod visib flag "<<RichTbPMT3Cathode_vis<<G4endl; +if( (curDetector != 0) && (curDetector-> getRichTbPMT3() != 0)) +{ + G4cout<<"now setting cathode visb options "<<RichTbPMT3Cathode_vis<<G4endl; + +G4LogicalVolume * RichTbPMTCathode_LV =curDetector-> + getRichTbPMT3()-> getRichTbPMTPhCathodeLVol(); +if(RichTbPMTCathode_LV != 0 ) { + if(RichTbPMT3Cathode_vis == 0 ) { + RichTbPMTCathode_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPMT3Cathode_LogVisAtt = + new G4VisAttributes(G4Colour(1.0,0.0,0.0)); + if(RichTbPMT3Cathode_vis == 2 ) { + RichTbPMT3Cathode_LogVisAtt ->SetForceSolid(false); + RichTbPMT3Cathode_LogVisAtt ->SetForceWireframe(true); + G4cout<<"test PMT photocathode vis "<<RichTbPMT3Cathode_vis<<G4endl; } + if(RichTbPMT3Cathode_vis == 1 ) { + RichTbPMT3Cathode_LogVisAtt ->SetForceSolid(true); + } + RichTbPMT3Cathode_LogVisAtt->SetVisibility(true); + RichTbPMTCathode_LV -> SetVisAttributes(RichTbPMT3Cathode_LogVisAtt); -// now for the PMT anode - G4int RichTbPMT2Anode_vis = aRunConfig->getRichTbPMTAnode_visib(); - G4cout<<"PMT anod visib flag "<<RichTbPMT2Anode_vis<<G4endl; + } - if( (curDetector != 0) && (curDetector-> getRichTbPMT2() != 0)) - { - G4cout<<"now setting cathode visb options "<<RichTbPMT2Anode_vis<<G4endl; +} - G4LogicalVolume * RichTbPMTAnode_LV =curDetector-> - getRichTbPMT2()-> getRichTbPMTAnodeLVol(); - if(RichTbPMTAnode_LV != 0 ) { - if(RichTbPMT2Anode_vis == 0 ) { - RichTbPMTAnode_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMT2Anode_LogVisAtt = - new G4VisAttributes(G4Colour(0.5,0.0,0.2)); - if(RichTbPMT2Anode_vis == 2 ) { - RichTbPMT2Anode_LogVisAtt ->SetForceSolid(false); - RichTbPMT2Anode_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test PMT anode vis "<<RichTbPMT2Anode_vis<<G4endl; - } - if(RichTbPMT2Anode_vis == 1 ) { - RichTbPMT2Anode_LogVisAtt ->SetForceSolid(true); - } - RichTbPMT2Anode_LogVisAtt->SetVisibility(true); - RichTbPMTAnode_LV -> SetVisAttributes(RichTbPMT2Anode_LogVisAtt); - G4cout<<"prova prova "<<G4endl; +} - } +// now for the PMT anode - } +G4int RichTbPMT3Anode_vis = aRunConfig->getRichTbPMTAnode_visib(); +G4cout<<"PMT anod visib flag "<<RichTbPMT3Anode_vis<<G4endl; +if( (curDetector != 0) && (curDetector-> getRichTbPMT3() != 0)) +{ + G4cout<<"now setting cathode visb options "<<RichTbPMT3Anode_vis<<G4endl; + +G4LogicalVolume * RichTbPMTAnode_LV =curDetector-> + getRichTbPMT3()-> getRichTbPMTAnodeLVol(); +if(RichTbPMTAnode_LV != 0 ) { + if(RichTbPMT3Anode_vis == 0 ) { + RichTbPMTAnode_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPMT3Anode_LogVisAtt = + new G4VisAttributes(G4Colour(0.5,0.0,0.2)); + if(RichTbPMT3Anode_vis == 2 ) { + RichTbPMT3Anode_LogVisAtt ->SetForceSolid(false); + RichTbPMT3Anode_LogVisAtt ->SetForceWireframe(true); + G4cout<<"test PMT anode vis "<<RichTbPMT3Anode_vis<<G4endl; } + if(RichTbPMT3Anode_vis == 1 ) { + RichTbPMT3Anode_LogVisAtt ->SetForceSolid(true); + } + RichTbPMT3Anode_LogVisAtt->SetVisibility(true); + RichTbPMTAnode_LV -> SetVisAttributes(RichTbPMT3Anode_LogVisAtt); - //now the PMT 3 ! + } - // now for the PMTEnvelope +} - G4int RichTbPMT3Envelope_vis = aRunConfig->getRichTbPMTEnvelope_visib(); - G4cout<<"PMT Envelope visib flag "<<RichTbPMT3Envelope_vis<<G4endl; +} - if( (curDetector != 0) && (curDetector-> getRichTbPMT3() != 0)) - { - G4cout<<"now setting hpd envelope visb options "<<RichTbPMT3Envelope_vis<<G4endl; +//now the PMT4 ! - G4LogicalVolume * RichTbPMTEnvelope_LV =curDetector-> - getRichTbPMT3()-> getRichTbPMTEnvelopeBoxLVol(); - G4cout<<"test PMT Envelope LV "<<RichTbPMTEnvelope_LV<<G4endl; - if(RichTbPMTEnvelope_LV != 0 ) { - if(RichTbPMT3Envelope_vis == 0 ) { - RichTbPMTEnvelope_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMT3Envelope_LogVisAtt = - new G4VisAttributes(G4Colour(0.0,0.8,0.2)); - if(RichTbPMT3Envelope_vis == 2 ) { - RichTbPMT3Envelope_LogVisAtt ->SetForceSolid(false); - RichTbPMT3Envelope_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test Hped Envelope vis "<<RichTbPMT3Envelope_vis<<G4endl; - } - if(RichTbPMT3Envelope_vis == 1 ) { - RichTbPMT3Envelope_LogVisAtt ->SetForceSolid(true); - } - RichTbPMT3Envelope_LogVisAtt->SetVisibility(true); - RichTbPMTEnvelope_LV -> SetVisAttributes(RichTbPMT3Envelope_LogVisAtt); - - } +// now for the PMTEnvelope - } +G4int RichTbPMT4Envelope_vis = aRunConfig->getRichTbPMTEnvelope_visib(); +G4cout<<"PMT Envelope visib flag "<<RichTbPMT4Envelope_vis<<G4endl; +if( (curDetector != 0) && (curDetector-> getRichTbPMT4() != 0)) +{ + G4cout<<"now setting hpd envelope visb options "<<RichTbPMT4Envelope_vis<<G4endl; + +G4LogicalVolume * RichTbPMTEnvelope_LV =curDetector-> + getRichTbPMT4()-> getRichTbPMTEnvelopeBoxLVol(); +G4cout<<"test PMT Envelope LV "<<RichTbPMTEnvelope_LV<<G4endl; +if(RichTbPMTEnvelope_LV != 0 ) { + if(RichTbPMT4Envelope_vis == 0 ) { + RichTbPMTEnvelope_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPMT4Envelope_LogVisAtt = + new G4VisAttributes(G4Colour(0.0,0.8,0.2)); + if(RichTbPMT4Envelope_vis == 2 ) { + RichTbPMT4Envelope_LogVisAtt ->SetForceSolid(false); + RichTbPMT4Envelope_LogVisAtt ->SetForceWireframe(true); + G4cout<<"test Hped Envelope vis "<<RichTbPMT4Envelope_vis<<G4endl; } + if(RichTbPMT4Envelope_vis == 1 ) { + RichTbPMT4Envelope_LogVisAtt ->SetForceSolid(true); + } + RichTbPMT4Envelope_LogVisAtt->SetVisibility(true); + RichTbPMTEnvelope_LV -> SetVisAttributes(RichTbPMT4Envelope_LogVisAtt); -// now for the PMT window - - G4int RichTbPMT3QuartzW_vis = aRunConfig->getRichTbPMTQuartzW_visib(); - G4cout<<"PMT window visib flag "<<RichTbPMT3QuartzW_vis<<G4endl; + } - if( (curDetector != 0) && (curDetector-> getRichTbPMT3() != 0)) - { - G4cout<<"now setting window visb options "<<RichTbPMT3QuartzW_vis<<G4endl; +} - G4LogicalVolume * RichTbPMTQuartzW_LV =curDetector-> - getRichTbPMT3()-> getRichTbPMTQuartzWLVol(); - // G4cout<<"test PMT window LV "<<RichTbPMTQuartzW_LV<<G4endl; - if(RichTbPMTQuartzW_LV != 0 ) { - if(RichTbPMT3QuartzW_vis == 0 ) { - RichTbPMTQuartzW_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMT3QuartzW_LogVisAtt = - new G4VisAttributes(G4Colour(0.2,0.0,0.8)); - if(RichTbPMT3QuartzW_vis == 2 ) { - RichTbPMT3QuartzW_LogVisAtt ->SetForceSolid(false); - RichTbPMT3QuartzW_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test PMT window vis "<<RichTbPMT3QuartzW_vis<<G4endl; - } - if(RichTbPMT3QuartzW_vis == 1 ) { - RichTbPMT3QuartzW_LogVisAtt ->SetForceSolid(true); - } - RichTbPMT3QuartzW_LogVisAtt->SetVisibility(true); - RichTbPMTQuartzW_LV -> SetVisAttributes(RichTbPMT3QuartzW_LogVisAtt); +} - } +// now for the PMT window - } +G4int RichTbPMT4QuartzW_vis = aRunConfig->getRichTbPMTQuartzW_visib(); +G4cout<<"PMT window visib flag "<<RichTbPMT4QuartzW_vis<<G4endl; +if( (curDetector != 0) && (curDetector-> getRichTbPMT4() != 0)) +{ + G4cout<<"now setting window visb options "<<RichTbPMT4QuartzW_vis<<G4endl; + +G4LogicalVolume * RichTbPMTQuartzW_LV =curDetector-> + getRichTbPMT4()-> getRichTbPMTQuartzWLVol(); +G4cout<<"test PMT window LV "<<RichTbPMTQuartzW_LV<<G4endl; +if(RichTbPMTQuartzW_LV != 0 ) { + if(RichTbPMT4QuartzW_vis == 0 ) { + RichTbPMTQuartzW_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPMT4QuartzW_LogVisAtt = + new G4VisAttributes(G4Colour(0.2,0.0,0.8)); + if(RichTbPMT4QuartzW_vis == 2 ) { + RichTbPMT4QuartzW_LogVisAtt ->SetForceSolid(false); + RichTbPMT4QuartzW_LogVisAtt ->SetForceWireframe(true); + G4cout<<"test PMT window vis "<<RichTbPMT4QuartzW_vis<<G4endl; } + if(RichTbPMT4QuartzW_vis == 1 ) { + RichTbPMT4QuartzW_LogVisAtt ->SetForceSolid(true); + } + RichTbPMT4QuartzW_LogVisAtt->SetVisibility(true); + RichTbPMTQuartzW_LV -> SetVisAttributes(RichTbPMT4QuartzW_LogVisAtt); -// now for the PMT photocathode - - G4int RichTbPMT3Cathode_vis = aRunConfig->getRichTbPMTPhCathode_visib(); - G4cout<<"PMT cathod visib flag "<<RichTbPMT3Cathode_vis<<G4endl; - - if( (curDetector != 0) && (curDetector-> getRichTbPMT3() != 0)) - { - G4cout<<"now setting cathode visb options "<<RichTbPMT3Cathode_vis<<G4endl; + } - G4LogicalVolume * RichTbPMTCathode_LV =curDetector-> - getRichTbPMT3()-> getRichTbPMTPhCathodeLVol(); - if(RichTbPMTCathode_LV != 0 ) { - if(RichTbPMT3Cathode_vis == 0 ) { - RichTbPMTCathode_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMT3Cathode_LogVisAtt = - new G4VisAttributes(G4Colour(1.0,0.0,0.0)); - if(RichTbPMT3Cathode_vis == 2 ) { - RichTbPMT3Cathode_LogVisAtt ->SetForceSolid(false); - RichTbPMT3Cathode_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test PMT photocathode vis "<<RichTbPMT3Cathode_vis<<G4endl; - } - if(RichTbPMT3Cathode_vis == 1 ) { - RichTbPMT3Cathode_LogVisAtt ->SetForceSolid(true); - } - RichTbPMT3Cathode_LogVisAtt->SetVisibility(true); - RichTbPMTCathode_LV -> SetVisAttributes(RichTbPMT3Cathode_LogVisAtt); +} +} - } +// now for the PMT photocathode - } +G4int RichTbPMT4Cathode_vis = aRunConfig->getRichTbPMTPhCathode_visib(); +G4cout<<"PMT cathod visib flag "<<RichTbPMT4Cathode_vis<<G4endl; +if( (curDetector != 0) && (curDetector-> getRichTbPMT4() != 0)) +{ + G4cout<<"now setting cathode visb options "<<RichTbPMT4Cathode_vis<<G4endl; + +G4LogicalVolume * RichTbPMTCathode_LV =curDetector-> + getRichTbPMT4()-> getRichTbPMTPhCathodeLVol(); +if(RichTbPMTCathode_LV != 0 ) { + if(RichTbPMT4Cathode_vis == 0 ) { + RichTbPMTCathode_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPMT4Cathode_LogVisAtt = + new G4VisAttributes(G4Colour(1.0,0.0,0.0)); + if(RichTbPMT4Cathode_vis == 2 ) { + RichTbPMT4Cathode_LogVisAtt ->SetForceSolid(false); + RichTbPMT4Cathode_LogVisAtt ->SetForceWireframe(true); + G4cout<<"test PMT photocathode vis "<<RichTbPMT4Cathode_vis<<G4endl; } + if(RichTbPMT4Cathode_vis == 1 ) { + RichTbPMT4Cathode_LogVisAtt ->SetForceSolid(true); + } + RichTbPMT4Cathode_LogVisAtt->SetVisibility(true); + RichTbPMTCathode_LV -> SetVisAttributes(RichTbPMT4Cathode_LogVisAtt); + G4cout<<"prova prova "<<G4endl; -// now for the PMT anode - - G4int RichTbPMT3Anode_vis = aRunConfig->getRichTbPMTAnode_visib(); - G4cout<<"PMT anod visib flag "<<RichTbPMT3Anode_vis<<G4endl; + } - if( (curDetector != 0) && (curDetector-> getRichTbPMT3() != 0)) - { - G4cout<<"now setting cathode visb options "<<RichTbPMT3Anode_vis<<G4endl; +} - G4LogicalVolume * RichTbPMTAnode_LV =curDetector-> - getRichTbPMT3()-> getRichTbPMTAnodeLVol(); - if(RichTbPMTAnode_LV != 0 ) { - if(RichTbPMT3Anode_vis == 0 ) { - RichTbPMTAnode_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMT3Anode_LogVisAtt = - new G4VisAttributes(G4Colour(0.5,0.0,0.2)); - if(RichTbPMT3Anode_vis == 2 ) { - RichTbPMT3Anode_LogVisAtt ->SetForceSolid(false); - RichTbPMT3Anode_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test PMT anode vis "<<RichTbPMT3Anode_vis<<G4endl; - } - if(RichTbPMT3Anode_vis == 1 ) { - RichTbPMT3Anode_LogVisAtt ->SetForceSolid(true); - } - RichTbPMT3Anode_LogVisAtt->SetVisibility(true); - RichTbPMTAnode_LV -> SetVisAttributes(RichTbPMT3Anode_LogVisAtt); +} - } +// now for the PMT anode - } +G4int RichTbPMT4Anode_vis = aRunConfig->getRichTbPMTAnode_visib(); +G4cout<<"PMT anod visib flag "<<RichTbPMT4Anode_vis<<G4endl; +if( (curDetector != 0) && (curDetector-> getRichTbPMT4() != 0)) +{ + G4cout<<"now setting cathode visb options "<<RichTbPMT4Anode_vis<<G4endl; + +G4LogicalVolume * RichTbPMTAnode_LV =curDetector-> + getRichTbPMT4()-> getRichTbPMTAnodeLVol(); +if(RichTbPMTAnode_LV != 0 ) { + if(RichTbPMT4Anode_vis == 0 ) { + RichTbPMTAnode_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPMT4Anode_LogVisAtt = + new G4VisAttributes(G4Colour(0.5,0.0,0.2)); + if(RichTbPMT4Anode_vis == 2 ) { + RichTbPMT4Anode_LogVisAtt ->SetForceSolid(false); + RichTbPMT4Anode_LogVisAtt ->SetForceWireframe(true); + G4cout<<"test PMT anode vis "<<RichTbPMT4Anode_vis<<G4endl; + } + if(RichTbPMT4Anode_vis == 1 ) { + RichTbPMT4Anode_LogVisAtt ->SetForceSolid(true); } + RichTbPMT4Anode_LogVisAtt->SetVisibility(true); + RichTbPMTAnode_LV -> SetVisAttributes(RichTbPMT4Anode_LogVisAtt); - //now the PMT4 ! + } - // now for the PMTEnvelope +} - G4int RichTbPMT4Envelope_vis = aRunConfig->getRichTbPMTEnvelope_visib(); - G4cout<<"PMT Envelope visib flag "<<RichTbPMT4Envelope_vis<<G4endl; +} - if( (curDetector != 0) && (curDetector-> getRichTbPMT4() != 0)) - { - G4cout<<"now setting hpd envelope visb options "<<RichTbPMT4Envelope_vis<<G4endl; + */ - G4LogicalVolume * RichTbPMTEnvelope_LV =curDetector-> - getRichTbPMT4()-> getRichTbPMTEnvelopeBoxLVol(); - G4cout<<"test PMT Envelope LV "<<RichTbPMTEnvelope_LV<<G4endl; - if(RichTbPMTEnvelope_LV != 0 ) { - if(RichTbPMT4Envelope_vis == 0 ) { - RichTbPMTEnvelope_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMT4Envelope_LogVisAtt = - new G4VisAttributes(G4Colour(0.0,0.8,0.2)); - if(RichTbPMT4Envelope_vis == 2 ) { - RichTbPMT4Envelope_LogVisAtt ->SetForceSolid(false); - RichTbPMT4Envelope_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test Hped Envelope vis "<<RichTbPMT4Envelope_vis<<G4endl; - } - if(RichTbPMT4Envelope_vis == 1 ) { - RichTbPMT4Envelope_LogVisAtt ->SetForceSolid(true); - } - RichTbPMT4Envelope_LogVisAtt->SetVisibility(true); - RichTbPMTEnvelope_LV -> SetVisAttributes(RichTbPMT4Envelope_LogVisAtt); + // now for the PhDFrame + /* - } - - } +G4int RichTbPhDFrame_vis = aRunConfig->getRichTbPhDFrame_visib(); +if( (curDetector != 0) && (curDetector-> getRichTbPhDFrame() != 0)) +{ + G4cout<<"now setting PhDFrame visb options "<<RichTbPhDFrame_vis<<G4endl; + +G4LogicalVolume * RichTbPhDFrame_LV =curDetector-> + getRichTbPhDFrame()-> getRichTbPhDFrameLVol(); +if(RichTbPhDFrame_LV != 0 ) { + if(RichTbPhDFrame_vis == 0 ) { + RichTbPhDFrame_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } else { + G4VisAttributes * RichTbPhDFrame_LogVisAtt = + new G4VisAttributes(G4Colour(0.5,0.0,0.5)); + if(RichTbPhDFrame_vis == 2 ) { + RichTbPhDFrame_LogVisAtt ->SetForceSolid(false); + RichTbPhDFrame_LogVisAtt ->SetForceWireframe(true); + // G4cout<<"test crystal vis "<<RichTbCrystal_vis<<G4endl; } + if(RichTbPhDFrame_vis == 1 ) { + RichTbPhDFrame_LogVisAtt ->SetForceSolid(true); + } + RichTbPhDFrame_LogVisAtt->SetVisibility(true); + RichTbPhDFrame_LV -> SetVisAttributes(RichTbPhDFrame_LogVisAtt); -// now for the PMT window - - G4int RichTbPMT4QuartzW_vis = aRunConfig->getRichTbPMTQuartzW_visib(); - G4cout<<"PMT window visib flag "<<RichTbPMT4QuartzW_vis<<G4endl; - - if( (curDetector != 0) && (curDetector-> getRichTbPMT4() != 0)) - { - G4cout<<"now setting window visb options "<<RichTbPMT4QuartzW_vis<<G4endl; - - G4LogicalVolume * RichTbPMTQuartzW_LV =curDetector-> - getRichTbPMT4()-> getRichTbPMTQuartzWLVol(); - G4cout<<"test PMT window LV "<<RichTbPMTQuartzW_LV<<G4endl; - if(RichTbPMTQuartzW_LV != 0 ) { - if(RichTbPMT4QuartzW_vis == 0 ) { - RichTbPMTQuartzW_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMT4QuartzW_LogVisAtt = - new G4VisAttributes(G4Colour(0.2,0.0,0.8)); - if(RichTbPMT4QuartzW_vis == 2 ) { - RichTbPMT4QuartzW_LogVisAtt ->SetForceSolid(false); - RichTbPMT4QuartzW_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test PMT window vis "<<RichTbPMT4QuartzW_vis<<G4endl; - } - if(RichTbPMT4QuartzW_vis == 1 ) { - RichTbPMT4QuartzW_LogVisAtt ->SetForceSolid(true); - } - RichTbPMT4QuartzW_LogVisAtt->SetVisibility(true); - RichTbPMTQuartzW_LV -> SetVisAttributes(RichTbPMT4QuartzW_LogVisAtt); + } - } +} - } +} - } -// now for the PMT photocathode - G4int RichTbPMT4Cathode_vis = aRunConfig->getRichTbPMTPhCathode_visib(); - G4cout<<"PMT cathod visib flag "<<RichTbPMT4Cathode_vis<<G4endl; - if( (curDetector != 0) && (curDetector-> getRichTbPMT4() != 0)) - { - G4cout<<"now setting cathode visb options "<<RichTbPMT4Cathode_vis<<G4endl; + */ + /* +// Now for the Photdet sup frame and the HPDs + +G4int RichTbPhDet_vis=aRunConfig-> getRichTbPhDetSupFrame_visib(); +// G4int RichTbGasQuWin_vis=aRunConfig-> getRichTbGasQuWin_visib(); +//G4int RichTbPMTMaster_vis=aRunConfig-> getRichTbPMTMaster_visib(); +//G4int RichTbPMTSMaster_vis=aRunConfig-> getRichTbPMTSMaster_visib(); +//G4int RichTbPMTEnvelope_vis=aRunConfig-> getRichTbPMTEnvelope_visib(); +//G4int RichTbPMTEndCap_vis= aRunConfig->getRichTbPMTEndCap_visib(); +//G4int RichTbPMTQuartzW_vis= aRunConfig->getRichTbPMTQuartzW_visib(); +//G4int RichTbPMTPhCathode_vis=aRunConfig->getRichTbPMTPhCathode_visib(); +//G4int RichTbPMTSiDet_vis= aRunConfig-> getRichTbPMTSiDet_visib(); +if( (curDetector != 0) && (curDetector-> getRichTbPhDetSupFrame() != 0 )){ +RichTbPhDetSupFrame* aPhSupFrame = + curDetector-> getRichTbPhDetSupFrame(); +G4LogicalVolume * RichTbPhSubFrame_LV = + aPhSupFrame-> getRichTbPhDetSupFrameLVol() ; +if(RichTbPhSubFrame_LV != 0 ) { + + if( RichTbPhDet_vis == 0) { + RichTbPhSubFrame_LV ->SetVisAttributes(G4VisAttributes::Invisible); + + }else { + G4VisAttributes * RichTbPhSubFrame_LogVisAtt = + new G4VisAttributes(G4Colour(0.5,0.6,0.5)); + if(RichTbPhDet_vis == 2 ) { + RichTbPhSubFrame_LogVisAtt->SetForceSolid(false); + RichTbPhSubFrame_LogVisAtt->SetForceWireframe(true); + } + if(RichTbPhDet_vis == 1 ) { + RichTbPhSubFrame_LogVisAtt->SetForceSolid(true); + } + RichTbPhSubFrame_LogVisAtt-> SetVisibility(true); + RichTbPhSubFrame_LV ->SetVisAttributes(RichTbPhSubFrame_LogVisAtt); + } - G4LogicalVolume * RichTbPMTCathode_LV =curDetector-> - getRichTbPMT4()-> getRichTbPMTPhCathodeLVol(); - if(RichTbPMTCathode_LV != 0 ) { - if(RichTbPMT4Cathode_vis == 0 ) { - RichTbPMTCathode_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMT4Cathode_LogVisAtt = - new G4VisAttributes(G4Colour(1.0,0.0,0.0)); - if(RichTbPMT4Cathode_vis == 2 ) { - RichTbPMT4Cathode_LogVisAtt ->SetForceSolid(false); - RichTbPMT4Cathode_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test PMT photocathode vis "<<RichTbPMT4Cathode_vis<<G4endl; - } - if(RichTbPMT4Cathode_vis == 1 ) { - RichTbPMT4Cathode_LogVisAtt ->SetForceSolid(true); - } - RichTbPMT4Cathode_LogVisAtt->SetVisibility(true); - RichTbPMTCathode_LV -> SetVisAttributes(RichTbPMT4Cathode_LogVisAtt); - G4cout<<"prova prova "<<G4endl; +} - } +G4LogicalVolume * RichTbGasQuWin_LV= aPhSupFrame->getRichTbGasQuWinLVol(); +if( RichTbGasQuWin_LV !=0 ) { + if( RichTbGasQuWin_vis ==0 ) { + RichTbGasQuWin_LV ->SetVisAttributes(G4VisAttributes::Invisible); + }else { + G4VisAttributes * RichTbGasQuWin_LogVisAtt = + new G4VisAttributes(G4Colour(0.5,0.4,0.2)); + if( RichTbGasQuWin_vis == 2 ) { + RichTbGasQuWin_LogVisAtt->SetForceSolid(false); + RichTbGasQuWin_LogVisAtt->SetForceWireframe(true); + } + if( RichTbGasQuWin_vis == 1 ) { + RichTbGasQuWin_LogVisAtt->SetForceSolid(true); + } + RichTbGasQuWin_LogVisAtt->SetVisibility(true); + RichTbGasQuWin_LV ->SetVisAttributes(RichTbGasQuWin_LogVisAtt); + } +} +for (G4int ih=0; ih< (aPhSupFrame-> getNumPMTVol()) ; ih++){ + // G4cout<<" Now setting display options for HPD "<<ih<<G4endl; + + RichTbPMT* curPMT = aPhSupFrame->getSinglePMTVolume(ih); + + if(curPMT !=0 ) { + G4LogicalVolume* RichTbPMTMaster_LV= curPMT->getRichTbPMTMasterLVol(); + if(RichTbPMTMaster_LV != 0 ) { + if( RichTbPMTMaster_vis == 0 ) { + RichTbPMTMaster_LV ->SetVisAttributes(G4VisAttributes::Invisible); + }else { + G4VisAttributes * RichTbPMTMaster_LogVisAtt = + new G4VisAttributes (G4Colour(0.8,0.4,0.7)); + if(RichTbPMTMaster_vis == 2 ) { + RichTbPMTMaster_LogVisAtt->SetForceSolid(false); + RichTbPMTMaster_LogVisAtt->SetForceWireframe(true); } + if(RichTbPMTMaster_vis == 1 ) { + RichTbPMTMaster_LogVisAtt->SetForceSolid(true); + } + RichTbPMTMaster_LogVisAtt ->SetVisibility(true); + RichTbPMTMaster_LV->SetVisAttributes(RichTbPMTMaster_LogVisAtt); - } - -// now for the PMT anode - - G4int RichTbPMT4Anode_vis = aRunConfig->getRichTbPMTAnode_visib(); - G4cout<<"PMT anod visib flag "<<RichTbPMT4Anode_vis<<G4endl; - - if( (curDetector != 0) && (curDetector-> getRichTbPMT4() != 0)) - { - G4cout<<"now setting cathode visb options "<<RichTbPMT4Anode_vis<<G4endl; + } + } - G4LogicalVolume * RichTbPMTAnode_LV =curDetector-> - getRichTbPMT4()-> getRichTbPMTAnodeLVol(); - if(RichTbPMTAnode_LV != 0 ) { - if(RichTbPMT4Anode_vis == 0 ) { - RichTbPMTAnode_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPMT4Anode_LogVisAtt = - new G4VisAttributes(G4Colour(0.5,0.0,0.2)); - if(RichTbPMT4Anode_vis == 2 ) { - RichTbPMT4Anode_LogVisAtt ->SetForceSolid(false); - RichTbPMT4Anode_LogVisAtt ->SetForceWireframe(true); - G4cout<<"test PMT anode vis "<<RichTbPMT4Anode_vis<<G4endl; - } - if(RichTbPMT4Anode_vis == 1 ) { - RichTbPMT4Anode_LogVisAtt ->SetForceSolid(true); - } - RichTbPMT4Anode_LogVisAtt->SetVisibility(true); - RichTbPMTAnode_LV -> SetVisAttributes(RichTbPMT4Anode_LogVisAtt); + G4LogicalVolume* RichTbPMTSMaster_LV= + curPMT->getRichTbPMTSMasterLVol(); + if(RichTbPMTSMaster_LV != 0 ) { + if( RichTbPMTSMaster_vis == 0 ) { + RichTbPMTSMaster_LV ->SetVisAttributes(G4VisAttributes::Invisible); + }else { + G4VisAttributes * RichTbPMTSMaster_LogVisAtt = + new G4VisAttributes (G4Colour(0.3,0.4,0.7)); + if(RichTbPMTSMaster_vis == 2 ) { + RichTbPMTSMaster_LogVisAtt->SetForceSolid(false); + RichTbPMTSMaster_LogVisAtt->SetForceWireframe(true); + } + if(RichTbPMTSMaster_vis == 1 ) { + RichTbPMTSMaster_LogVisAtt->SetForceSolid(true); + } + RichTbPMTSMaster_LogVisAtt ->SetVisibility(true); + RichTbPMTSMaster_LV->SetVisAttributes(RichTbPMTSMaster_LogVisAtt); - } + } + } + G4LogicalVolume* RichTbPMTEnvelopeTube_LV = + curPMT->getRichTbPMTEnvelopeTubeLVol(); + if(RichTbPMTEnvelopeTube_LV != 0 ) { + if(RichTbPMTEnvelope_vis == 0) { + RichTbPMTEnvelopeTube_LV-> + SetVisAttributes(G4VisAttributes::Invisible); + }else { + G4VisAttributes * RichTbPMTEnvelopeTube_LogVisAtt = + new G4VisAttributes(G4Colour(0.4,0.2,0.8)); + if(RichTbPMTEnvelope_vis == 2){ + RichTbPMTEnvelopeTube_LogVisAtt->SetForceSolid(false); + RichTbPMTEnvelopeTube_LogVisAtt->SetForceWireframe(true); + } + if(RichTbPMTEnvelope_vis == 1){ + RichTbPMTEnvelopeTube_LogVisAtt->SetForceSolid(true); } + RichTbPMTEnvelopeTube_LogVisAtt->SetVisibility(true); + RichTbPMTEnvelopeTube_LV-> + SetVisAttributes(RichTbPMTEnvelopeTube_LogVisAtt); - } + } - */ + } + G4LogicalVolume* RichTbPMTEndCap_LV = + curPMT->getRichTbPMTEnvelopeEndCapLVol(); + if(RichTbPMTEndCap_LV != 0 ) { + if(RichTbPMTEndCap_vis == 0) { + RichTbPMTEndCap_LV-> + SetVisAttributes(G4VisAttributes::Invisible); + }else { + G4VisAttributes * RichTbPMTEndCap_LogVisAtt = + new G4VisAttributes(G4Colour(0.3,0.2,0.8)); + if(RichTbPMTEndCap_vis == 2){ + RichTbPMTEndCap_LogVisAtt->SetForceSolid(false); + RichTbPMTEndCap_LogVisAtt->SetForceWireframe(true); + } + if(RichTbPMTEndCap_vis == 1){ + RichTbPMTEndCap_LogVisAtt->SetForceSolid(true); + } + RichTbPMTEndCap_LogVisAtt->SetVisibility(true); + RichTbPMTEndCap_LV-> + SetVisAttributes(RichTbPMTEndCap_LogVisAtt); - // now for the PhDFrame - /* + } - G4int RichTbPhDFrame_vis = aRunConfig->getRichTbPhDFrame_visib(); - if( (curDetector != 0) && (curDetector-> getRichTbPhDFrame() != 0)) - { - G4cout<<"now setting PhDFrame visb options "<<RichTbPhDFrame_vis<<G4endl; + } - G4LogicalVolume * RichTbPhDFrame_LV =curDetector-> - getRichTbPhDFrame()-> getRichTbPhDFrameLVol(); - if(RichTbPhDFrame_LV != 0 ) { - if(RichTbPhDFrame_vis == 0 ) { - RichTbPhDFrame_LV ->SetVisAttributes(G4VisAttributes::Invisible); - } else { - G4VisAttributes * RichTbPhDFrame_LogVisAtt = - new G4VisAttributes(G4Colour(0.5,0.0,0.5)); - if(RichTbPhDFrame_vis == 2 ) { - RichTbPhDFrame_LogVisAtt ->SetForceSolid(false); - RichTbPhDFrame_LogVisAtt ->SetForceWireframe(true); - // G4cout<<"test crystal vis "<<RichTbCrystal_vis<<G4endl; - } - if(RichTbPhDFrame_vis == 1 ) { - RichTbPhDFrame_LogVisAtt ->SetForceSolid(true); - } - RichTbPhDFrame_LogVisAtt->SetVisibility(true); - RichTbPhDFrame_LV -> SetVisAttributes(RichTbPhDFrame_LogVisAtt); - } + G4LogicalVolume* RichTbPMTQuartzW_LV = + curPMT -> getRichTbPMTQuartzWLVol(); + if( RichTbPMTQuartzW_LV != 0 ) { + if( RichTbPMTQuartzW_vis == 0 ) { + RichTbPMTQuartzW_LV -> + SetVisAttributes(G4VisAttributes::Invisible); + }else { + G4VisAttributes * RichTbPMTQuartzW_LogVisAtt = + new G4VisAttributes(G4Colour(0.9,0.9,0.8)); + if(RichTbPMTQuartzW_vis == 2){ + RichTbPMTQuartzW_LogVisAtt->SetForceSolid(false); + RichTbPMTQuartzW_LogVisAtt->SetForceWireframe(true); + } + if(RichTbPMTQuartzW_vis == 1){ + RichTbPMTQuartzW_LogVisAtt->SetForceSolid(true); } - } - - - - - */ - /* - // Now for the Photdet sup frame and the HPDs - - G4int RichTbPhDet_vis=aRunConfig-> getRichTbPhDetSupFrame_visib(); - // G4int RichTbGasQuWin_vis=aRunConfig-> getRichTbGasQuWin_visib(); - //G4int RichTbPMTMaster_vis=aRunConfig-> getRichTbPMTMaster_visib(); - //G4int RichTbPMTSMaster_vis=aRunConfig-> getRichTbPMTSMaster_visib(); - //G4int RichTbPMTEnvelope_vis=aRunConfig-> getRichTbPMTEnvelope_visib(); - //G4int RichTbPMTEndCap_vis= aRunConfig->getRichTbPMTEndCap_visib(); - //G4int RichTbPMTQuartzW_vis= aRunConfig->getRichTbPMTQuartzW_visib(); - //G4int RichTbPMTPhCathode_vis=aRunConfig->getRichTbPMTPhCathode_visib(); - //G4int RichTbPMTSiDet_vis= aRunConfig-> getRichTbPMTSiDet_visib(); - if( (curDetector != 0) && (curDetector-> getRichTbPhDetSupFrame() != 0 )){ - RichTbPhDetSupFrame* aPhSupFrame = - curDetector-> getRichTbPhDetSupFrame(); - G4LogicalVolume * RichTbPhSubFrame_LV = - aPhSupFrame-> getRichTbPhDetSupFrameLVol() ; - if(RichTbPhSubFrame_LV != 0 ) { + RichTbPMTQuartzW_LogVisAtt->SetVisibility(true); + RichTbPMTQuartzW_LV -> + SetVisAttributes(RichTbPMTQuartzW_LogVisAtt); - if( RichTbPhDet_vis == 0) { - RichTbPhSubFrame_LV ->SetVisAttributes(G4VisAttributes::Invisible); + } - }else { - G4VisAttributes * RichTbPhSubFrame_LogVisAtt = - new G4VisAttributes(G4Colour(0.5,0.6,0.5)); - if(RichTbPhDet_vis == 2 ) { - RichTbPhSubFrame_LogVisAtt->SetForceSolid(false); - RichTbPhSubFrame_LogVisAtt->SetForceWireframe(true); - } - if(RichTbPhDet_vis == 1 ) { - RichTbPhSubFrame_LogVisAtt->SetForceSolid(true); - } - RichTbPhSubFrame_LogVisAtt-> SetVisibility(true); - RichTbPhSubFrame_LV ->SetVisAttributes(RichTbPhSubFrame_LogVisAtt); - } + } - } + G4LogicalVolume* RichTbPMTPhCathode_LV = + curPMT->getRichTbPMTPhCathodeLVol(); + + if(RichTbPMTPhCathode_LV != 0 ) { + if( RichTbPMTPhCathode_vis == 0 ) { + RichTbPMTPhCathode_LV-> + SetVisAttributes(G4VisAttributes::Invisible); + }else { + G4VisAttributes * RichTbPMTPhCathode_LogVisAtt = + new G4VisAttributes(G4Colour(0.3,0.2,0.2)); + if(RichTbPMTPhCathode_vis == 2){ + RichTbPMTPhCathode_LogVisAtt->SetForceSolid(false); + RichTbPMTPhCathode_LogVisAtt->SetForceWireframe(true); + } + if(RichTbPMTPhCathode_vis == 1){ + RichTbPMTPhCathode_LogVisAtt->SetForceSolid(true); + } + RichTbPMTPhCathode_LogVisAtt->SetVisibility(true); + RichTbPMTPhCathode_LV-> + SetVisAttributes(RichTbPMTPhCathode_LogVisAtt); - G4LogicalVolume * RichTbGasQuWin_LV= aPhSupFrame->getRichTbGasQuWinLVol(); - if( RichTbGasQuWin_LV !=0 ) { - if( RichTbGasQuWin_vis ==0 ) { - RichTbGasQuWin_LV ->SetVisAttributes(G4VisAttributes::Invisible); - }else { - G4VisAttributes * RichTbGasQuWin_LogVisAtt = - new G4VisAttributes(G4Colour(0.5,0.4,0.2)); - if( RichTbGasQuWin_vis == 2 ) { - RichTbGasQuWin_LogVisAtt->SetForceSolid(false); - RichTbGasQuWin_LogVisAtt->SetForceWireframe(true); - } - if( RichTbGasQuWin_vis == 1 ) { - RichTbGasQuWin_LogVisAtt->SetForceSolid(true); - } - RichTbGasQuWin_LogVisAtt->SetVisibility(true); - RichTbGasQuWin_LV ->SetVisAttributes(RichTbGasQuWin_LogVisAtt); - } } - for (G4int ih=0; ih< (aPhSupFrame-> getNumPMTVol()) ; ih++){ - // G4cout<<" Now setting display options for HPD "<<ih<<G4endl; - - RichTbPMT* curPMT = aPhSupFrame->getSinglePMTVolume(ih); - - if(curPMT !=0 ) { - G4LogicalVolume* RichTbPMTMaster_LV= curPMT->getRichTbPMTMasterLVol(); - if(RichTbPMTMaster_LV != 0 ) { - if( RichTbPMTMaster_vis == 0 ) { - RichTbPMTMaster_LV ->SetVisAttributes(G4VisAttributes::Invisible); - }else { - G4VisAttributes * RichTbPMTMaster_LogVisAtt = - new G4VisAttributes (G4Colour(0.8,0.4,0.7)); - if(RichTbPMTMaster_vis == 2 ) { - RichTbPMTMaster_LogVisAtt->SetForceSolid(false); - RichTbPMTMaster_LogVisAtt->SetForceWireframe(true); - } - if(RichTbPMTMaster_vis == 1 ) { - RichTbPMTMaster_LogVisAtt->SetForceSolid(true); - } - RichTbPMTMaster_LogVisAtt ->SetVisibility(true); - RichTbPMTMaster_LV->SetVisAttributes(RichTbPMTMaster_LogVisAtt); - - } - } - - G4LogicalVolume* RichTbPMTSMaster_LV= - curPMT->getRichTbPMTSMasterLVol(); - if(RichTbPMTSMaster_LV != 0 ) { - if( RichTbPMTSMaster_vis == 0 ) { - RichTbPMTSMaster_LV ->SetVisAttributes(G4VisAttributes::Invisible); - }else { - G4VisAttributes * RichTbPMTSMaster_LogVisAtt = - new G4VisAttributes (G4Colour(0.3,0.4,0.7)); - if(RichTbPMTSMaster_vis == 2 ) { - RichTbPMTSMaster_LogVisAtt->SetForceSolid(false); - RichTbPMTSMaster_LogVisAtt->SetForceWireframe(true); - } - if(RichTbPMTSMaster_vis == 1 ) { - RichTbPMTSMaster_LogVisAtt->SetForceSolid(true); - } - RichTbPMTSMaster_LogVisAtt ->SetVisibility(true); - RichTbPMTSMaster_LV->SetVisAttributes(RichTbPMTSMaster_LogVisAtt); - - } - } - - G4LogicalVolume* RichTbPMTEnvelopeTube_LV = - curPMT->getRichTbPMTEnvelopeTubeLVol(); - if(RichTbPMTEnvelopeTube_LV != 0 ) { - if(RichTbPMTEnvelope_vis == 0) { - RichTbPMTEnvelopeTube_LV-> - SetVisAttributes(G4VisAttributes::Invisible); - }else { - G4VisAttributes * RichTbPMTEnvelopeTube_LogVisAtt = - new G4VisAttributes(G4Colour(0.4,0.2,0.8)); - if(RichTbPMTEnvelope_vis == 2){ - RichTbPMTEnvelopeTube_LogVisAtt->SetForceSolid(false); - RichTbPMTEnvelopeTube_LogVisAtt->SetForceWireframe(true); - } - if(RichTbPMTEnvelope_vis == 1){ - RichTbPMTEnvelopeTube_LogVisAtt->SetForceSolid(true); - } - RichTbPMTEnvelopeTube_LogVisAtt->SetVisibility(true); - RichTbPMTEnvelopeTube_LV-> - SetVisAttributes(RichTbPMTEnvelopeTube_LogVisAtt); - - } - - } - - G4LogicalVolume* RichTbPMTEndCap_LV = - curPMT->getRichTbPMTEnvelopeEndCapLVol(); - if(RichTbPMTEndCap_LV != 0 ) { - if(RichTbPMTEndCap_vis == 0) { - RichTbPMTEndCap_LV-> - SetVisAttributes(G4VisAttributes::Invisible); - }else { - G4VisAttributes * RichTbPMTEndCap_LogVisAtt = - new G4VisAttributes(G4Colour(0.3,0.2,0.8)); - if(RichTbPMTEndCap_vis == 2){ - RichTbPMTEndCap_LogVisAtt->SetForceSolid(false); - RichTbPMTEndCap_LogVisAtt->SetForceWireframe(true); - } - if(RichTbPMTEndCap_vis == 1){ - RichTbPMTEndCap_LogVisAtt->SetForceSolid(true); - } - RichTbPMTEndCap_LogVisAtt->SetVisibility(true); - RichTbPMTEndCap_LV-> - SetVisAttributes(RichTbPMTEndCap_LogVisAtt); - - } - - - } - - - G4LogicalVolume* RichTbPMTQuartzW_LV = - curPMT -> getRichTbPMTQuartzWLVol(); - - if( RichTbPMTQuartzW_LV != 0 ) { - if( RichTbPMTQuartzW_vis == 0 ) { - RichTbPMTQuartzW_LV -> - SetVisAttributes(G4VisAttributes::Invisible); - }else { - G4VisAttributes * RichTbPMTQuartzW_LogVisAtt = - new G4VisAttributes(G4Colour(0.9,0.9,0.8)); - if(RichTbPMTQuartzW_vis == 2){ - RichTbPMTQuartzW_LogVisAtt->SetForceSolid(false); - RichTbPMTQuartzW_LogVisAtt->SetForceWireframe(true); - } - if(RichTbPMTQuartzW_vis == 1){ - RichTbPMTQuartzW_LogVisAtt->SetForceSolid(true); - } - - RichTbPMTQuartzW_LogVisAtt->SetVisibility(true); - RichTbPMTQuartzW_LV -> - SetVisAttributes(RichTbPMTQuartzW_LogVisAtt); - - } - - } - - G4LogicalVolume* RichTbPMTPhCathode_LV = - curPMT->getRichTbPMTPhCathodeLVol(); - - if(RichTbPMTPhCathode_LV != 0 ) { - if( RichTbPMTPhCathode_vis == 0 ) { - RichTbPMTPhCathode_LV-> - SetVisAttributes(G4VisAttributes::Invisible); - }else { - G4VisAttributes * RichTbPMTPhCathode_LogVisAtt = - new G4VisAttributes(G4Colour(0.3,0.2,0.2)); - if(RichTbPMTPhCathode_vis == 2){ - RichTbPMTPhCathode_LogVisAtt->SetForceSolid(false); - RichTbPMTPhCathode_LogVisAtt->SetForceWireframe(true); - } - if(RichTbPMTPhCathode_vis == 1){ - RichTbPMTPhCathode_LogVisAtt->SetForceSolid(true); - } - RichTbPMTPhCathode_LogVisAtt->SetVisibility(true); - RichTbPMTPhCathode_LV-> - SetVisAttributes(RichTbPMTPhCathode_LogVisAtt); - - } - - } - - - G4LogicalVolume* RichTbPMTSiDet_LV = - curPMT->getRichTbPMTSiDetLVol(); - - if(RichTbPMTSiDet_LV != 0 ) { - if( RichTbPMTSiDet_vis == 0 ) { - RichTbPMTSiDet_LV-> - SetVisAttributes(G4VisAttributes::Invisible); - }else { - G4VisAttributes * RichTbPMTSiDet_LogVisAtt = - new G4VisAttributes(G4Colour(0.7,0.7,0.3)); - if(RichTbPMTSiDet_vis == 2){ - RichTbPMTSiDet_LogVisAtt->SetForceSolid(false); - RichTbPMTSiDet_LogVisAtt->SetForceWireframe(true); - } - if(RichTbPMTSiDet_vis == 1){ - RichTbPMTSiDet_LogVisAtt->SetForceSolid(true); - } - RichTbPMTSiDet_LogVisAtt->SetVisibility(true); - RichTbPMTSiDet_LV-> - SetVisAttributes(RichTbPMTSiDet_LogVisAtt); - - } - } - } - } } - */ - - + G4LogicalVolume* RichTbPMTSiDet_LV = + curPMT->getRichTbPMTSiDetLVol(); + if(RichTbPMTSiDet_LV != 0 ) { + if( RichTbPMTSiDet_vis == 0 ) { + RichTbPMTSiDet_LV-> + SetVisAttributes(G4VisAttributes::Invisible); + }else { + G4VisAttributes * RichTbPMTSiDet_LogVisAtt = + new G4VisAttributes(G4Colour(0.7,0.7,0.3)); + if(RichTbPMTSiDet_vis == 2){ + RichTbPMTSiDet_LogVisAtt->SetForceSolid(false); + RichTbPMTSiDet_LogVisAtt->SetForceWireframe(true); + } + if(RichTbPMTSiDet_vis == 1){ + RichTbPMTSiDet_LogVisAtt->SetForceSolid(true); + } + RichTbPMTSiDet_LogVisAtt->SetVisibility(true); + RichTbPMTSiDet_LV-> + SetVisAttributes(RichTbPMTSiDet_LogVisAtt); + } + } + } +} } + */ +} diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgr/RichTbVisManager.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgr/RichTbVisManager.cc index d2cbe0b847ed56d17085edb50ad7af72f06387e9..7d0fb31d4f136dfe8ae8d22d1a81f082e63bf518 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgr/RichTbVisManager.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgr/RichTbVisManager.cc @@ -46,126 +46,108 @@ #include "Geant4/G4OpenGLStoredXm.hh" //#endif - //#ifdef G4VIS_USE_OIX +//#ifdef G4VIS_USE_OIX // #include "Geant4/G4OpenInventorX.hh" - //#endif +//#endif //#ifdef G4VIS_USE_OIWIN32 //#include "Geant4/G4OpenInventorWin32.hh" //#endif -//ifdef G4VIS_USE_VRML +// ifdef G4VIS_USE_VRML //#include "Geant4/G4VRML1.hh" //#include "Geant4/G4VRML2.hh" -//endif +// endif -//ifdef G4VIS_USE_VRMLFILE +// ifdef G4VIS_USE_VRMLFILE //#include "Geant4/G4VRML1File.hh" //#include "Geant4/G4VRML2File.hh" -//endif +// endif -//ifdef G4VIS_USE_RAYTRACER +// ifdef G4VIS_USE_RAYTRACER //#include "Geant4/G4RayTracer.hh" -//endif +// endif //#ifdef G4VIS_USE //#include "Geant4/G4VisExecutive.hh" //#endif - - - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -RichTbVisManager* RichTbVisManager::RichTbVisManagerInstance=0; +RichTbVisManager *RichTbVisManager::RichTbVisManagerInstance = 0; + +RichTbVisManager::RichTbVisManager() { -RichTbVisManager::RichTbVisManager() -{ + // RegisterGraphicsSystems(); - //RegisterGraphicsSystems(); - // visualization manager // G4VisManager* visManagerE = new G4VisExecutive; // visManagerE->Initialize(); - - } - -RichTbVisManager::~RichTbVisManager() -{ - ; -} -RichTbVisManager* RichTbVisManager::getRichTbVisManagerInstance() -{ - if(RichTbVisManagerInstance == 0 ) { +RichTbVisManager::~RichTbVisManager() { ; } +RichTbVisManager *RichTbVisManager::getRichTbVisManagerInstance() { + if (RichTbVisManagerInstance == 0) { RichTbVisManagerInstance = new RichTbVisManager(); - } return RichTbVisManagerInstance; - - } - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void RichTbVisManager::RegisterGraphicsSystems() -{ +void RichTbVisManager::RegisterGraphicsSystems() { //#ifdef G4VIS_USE_DAWN // RegisterGraphicsSystem(new G4FukuiRenderer); - //#endif + //#endif - //#ifdef G4VIS_USE_DAWNFILE + //#ifdef G4VIS_USE_DAWNFILE // RegisterGraphicsSystem(new G4DAWNFILE); - //#endif + //#endif //#ifdef G4VIS_USE_OPACS // RegisterGraphicsSystem(new G4Wo); // RegisterGraphicsSystem(new G4Xo); //#endif - //#ifdef G4VIS_USE_OPENGLX - RegisterGraphicsSystem(new G4OpenGLImmediateX); - RegisterGraphicsSystem(new G4OpenGLStoredX); - //#endif + //#ifdef G4VIS_USE_OPENGLX + RegisterGraphicsSystem(new G4OpenGLImmediateX); + RegisterGraphicsSystem(new G4OpenGLStoredX); + //#endif //#ifdef G4VIS_USE_OPENGLWIN32 // RegisterGraphicsSystem(new G4OpenGLImmediateWin32); // RegisterGraphicsSystem(new G4OpenGLStoredWin32); //#endif - //#ifdef G4VIS_USE_OPENGLXM - RegisterGraphicsSystem(new G4OpenGLImmediateXm); - RegisterGraphicsSystem(new G4OpenGLStoredXm); - //#endif + //#ifdef G4VIS_USE_OPENGLXM + RegisterGraphicsSystem(new G4OpenGLImmediateXm); + RegisterGraphicsSystem(new G4OpenGLStoredXm); + //#endif //#ifdef G4VIS_USE_OIX - // RegisterGraphicsSystem (new G4OpenInventorX); + // RegisterGraphicsSystem (new G4OpenInventorX); //#endif //#ifdef G4VIS_USE_OIWIN32 // RegisterGraphicsSystem(new G4OpenInventorWin32); //#endif - //#ifdef G4VIS_USE_VRML + //#ifdef G4VIS_USE_VRML // RegisterGraphicsSystem(new G4VRML1); // RegisterGraphicsSystem(new G4VRML2); - //#endif + //#endif - //#ifdef G4VIS_USE_VRMLFILE + //#ifdef G4VIS_USE_VRMLFILE // RegisterGraphicsSystem(new G4VRML1File); // RegisterGraphicsSystem(new G4VRML2File); - //#endif + //#endif - //#ifdef G4VIS_USE_RAYTRACER + //#ifdef G4VIS_USE_RAYTRACER // RegisterGraphicsSystem(new G4RayTracer); - //#endif - - //#ifdef G4VIS_USE - //#endif - + //#endif + //#ifdef G4VIS_USE + //#endif // if (fVerbose > 0) { // G4cout << "\nYou have successfully chosen to use the following graphics systems." << G4endl; diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbGeometryParameters.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbGeometryParameters.cc index 839f14f70c85d1bc3d1f69a120307c1adcc963e5..0adb486cd823c2faa2814b7c992364d0b72b0727 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbGeometryParameters.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbGeometryParameters.cc @@ -1,6 +1,4 @@ -#include "Geant4/globals.hh" #include "RichTbGeometryParameters.hh" +#include "Geant4/globals.hh" -void InitializeRichTbGeometry() -{ -} +void InitializeRichTbGeometry() {} diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbHall.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbHall.cc index 6608141111924ae5fd066267dc99760a7bb1d531..c06640d8e8a84b20dd8b83d19e827e7f78d7b781 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbHall.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbHall.cc @@ -1,36 +1,26 @@ #include "Geant4/G4Box.hh" -#include "Geant4/G4ThreeVector.hh" #include "Geant4/G4LogicalVolume.hh" -#include "Geant4/G4VPhysicalVolume.hh" #include "Geant4/G4PVPlacement.hh" +#include "Geant4/G4ThreeVector.hh" +#include "Geant4/G4VPhysicalVolume.hh" #include <iostream> -#include "RichTbUpgradeDetectorConstruction.hh" +#include "RichTbGeometryParameters.hh" #include "RichTbHall.hh" #include "RichTbMaterial.hh" -#include "RichTbGeometryParameters.hh" - -RichTbHall::RichTbHall() -{ +#include "RichTbUpgradeDetectorConstruction.hh" +RichTbHall::RichTbHall() { - RichTbMaterial * RMaterial = RichTbMaterial::getRichTbMaterialInstance(); - - G4Box * RichTbHallBox - = new G4Box("World",ExpHallHalfX,ExpHallHalfY,ExpHallHalfZ); - G4LogicalVolume * RichTbHallLog - = new G4LogicalVolume(RichTbHallBox,RMaterial->getRichTbVaccum(),"World",0,0,0); - G4VPhysicalVolume * RichTbHallPhys - = new G4PVPlacement(0,G4ThreeVector(),"World",RichTbHallLog,0,false,0); + RichTbMaterial *RMaterial = RichTbMaterial::getRichTbMaterialInstance(); - RichTbHallLVol = RichTbHallLog; - RichTbHallPVol = RichTbHallPhys; + G4Box *RichTbHallBox = new G4Box("World", ExpHallHalfX, ExpHallHalfY, ExpHallHalfZ); + G4LogicalVolume *RichTbHallLog = new G4LogicalVolume(RichTbHallBox, RMaterial->getRichTbVaccum(), "World", 0, 0, 0); + G4VPhysicalVolume *RichTbHallPhys = new G4PVPlacement(0, G4ThreeVector(), "World", RichTbHallLog, 0, false, 0); + RichTbHallLVol = RichTbHallLog; + RichTbHallPVol = RichTbHallPhys; } - -RichTbHall::~RichTbHall() -{ - ; -} +RichTbHall::~RichTbHall() { ; } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbHpd.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbHpd.cc index c4a514a6448367d15c2675aace64fc34b9a906f0..2f5c61660a1af13ae84a8ffad0b50b7cbc44c7aa 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbHpd.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbHpd.cc @@ -1,30 +1,29 @@ // $Id: $ -// Include files +// Include files - -#include "Geant4/globals.hh" -#include "Geant4/G4Tubs.hh" #include "Geant4/G4Box.hh" -#include "Geant4/G4Sphere.hh" #include "Geant4/G4Polyhedra.hh" +#include "Geant4/G4Sphere.hh" +#include "Geant4/G4Tubs.hh" +#include "Geant4/globals.hh" // local -#include "RichTbMaterial.hh" -#include "RichTbHpd.hh" -#include "RichTbUpgradePhDetSupFrame.hh" -#include "RichTbGeometryParameters.hh" -#include "RichTbMaterialParameters.hh" +#include "Geant4/G4LogicalVolume.hh" +#include "Geant4/G4PVPlacement.hh" #include "Geant4/G4RotationMatrix.hh" +#include "Geant4/G4SDManager.hh" +#include "Geant4/G4SubtractionSolid.hh" #include "Geant4/G4ThreeVector.hh" #include "Geant4/G4Transform3D.hh" -#include "Geant4/G4LogicalVolume.hh" #include "Geant4/G4VPhysicalVolume.hh" -#include "Geant4/G4PVPlacement.hh" -#include "Geant4/G4SubtractionSolid.hh" -#include "Geant4/G4SDManager.hh" -#include "RichTbUpgradeSD.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbHpd.hh" #include "RichTbHpdRODummySD.hh" +#include "RichTbMaterial.hh" +#include "RichTbMaterialParameters.hh" #include "RichTbMiscNames.hh" +#include "RichTbUpgradePhDetSupFrame.hh" +#include "RichTbUpgradeSD.hh" //----------------------------------------------------------------------------- // Implementation file for class : RichTbHpd @@ -35,407 +34,287 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbHpd::RichTbHpd(G4int aHpdNum , RichTbUpgradePhDetSupFrame* aSupFrame ) -{ MotherOfHpd = aSupFrame; +RichTbHpd::RichTbHpd(G4int aHpdNum, RichTbUpgradePhDetSupFrame *aSupFrame) { + MotherOfHpd = aSupFrame; CurHpdNum = aHpdNum; - m_TrackingSwitch=true; - + m_TrackingSwitch = true; } -RichTbHpd::~RichTbHpd( ) { -} +RichTbHpd::~RichTbHpd() {} void RichTbHpd::buildHpdGeometry() { - constructHpdMasterTree(); - RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - G4int agraphics= aConfig ->getRichTbHpdSiPix_visib() ; - - - if(m_TrackingSwitch) { + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); + G4int agraphics = aConfig->getRichTbHpdSiPix_visib(); + + if (m_TrackingSwitch) { constructHpdComponentsLVol(); constructHpdComponentsPVol(); - if( agraphics > 5 ) { + if (agraphics > 5) { // special config to just visualize the pixel geometry. Not for simulating data. constructHpdSiPixel(); - } - - - }else { + } else { constructHpdSiPixel(); } - - - } -void RichTbHpd::constructHpdComponentsLVol() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - - G4Tubs* HpdEnvelopeTube = - new G4Tubs("HpdEnvelopeTube", RichTbHpdEnvLargeTubInnR, - RichTbHpdEnvLargeTubeOutR, - 0.5*RichTbHpdEnvLargeTubeZSize, - RichTbHpdEnvelopeTubeStartPhi, RichTbHpdEnvelopeTubeEndPhi); - - G4Tubs* HpdEndCapTube= - new G4Tubs("HpdEndCap", RichTbHpdEndCapInnerRad,RichTbHpdEnvEndCapRad, - 0.5*RichTbHpdEnvEndCapZsize, RichTbHpdEnvelopeEndCapStartPhi, - RichTbHpdEnvelopeEndCapEndPhi); - G4Sphere* HpdQuartzWindowOverallSphe= - new G4Sphere("HpdQuartzWSphe", RichTbHpdQuartzWInnerRad, - RichTbHpdQuartzWOuterRad, RichTbHpdQuartzWStartPhi, - RichTbHpdQuartzWDeltaPhi, RichTbHpdQuartzWStartTheta, - RichTbHpdQuartzWDeltaTheta); - - G4Tubs* HpdQWCylEnvTube= - new G4Tubs("HpdQWCylEnvTube", RichTbHpdQuartzWCylEnvInnerR, - RichTbHpdQWCylEnvOuterLargeValue, - 0.5*RichTbHpdQWCylEnvZLargeValue, - RichTbHpdQWCylEnvStartPhi,RichTbHpdQWCylEnvEndPhi); - - G4Sphere* HpdPhCathodeSphe= - new G4Sphere("HpdPhCathodeSphe", RichTbHpdPhCathodeInnerRad, - RichTbHpdPhCathodeOuterRad, RichTbHpdPhCathodeStartPhi, - RichTbHpdPhCathodeDeltaPhi, RichTbHpdPhCathodeStartTheta, - RichTbHpdPhCathodeDeltaTheta); - - G4RotationMatrix RichTbHpdQWCylRot; - - G4ThreeVector RichTbHpdQWCylPos(RichTbHpdQWCylXLocation, - RichTbHpdQWCylYLocation, - RichTbHpdQWCylZLocation); - - G4Transform3D RichTbHpdQWCylTransform( RichTbHpdQWCylRot, - RichTbHpdQWCylPos); - - G4SubtractionSolid* HpdQuartzWSub = - new G4SubtractionSolid("HpdQWSubtr",HpdQuartzWindowOverallSphe, - HpdQWCylEnvTube, RichTbHpdQWCylTransform); - - - - G4LogicalVolume* HpdEnvelopeLog = - new G4LogicalVolume( HpdEnvelopeTube , - aMaterial->getHpdTubeEnvelopeMaterial(), - "HpdEnvelopeLog",0,0,0); - G4LogicalVolume* HpdEndCapLog = - new G4LogicalVolume( HpdEndCapTube, - aMaterial->getHpdTubeEnvelopeMaterial(), - "HpdEndCapLog",0,0,0); - G4LogicalVolume* HpdQuartzWLog= - new G4LogicalVolume( HpdQuartzWSub, - aMaterial->getHpdQuartzWindowMaterial(), - "HpdQuartzWLog",0,0,0); - G4LogicalVolume* HpdPhCathodeLog = - new G4LogicalVolume( HpdPhCathodeSphe, - aMaterial->getHpdPhCathodeMaterial() , - "HpdPhCathodeLog",0,0,0); - - RichTbHpdEnvelopeTubeLVol=HpdEnvelopeLog; - RichTbHpdEnvelopeEndCapLVol=HpdEndCapLog; - RichTbHpdQuartzWLVol= HpdQuartzWLog; - RichTbHpdPhCathodeLVol=HpdPhCathodeLog; - - - - +void RichTbHpd::constructHpdComponentsLVol() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + + G4Tubs *HpdEnvelopeTube = + new G4Tubs("HpdEnvelopeTube", RichTbHpdEnvLargeTubInnR, RichTbHpdEnvLargeTubeOutR, + 0.5 * RichTbHpdEnvLargeTubeZSize, RichTbHpdEnvelopeTubeStartPhi, RichTbHpdEnvelopeTubeEndPhi); + + G4Tubs *HpdEndCapTube = + new G4Tubs("HpdEndCap", RichTbHpdEndCapInnerRad, RichTbHpdEnvEndCapRad, 0.5 * RichTbHpdEnvEndCapZsize, + RichTbHpdEnvelopeEndCapStartPhi, RichTbHpdEnvelopeEndCapEndPhi); + G4Sphere *HpdQuartzWindowOverallSphe = + new G4Sphere("HpdQuartzWSphe", RichTbHpdQuartzWInnerRad, RichTbHpdQuartzWOuterRad, RichTbHpdQuartzWStartPhi, + RichTbHpdQuartzWDeltaPhi, RichTbHpdQuartzWStartTheta, RichTbHpdQuartzWDeltaTheta); + + G4Tubs *HpdQWCylEnvTube = + new G4Tubs("HpdQWCylEnvTube", RichTbHpdQuartzWCylEnvInnerR, RichTbHpdQWCylEnvOuterLargeValue, + 0.5 * RichTbHpdQWCylEnvZLargeValue, RichTbHpdQWCylEnvStartPhi, RichTbHpdQWCylEnvEndPhi); + + G4Sphere *HpdPhCathodeSphe = new G4Sphere("HpdPhCathodeSphe", RichTbHpdPhCathodeInnerRad, RichTbHpdPhCathodeOuterRad, + RichTbHpdPhCathodeStartPhi, RichTbHpdPhCathodeDeltaPhi, + RichTbHpdPhCathodeStartTheta, RichTbHpdPhCathodeDeltaTheta); + + G4RotationMatrix RichTbHpdQWCylRot; + + G4ThreeVector RichTbHpdQWCylPos(RichTbHpdQWCylXLocation, RichTbHpdQWCylYLocation, RichTbHpdQWCylZLocation); + + G4Transform3D RichTbHpdQWCylTransform(RichTbHpdQWCylRot, RichTbHpdQWCylPos); + + G4SubtractionSolid *HpdQuartzWSub = + new G4SubtractionSolid("HpdQWSubtr", HpdQuartzWindowOverallSphe, HpdQWCylEnvTube, RichTbHpdQWCylTransform); + + G4LogicalVolume *HpdEnvelopeLog = + new G4LogicalVolume(HpdEnvelopeTube, aMaterial->getHpdTubeEnvelopeMaterial(), "HpdEnvelopeLog", 0, 0, 0); + G4LogicalVolume *HpdEndCapLog = + new G4LogicalVolume(HpdEndCapTube, aMaterial->getHpdTubeEnvelopeMaterial(), "HpdEndCapLog", 0, 0, 0); + G4LogicalVolume *HpdQuartzWLog = + new G4LogicalVolume(HpdQuartzWSub, aMaterial->getHpdQuartzWindowMaterial(), "HpdQuartzWLog", 0, 0, 0); + G4LogicalVolume *HpdPhCathodeLog = + new G4LogicalVolume(HpdPhCathodeSphe, aMaterial->getHpdPhCathodeMaterial(), "HpdPhCathodeLog", 0, 0, 0); + + RichTbHpdEnvelopeTubeLVol = HpdEnvelopeLog; + RichTbHpdEnvelopeEndCapLVol = HpdEndCapLog; + RichTbHpdQuartzWLVol = HpdQuartzWLog; + RichTbHpdPhCathodeLVol = HpdPhCathodeLog; } -void RichTbHpd::constructHpdComponentsPVol() -{ - - G4RotationMatrix HpdEnvelopeTubeRot; - G4RotationMatrix HpdEndCapTubeRot, HpdQuartzWindowRot, HpdPhCathodeRot; - - G4ThreeVector HpdEnvelopeTubePos( RichTbHpdEnvTubeXLocation, - RichTbHpdEnvTubeYLocation, - RichTbEnvLargeTubZLocation); - - G4Transform3D HpdEnvelopeTubeTransform( HpdEnvelopeTubeRot, - HpdEnvelopeTubePos); - - G4ThreeVector HpdEndCapPos(RichTbHpdEndCapXLocation, - RichTbHpdEndCapYLocation, - RichTbHpdEndCapZLocation); - - G4Transform3D HpdEndCapTransform( HpdEndCapTubeRot, HpdEndCapPos); - - - HpdQuartzWindowRot.rotateY(RichTbHpdQuartzWRotY); - HpdPhCathodeRot.rotateY( RichTbHpdPhCathodeRotY); - - - G4ThreeVector HpdQuartzWindowPos( RichTbHpdQuartzWindowXLocation, - RichTbHpdQuartzWindowYLocation, - RichTbHpdQuartzWZLocation); - - - G4Transform3D HpdQuartzWindowTransform( HpdQuartzWindowRot, - HpdQuartzWindowPos); - - G4ThreeVector HpdPhCathodePos(RichTbHpdPhCathodeXLocation, - RichTbHpdPhCathodeYLocation, - RichTbHpdPhCathodeZLocation); - - G4Transform3D HpdPhCathodeTransform( HpdPhCathodeRot, HpdPhCathodePos); - - - - G4VPhysicalVolume* HpdEnvelopePhys = - new G4PVPlacement( HpdEnvelopeTubeTransform,"HpdEnvelopeTubePhys", - RichTbHpdEnvelopeTubeLVol , RichTbHpdSMasterPVol, - false,0); - - G4VPhysicalVolume* HpdEndCapPhys = - new G4PVPlacement( HpdEndCapTransform,"HpdEndCapPhys", - RichTbHpdEnvelopeEndCapLVol, - RichTbHpdSMasterPVol,false,0); - - G4VPhysicalVolume* HpdQuartzWPhys= - new G4PVPlacement( HpdQuartzWindowTransform,HpdQuartzPhysName , - RichTbHpdQuartzWLVol , - RichTbHpdSMasterPVol,false,0); - - G4VPhysicalVolume* HpdPhCathodePhys= - new G4PVPlacement( HpdPhCathodeTransform, HpdPhCathodePhysName , - RichTbHpdPhCathodeLVol, - RichTbHpdSMasterPVol,false,0); - - RichTbHpdEnvelopeTubePVol= HpdEnvelopePhys; - RichTbHpdEnvelopeEndCapPVol= HpdEndCapPhys; - RichTbHpdQuartzWPVol= HpdQuartzWPhys; - RichTbHpdPhCathodePVol= HpdPhCathodePhys; - - +void RichTbHpd::constructHpdComponentsPVol() { + + G4RotationMatrix HpdEnvelopeTubeRot; + G4RotationMatrix HpdEndCapTubeRot, HpdQuartzWindowRot, HpdPhCathodeRot; + + G4ThreeVector HpdEnvelopeTubePos(RichTbHpdEnvTubeXLocation, RichTbHpdEnvTubeYLocation, RichTbEnvLargeTubZLocation); + + G4Transform3D HpdEnvelopeTubeTransform(HpdEnvelopeTubeRot, HpdEnvelopeTubePos); + + G4ThreeVector HpdEndCapPos(RichTbHpdEndCapXLocation, RichTbHpdEndCapYLocation, RichTbHpdEndCapZLocation); + + G4Transform3D HpdEndCapTransform(HpdEndCapTubeRot, HpdEndCapPos); + HpdQuartzWindowRot.rotateY(RichTbHpdQuartzWRotY); + HpdPhCathodeRot.rotateY(RichTbHpdPhCathodeRotY); + G4ThreeVector HpdQuartzWindowPos(RichTbHpdQuartzWindowXLocation, RichTbHpdQuartzWindowYLocation, + RichTbHpdQuartzWZLocation); + + G4Transform3D HpdQuartzWindowTransform(HpdQuartzWindowRot, HpdQuartzWindowPos); + + G4ThreeVector HpdPhCathodePos(RichTbHpdPhCathodeXLocation, RichTbHpdPhCathodeYLocation, RichTbHpdPhCathodeZLocation); + + G4Transform3D HpdPhCathodeTransform(HpdPhCathodeRot, HpdPhCathodePos); + + G4VPhysicalVolume *HpdEnvelopePhys = new G4PVPlacement(HpdEnvelopeTubeTransform, "HpdEnvelopeTubePhys", + RichTbHpdEnvelopeTubeLVol, RichTbHpdSMasterPVol, false, 0); + + G4VPhysicalVolume *HpdEndCapPhys = new G4PVPlacement(HpdEndCapTransform, "HpdEndCapPhys", RichTbHpdEnvelopeEndCapLVol, + RichTbHpdSMasterPVol, false, 0); + + G4VPhysicalVolume *HpdQuartzWPhys = new G4PVPlacement(HpdQuartzWindowTransform, HpdQuartzPhysName, + RichTbHpdQuartzWLVol, RichTbHpdSMasterPVol, false, 0); + + G4VPhysicalVolume *HpdPhCathodePhys = new G4PVPlacement(HpdPhCathodeTransform, HpdPhCathodePhysName, + RichTbHpdPhCathodeLVol, RichTbHpdSMasterPVol, false, 0); + + RichTbHpdEnvelopeTubePVol = HpdEnvelopePhys; + RichTbHpdEnvelopeEndCapPVol = HpdEndCapPhys; + RichTbHpdQuartzWPVol = HpdQuartzWPhys; + RichTbHpdPhCathodePVol = HpdPhCathodePhys; } -void RichTbHpd::constructHpdMasterTree(){ +void RichTbHpd::constructHpdMasterTree() { - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); // RichTbRunConfig* aRunConfig= RichTbRunConfig::getRunConfigInstance(); - + // G4String HpdMasterBoxName = HpdNamesBox[ CurHpdNum ]; // G4String HpdMasterLogVolName= HpdNamesLog[CurHpdNum ]; // G4String HpdMasterPhysVolName = HpdNamesPhys[ CurHpdNum ]; G4String HpdMasterBoxName = HpdNamesBox; - G4String HpdMasterLogVolName= HpdNamesLog; + G4String HpdMasterLogVolName = HpdNamesLog; G4String HpdMasterPhysVolName = HpdNamesPhys; + G4Tubs *HpdMasterTube = new G4Tubs(HpdMasterBoxName, RichTbHpdMasterInnerRad, RichTbHpdMasterRadius, + 0.5 * RichTbHpdMasterZSize, RichTbHpdMasterStartPhi, RichTbHpdMasterEndPhi); + G4Tubs *HpdSMasterTube = new G4Tubs("HPDSMaster", RichTbHpdSMasterInnerRad, RichTbHpdSMasterRadius, + 0.5 * RichTbHpdSMasterZSize, RichTbHpdSMasterStartPhi, RichTbHpdSMasterEndPhi); + + // G4double SiDetXSize= RichTbHpdSiDetXSize[CurHpdNum]; + // G4double SiDetYSize= RichTbHpdSiDetYSize[CurHpdNum]; + // G4double SiDetZSize= RichTbHpdSiDetZSize; + // G4Box* HpdSiDetBox = + // new G4Box("HpdSiDetBox", 0.5*SiDetXSize, + // 0.5*SiDetYSize, + // 0.5*SiDetZSize); + + G4Tubs *HpdSiDetTube = new G4Tubs("HpdSiDetTube", RichTbHpdSiDetInnerRadiusSize, RichTbHpdSiDetRadiusSize, + 0.5 * RichTbHpdSiDetZSize, RichTbHpdSiDetStartPhi, RichTbHpdSiDetEndPhi); + + G4RotationMatrix HpdMasterRotZ, HpdMasterRotY; + G4RotationMatrix HpdSMasterRot; + G4RotationMatrix HpdSiDetRot; + + // G4double CurHpdAdditionalRotZ= + // aRunConfig->getCurrentHpdAdditionalLocalRotationZ; + // G4double CurHpdTotalRotZ= RichTbHpdMasterRotationZAxis+ + // CurHpdAdditionalRotZ; + + G4double CurHpdTotalRotZ = RichTbHpdMasterRotationZAxis; + + // G4double CurHpdAdditionalShiftX= + // aRunConfig->getCurrentHpdAlignmentLocalShiftX; + + // G4double CurHpdAdditionalShiftY= + // aRunConfig->getCurrentHpdAlignmentLocalShiftY; + + // G4cout<<" Hpd Master hpdNUm RotZ Orig Additional " + // <<CurHpdNum<<" "<<RichTbHpdMasterRotationZAxis + // <<" "<< CurHpdAdditionalRotZ<<G4endl; + + // G4cout<<" Hpd MasterInphdetframe hpdNum OrginalX ShiftX OriginalY ShiftY " + // << CurHpdNum<<" "<< RichTbHpdMasterXLocation + // <<" "<<CurHpdAdditionalShiftX<<" " + // << RichTbHpdMasterYLocation<<" " + // << CurHpdAdditionalShiftY<<G4endl; + + // G4double RichTbHpdMasterXPosFinal= RichTbHpdMasterXLocation+ + // CurHpdAdditionalShiftX; + // G4double RichTbHpdMasterYPosFinal= RichTbHpdMasterYLocation+ + // CurHpdAdditionalShiftY; + + G4double RichTbHpdMasterXPosFinal = RichTbHpdMasterXLocation; + G4double RichTbHpdMasterYPosFinal = RichTbHpdMasterYLocation; + + HpdMasterRotZ.rotateZ(CurHpdTotalRotZ); + HpdMasterRotY.rotateY(RichTbHpdMasterRotationYAxis); + HpdSiDetRot.rotateZ(RichTbSiDetRotZ); + + G4ThreeVector HpdMasterPos(RichTbHpdMasterXPosFinal, RichTbHpdMasterYPosFinal, RichTbHpdMasterZLocation); + + G4Transform3D HpdMasterTransform(HpdMasterRotY * HpdMasterRotZ, HpdMasterPos); + + G4ThreeVector HpdSMasterPos(RichTbHpdSMasterXLocation, RichTbHpdSMasterYLocation, RichTbHpdSMasterZLocation); - G4Tubs* HpdMasterTube= - new G4Tubs( HpdMasterBoxName, RichTbHpdMasterInnerRad, - RichTbHpdMasterRadius, - 0.5* RichTbHpdMasterZSize, RichTbHpdMasterStartPhi, - RichTbHpdMasterEndPhi); - G4Tubs* HpdSMasterTube= - new G4Tubs("HPDSMaster", RichTbHpdSMasterInnerRad,RichTbHpdSMasterRadius, - 0.5* RichTbHpdSMasterZSize, RichTbHpdSMasterStartPhi, - RichTbHpdSMasterEndPhi); - - - // G4double SiDetXSize= RichTbHpdSiDetXSize[CurHpdNum]; - // G4double SiDetYSize= RichTbHpdSiDetYSize[CurHpdNum]; - // G4double SiDetZSize= RichTbHpdSiDetZSize; - // G4Box* HpdSiDetBox = - // new G4Box("HpdSiDetBox", 0.5*SiDetXSize, - // 0.5*SiDetYSize, - // 0.5*SiDetZSize); - - G4Tubs* HpdSiDetTube = - new G4Tubs("HpdSiDetTube", RichTbHpdSiDetInnerRadiusSize, RichTbHpdSiDetRadiusSize, - 0.5*RichTbHpdSiDetZSize, RichTbHpdSiDetStartPhi, RichTbHpdSiDetEndPhi); - - - - - G4RotationMatrix HpdMasterRotZ, HpdMasterRotY; - G4RotationMatrix HpdSMasterRot; - G4RotationMatrix HpdSiDetRot; - - // G4double CurHpdAdditionalRotZ= - // aRunConfig->getCurrentHpdAdditionalLocalRotationZ; - //G4double CurHpdTotalRotZ= RichTbHpdMasterRotationZAxis+ - // CurHpdAdditionalRotZ; - - G4double CurHpdTotalRotZ= RichTbHpdMasterRotationZAxis; - - - // G4double CurHpdAdditionalShiftX= - // aRunConfig->getCurrentHpdAlignmentLocalShiftX; - - // G4double CurHpdAdditionalShiftY= - // aRunConfig->getCurrentHpdAlignmentLocalShiftY; - - // G4cout<<" Hpd Master hpdNUm RotZ Orig Additional " - // <<CurHpdNum<<" "<<RichTbHpdMasterRotationZAxis - // <<" "<< CurHpdAdditionalRotZ<<G4endl; - - // G4cout<<" Hpd MasterInphdetframe hpdNum OrginalX ShiftX OriginalY ShiftY " - // << CurHpdNum<<" "<< RichTbHpdMasterXLocation - // <<" "<<CurHpdAdditionalShiftX<<" " - // << RichTbHpdMasterYLocation<<" " - // << CurHpdAdditionalShiftY<<G4endl; - - // G4double RichTbHpdMasterXPosFinal= RichTbHpdMasterXLocation+ - // CurHpdAdditionalShiftX; - // G4double RichTbHpdMasterYPosFinal= RichTbHpdMasterYLocation+ - // CurHpdAdditionalShiftY; - - G4double RichTbHpdMasterXPosFinal= RichTbHpdMasterXLocation; - G4double RichTbHpdMasterYPosFinal= RichTbHpdMasterYLocation; - - - - - HpdMasterRotZ.rotateZ(CurHpdTotalRotZ); - HpdMasterRotY.rotateY(RichTbHpdMasterRotationYAxis); - HpdSiDetRot.rotateZ( RichTbSiDetRotZ) ; - - - - G4ThreeVector HpdMasterPos(RichTbHpdMasterXPosFinal, - RichTbHpdMasterYPosFinal, - RichTbHpdMasterZLocation); - - G4Transform3D HpdMasterTransform(HpdMasterRotY*HpdMasterRotZ, - HpdMasterPos); - - - G4ThreeVector HpdSMasterPos(RichTbHpdSMasterXLocation, - RichTbHpdSMasterYLocation, - RichTbHpdSMasterZLocation); - - G4Transform3D HpdSMasterTransform( HpdSMasterRot,HpdSMasterPos); - - - G4ThreeVector HpdSiDetPos( - RichTbSiDetNominalXLocation+ RichTbSiDetShiftAlongX, - RichTbSiDetNominalYLocation+ RichTbSiDetShiftAlongY, - RichTbHpdSiDetZLocation); - - G4Transform3D HpdSiDetTransform( HpdSiDetRot, HpdSiDetPos); - - - G4LogicalVolume* HpdMasterLog= - new G4LogicalVolume(HpdMasterTube,aMaterial-> getRichTbVaccum(), - HpdMasterLogVolName ,0,0,0); - G4LogicalVolume* HpdSMasterLog= - new G4LogicalVolume(HpdSMasterTube,aMaterial-> getRichTbVaccum(), - "HpdSMasterLog",0,0,0); - G4LogicalVolume* HpdSiDetLog = - new G4LogicalVolume( HpdSiDetTube, - aMaterial->getHpdSiDetMaterial(), - "HpdSiDetLog",0,0,0); - - - - G4VPhysicalVolume* HpdMasterPhys = - new G4PVPlacement(HpdMasterTransform,HpdMasterPhysVolName, - HpdMasterLog, - MotherOfHpd-> getRichTbPhDetSupFrameRightPVol(), - false, CurHpdNum); - - G4VPhysicalVolume* HpdSMasterPhys= - new G4PVPlacement(HpdSMasterTransform,HpdSMasterPhysName, - HpdSMasterLog,HpdMasterPhys,false,0); - - - G4VPhysicalVolume* HpdSiDetPhys= - new G4PVPlacement( HpdSiDetTransform, HpdSiDetPhysName , - HpdSiDetLog , HpdSMasterPhys,false,0); - - RichTbHpdMasterLVol=HpdMasterLog; - RichTbHpdSMasterLVol=HpdSMasterLog; - RichTbHpdSiDetLVol= HpdSiDetLog; - RichTbHpdMasterPVol=HpdMasterPhys; - RichTbHpdSMasterPVol=HpdSMasterPhys; - RichTbHpdSiDetPVol= HpdSiDetPhys; - - + G4Transform3D HpdSMasterTransform(HpdSMasterRot, HpdSMasterPos); + + G4ThreeVector HpdSiDetPos(RichTbSiDetNominalXLocation + RichTbSiDetShiftAlongX, + RichTbSiDetNominalYLocation + RichTbSiDetShiftAlongY, RichTbHpdSiDetZLocation); + + G4Transform3D HpdSiDetTransform(HpdSiDetRot, HpdSiDetPos); + + G4LogicalVolume *HpdMasterLog = + new G4LogicalVolume(HpdMasterTube, aMaterial->getRichTbVaccum(), HpdMasterLogVolName, 0, 0, 0); + G4LogicalVolume *HpdSMasterLog = + new G4LogicalVolume(HpdSMasterTube, aMaterial->getRichTbVaccum(), "HpdSMasterLog", 0, 0, 0); + G4LogicalVolume *HpdSiDetLog = + new G4LogicalVolume(HpdSiDetTube, aMaterial->getHpdSiDetMaterial(), "HpdSiDetLog", 0, 0, 0); + + G4VPhysicalVolume *HpdMasterPhys = + new G4PVPlacement(HpdMasterTransform, HpdMasterPhysVolName, HpdMasterLog, + MotherOfHpd->getRichTbPhDetSupFrameRightPVol(), false, CurHpdNum); + + G4VPhysicalVolume *HpdSMasterPhys = + new G4PVPlacement(HpdSMasterTransform, HpdSMasterPhysName, HpdSMasterLog, HpdMasterPhys, false, 0); + + G4VPhysicalVolume *HpdSiDetPhys = + new G4PVPlacement(HpdSiDetTransform, HpdSiDetPhysName, HpdSiDetLog, HpdSMasterPhys, false, 0); + + RichTbHpdMasterLVol = HpdMasterLog; + RichTbHpdSMasterLVol = HpdSMasterLog; + RichTbHpdSiDetLVol = HpdSiDetLog; + RichTbHpdMasterPVol = HpdMasterPhys; + RichTbHpdSMasterPVol = HpdSMasterPhys; + RichTbHpdSiDetPVol = HpdSiDetPhys; } -void RichTbHpd::constructHpdSiPixel() -{ +void RichTbHpd::constructHpdSiPixel() { RichTbSiPixelPVol.clear(); RichTbSiPixelPVol.reserve(NumPixelTotInSingleHpd); - - - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - //G4double aPixelXSize= RichTbHpdSiDetHexPixelFlatToFlatSize; - + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + + // G4double aPixelXSize= RichTbHpdSiDetHexPixelFlatToFlatSize; + // G4double aPixelYSize= RichTbHpdSiDetHexPixelFlatToFlatSize; - - G4Polyhedra* HpdSiPxHex= new G4Polyhedra("HpdSiPxHex",RichTbHpdSiDetPixelHexPhiStart, - RichTbHpdSiDetPixelHexPhiEnd, RichTbHpdSiDetPixelHexNumSide, - RichTbHpdSiDetPixelHexNumZPlanes,RichTbHpdSiDetPixelHexZPlane, - RichTbHpdSiDetPixelHexRInner, RichTbHpdSiDetPixelHexROuter); - G4LogicalVolume* HpdSiPxLog = - new G4LogicalVolume( HpdSiPxHex, - aMaterial->getHpdSiDetMaterial(), - "HpdSiPxLog",0,0,0); - - //Now for the readout dummy sensitive detector - // This just flags the pixel as active. - // for now all pixels are set active. To deactivate - // specific pixels, the log vol must be created for each - // given pixel and the set to be active as done below. This means - // a separate log vol must be created for every pixel. - - G4bool thisPixelisAlive=true; - if(thisPixelisAlive){ - RichTbHpdRODummySD * DummyHpdSensi = new RichTbHpdRODummySD; - HpdSiPxLog->SetSensitiveDetector(DummyHpdSensi); - } - - - // now positioning the pixels in the Silicon Det. - - G4RotationMatrix HpdSiPixelRot; - HpdSiPixelRot.rotateZ(RichTbHpdSiDetPixelHexRotZ); - - - G4int PixelNumAcc = 0; - - for(G4int iPixelRowY = 0; iPixelRowY < NumHpdPixelRows ; iPixelRowY++) { - - G4double aPixelColStartX = -0.5*(NumHpdPixelInRows[iPixelRowY] - 1 ) * HpdPixelXCenterShift; - G4double curPixelPosY = HpdPixelYCenterStart + HpdPixelYCenterShift *iPixelRowY ; - - for (G4int iPixelColX = 0; iPixelColX < NumHpdPixelInRows[iPixelRowY] ; iPixelColX++) - { - G4double curPixelPosX = aPixelColStartX + iPixelColX * HpdPixelXCenterShift; - - G4int PixelCopyNumber = iPixelColX + PixelNumAcc ; - - - G4ThreeVector HpdSiPixelPos(curPixelPosX, curPixelPosY, RichHpdSiPixelPosZInSiDet); - G4Transform3D HpdSiPixelTransform(HpdSiPixelRot, HpdSiPixelPos); - - G4VPhysicalVolume* HpdSiPxPhys = - new G4PVPlacement( HpdSiPixelTransform,"HpdSiPxPhys", - HpdSiPxLog, RichTbHpdSiDetPVol, false, PixelCopyNumber); - - RichTbSiPixelPVol.push_back(HpdSiPxPhys); - - } - PixelNumAcc += NumHpdPixelInRows[iPixelRowY ]; - - - } - - - - RichTbSiPixelLVol=HpdSiPxLog; - + + G4Polyhedra *HpdSiPxHex = + new G4Polyhedra("HpdSiPxHex", RichTbHpdSiDetPixelHexPhiStart, RichTbHpdSiDetPixelHexPhiEnd, + RichTbHpdSiDetPixelHexNumSide, RichTbHpdSiDetPixelHexNumZPlanes, RichTbHpdSiDetPixelHexZPlane, + RichTbHpdSiDetPixelHexRInner, RichTbHpdSiDetPixelHexROuter); + G4LogicalVolume *HpdSiPxLog = + new G4LogicalVolume(HpdSiPxHex, aMaterial->getHpdSiDetMaterial(), "HpdSiPxLog", 0, 0, 0); + + // Now for the readout dummy sensitive detector + // This just flags the pixel as active. + // for now all pixels are set active. To deactivate + // specific pixels, the log vol must be created for each + // given pixel and the set to be active as done below. This means + // a separate log vol must be created for every pixel. + + G4bool thisPixelisAlive = true; + if (thisPixelisAlive) { + RichTbHpdRODummySD *DummyHpdSensi = new RichTbHpdRODummySD; + HpdSiPxLog->SetSensitiveDetector(DummyHpdSensi); + } + + // now positioning the pixels in the Silicon Det. + + G4RotationMatrix HpdSiPixelRot; + HpdSiPixelRot.rotateZ(RichTbHpdSiDetPixelHexRotZ); + + G4int PixelNumAcc = 0; + + for (G4int iPixelRowY = 0; iPixelRowY < NumHpdPixelRows; iPixelRowY++) { + + G4double aPixelColStartX = -0.5 * (NumHpdPixelInRows[iPixelRowY] - 1) * HpdPixelXCenterShift; + G4double curPixelPosY = HpdPixelYCenterStart + HpdPixelYCenterShift * iPixelRowY; + + for (G4int iPixelColX = 0; iPixelColX < NumHpdPixelInRows[iPixelRowY]; iPixelColX++) { + G4double curPixelPosX = aPixelColStartX + iPixelColX * HpdPixelXCenterShift; + + G4int PixelCopyNumber = iPixelColX + PixelNumAcc; + + G4ThreeVector HpdSiPixelPos(curPixelPosX, curPixelPosY, RichHpdSiPixelPosZInSiDet); + G4Transform3D HpdSiPixelTransform(HpdSiPixelRot, HpdSiPixelPos); + + G4VPhysicalVolume *HpdSiPxPhys = + new G4PVPlacement(HpdSiPixelTransform, "HpdSiPxPhys", HpdSiPxLog, RichTbHpdSiDetPVol, false, PixelCopyNumber); + + RichTbSiPixelPVol.push_back(HpdSiPxPhys); + } + PixelNumAcc += NumHpdPixelInRows[iPixelRowY]; + } + + RichTbSiPixelLVol = HpdSiPxLog; } //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbMaterial.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbMaterial.cc index cf90e7a9a6ebf32c277d253a89c16d0908074c87..995f4e5b5692e3f6d3811fa0bd5cab50b2b02fc2 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbMaterial.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbMaterial.cc @@ -3,17 +3,17 @@ #include "CLHEP/Units/PhysicalConstants.h" // Geant 4 -#include "Geant4/globals.hh" -#include "Geant4/G4Isotope.hh" #include "Geant4/G4Element.hh" #include "Geant4/G4ElementTable.hh" -#include "Geant4/G4Material.hh" -#include "Geant4/G4MaterialTable.hh" -#include "Geant4/G4UnitsTable.hh" -#include "Geant4/G4OpticalSurface.hh" +#include "Geant4/G4Isotope.hh" #include "Geant4/G4LogicalBorderSurface.hh" #include "Geant4/G4LogicalSkinSurface.hh" +#include "Geant4/G4Material.hh" +#include "Geant4/G4MaterialTable.hh" #include "Geant4/G4OpBoundaryProcess.hh" +#include "Geant4/G4OpticalSurface.hh" +#include "Geant4/G4UnitsTable.hh" +#include "Geant4/globals.hh" // STL etc #include <iostream> @@ -25,841 +25,696 @@ //#include "RichTbGasQuWinProperty.hh" #include "RichTbAnalysisManager.hh" +RichTbMaterial *RichTbMaterial::RichTbMaterialInstance = 0; -RichTbMaterial* RichTbMaterial::RichTbMaterialInstance =0; - -RichTbMaterial::RichTbMaterial( ){ +RichTbMaterial::RichTbMaterial() { InitializeRichTbMaterial(); - - RichTbRunConfig* aRunConfig= RichTbRunConfig::getRunConfigInstance(); - + + RichTbRunConfig *aRunConfig = RichTbRunConfig::getRunConfigInstance(); + // RichTbGasQuWinProperty* aRichTbGasQuWinProperty= RichTbGasQuWinProperty::getRichTbGasQuWinPropertyInstance(); HistoRichMaterialProperty(); - G4double a, z, density; //a=mass of a CLHEP::mole; - // z=mean number of protons; - G4String name, symbol; - // G4int isz, isn; //isz= number of protons in an isotope; - //isn= number of nucleons in an isotope; - - G4int numel, natoms; //numel=Number of elements constituting a material. - // G4double abundance; - G4double fractionmass; - G4double temperature, pressure; - G4State aStateGas = kStateGas; - // G4double FactorOne = 1.0; - G4UnitDefinition::BuildUnitsTable(); - - //PhotonEnergy - - G4double PhotonEnergyStep = - (PhotonMaxEnergy - PhotonMinEnergy) / NumPhotWaveLengthBins; - G4double *PhotonMomentum = new G4double[NumPhotWaveLengthBins]; - for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { - PhotonMomentum[ibin] = PhotonMinEnergy + PhotonEnergyStep * ibin; - } - G4int IbMinForCkv= PhotEnerBinEdgeForSafety; - G4int IbMaxForCkv= NumPhotWaveLengthBins-PhotEnerBinEdgeForSafety; - // G4double PhotEneryStepForCkvProd= - // ( PhotonCkvProdMaxEnergy- PhotonCkvProdMinEnergy)/ - // CkvProdNumPhotWaveLengthBins; - - G4double* PhotonMomentumCkvProd = - new G4double[CkvProdNumPhotWaveLengthBins]; - for(G4int ibinc=IbMinForCkv; ibinc<IbMaxForCkv; ibinc++){ - G4int ibp= ibinc- PhotEnerBinEdgeForSafety; - PhotonMomentumCkvProd[ibp]=PhotonMomentum[ibinc]; - } - - - - G4cout << "\nNow Define Elements ..\n" << G4endl; - - // Nitrogen - - a = 14.01 * CLHEP::g / CLHEP::mole; - G4Element *elN = new G4Element(name = "Nitrogen", - symbol = "N", z = 7., a); - - //Oxygen - - a = 16.00 * CLHEP::g / CLHEP::mole; - G4Element *elO = new G4Element(name = "Oxygen", - symbol = "O", z = 8., a); - - //Hydrogen - - a = 1.01 * CLHEP::g / CLHEP::mole; - G4Element *elH = new G4Element(name = "Hydrogen", - symbol = "H", z = 1., a); - - //Carbon - - a = 12.01 * CLHEP::g / CLHEP::mole; - G4Element *elC = new G4Element(name = "Carbon", - symbol = "C", z = 6., a); - - //Silicon - - a = 28.09 * CLHEP::g / CLHEP::mole; - G4Element *elSi = new G4Element(name = "Silicon", - symbol = "Si", z = 14., a); - //Fluorine - a = 18.998 * CLHEP::g / CLHEP::mole; - G4Element *elF = new G4Element(name = "Fluorine", - symbol = "F", z = 9., a); - //Aluminum - a = 26.98 * CLHEP::g / CLHEP::mole; - G4Element *elAL = new G4Element(name = "Aluminium", - symbol = "Al", z = 13., a); - - //Sodium - a = 22.99 * CLHEP::g / CLHEP::mole; - G4Element *elNa = new G4Element(name = "Sodium", - symbol = "Na", z = 11., a); - - //Potassium - a = 39.10 * CLHEP::g / CLHEP::mole; - G4Element *elK = new G4Element(name = "Potassium", - symbol = "K", z = 19., a); - - //Cesium - - a = 132.91 * CLHEP::g / CLHEP::mole; - G4Element *elCs = new G4Element(name = "Cesium", - symbol = "Cs", z = 55., a); - - //Antimony - - a = 121.76 * CLHEP::g / CLHEP::mole; - G4Element *elSb = new G4Element(name = "Antimony", - symbol = "Sb", z = 51., a); - - //Define Materials - G4cout << "\nNow Define Materials ..\n" << G4endl; - // - - //Air at 20 degree C and 1 atm for the ambiet air. - // Also Air as a radiator material for inside the tubes. - //-- - density = 1.205e-03 * CLHEP::g / CLHEP::cm3; - pressure = 1. * CLHEP::atmosphere; - temperature = 293. * CLHEP::kelvin; - G4Material *Air = new G4Material(name = "Air ", density, numel = 2, - aStateGas, temperature, pressure); - Air->AddElement(elN, fractionmass = 0.7); - Air->AddElement(elO, fractionmass = 0.3); - - - RichTbAmbientAir = Air; - - density = 1.205e-03 * CLHEP::g / CLHEP::cm3; - pressure = 1. * CLHEP::atmosphere; - temperature = 293. * CLHEP::kelvin; - G4Material *TAir = new G4Material(name = "TAir ", density, numel = 2, - aStateGas, temperature, pressure); - TAir->AddElement(elN, fractionmass = 0.7); - TAir->AddElement(elO, fractionmass = 0.3); - - G4double *TAirAbsorpLength = new G4double[NumPhotWaveLengthBins]; - G4double *TAirRindex = new G4double[NumPhotWaveLengthBins]; - - for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { - TAirAbsorpLength[ibin] = 1.E32 * CLHEP::mm; - TAirRindex[ibin] = 1.000273; - } - G4MaterialPropertiesTable *TAirMPT = new G4MaterialPropertiesTable(); + G4double a, z, density; // a=mass of a CLHEP::mole; + // z=mean number of protons; + G4String name, symbol; + // G4int isz, isn; //isz= number of protons in an isotope; + // isn= number of nucleons in an isotope; + + G4int numel, natoms; // numel=Number of elements constituting a material. + // G4double abundance; + G4double fractionmass; + G4double temperature, pressure; + G4State aStateGas = kStateGas; + // G4double FactorOne = 1.0; + G4UnitDefinition::BuildUnitsTable(); + + // PhotonEnergy + + G4double PhotonEnergyStep = (PhotonMaxEnergy - PhotonMinEnergy) / NumPhotWaveLengthBins; + G4double *PhotonMomentum = new G4double[NumPhotWaveLengthBins]; + for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { + PhotonMomentum[ibin] = PhotonMinEnergy + PhotonEnergyStep * ibin; + } + G4int IbMinForCkv = PhotEnerBinEdgeForSafety; + G4int IbMaxForCkv = NumPhotWaveLengthBins - PhotEnerBinEdgeForSafety; + // G4double PhotEneryStepForCkvProd= + // ( PhotonCkvProdMaxEnergy- PhotonCkvProdMinEnergy)/ + // CkvProdNumPhotWaveLengthBins; + + G4double *PhotonMomentumCkvProd = new G4double[CkvProdNumPhotWaveLengthBins]; + for (G4int ibinc = IbMinForCkv; ibinc < IbMaxForCkv; ibinc++) { + G4int ibp = ibinc - PhotEnerBinEdgeForSafety; + PhotonMomentumCkvProd[ibp] = PhotonMomentum[ibinc]; + } - TAirMPT->AddProperty("ABSLENGTH", PhotonMomentum, - TAirAbsorpLength, NumPhotWaveLengthBins); + G4cout << "\nNow Define Elements ..\n" << G4endl; - TAirMPT->AddProperty("RINDEX", PhotonMomentum, TAirRindex, - NumPhotWaveLengthBins); + // Nitrogen - TAir->SetMaterialPropertiesTable(TAirMPT); - RichTbTubeAir = TAir; + a = 14.01 * CLHEP::g / CLHEP::mole; + G4Element *elN = new G4Element(name = "Nitrogen", symbol = "N", z = 7., a); - // - // + // Oxygen - density = 1.205e-03 * CLHEP::g / CLHEP::cm3; - pressure = 1. * CLHEP::atmosphere; - temperature = 293. * CLHEP::kelvin; - G4Material *TAirA = new G4Material(name = "TAirA ", density, numel = 2, - aStateGas, temperature, pressure); - TAirA->AddElement(elN, fractionmass = 0.7); - TAirA->AddElement(elO, fractionmass = 0.3); + a = 16.00 * CLHEP::g / CLHEP::mole; + G4Element *elO = new G4Element(name = "Oxygen", symbol = "O", z = 8., a); - G4double *TAirAAbsorpLength = new G4double[NumPhotWaveLengthBins]; - // G4double *TAirARindex = new G4double[NumPhotWaveLengthBins]; + // Hydrogen - for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { - TAirAAbsorpLength[ibin] = 1.E32 * CLHEP::mm; - // TAirARindex[ibin]=1.0; - // TAirARindex[ibin]=1.000273; - } - G4MaterialPropertiesTable *TAirAMPT = new G4MaterialPropertiesTable(); + a = 1.01 * CLHEP::g / CLHEP::mole; + G4Element *elH = new G4Element(name = "Hydrogen", symbol = "H", z = 1., a); - TAirAMPT->AddProperty("ABSLENGTH", PhotonMomentum, - TAirAAbsorpLength, NumPhotWaveLengthBins); + // Carbon - // TAirAMPT->AddProperty("RINDEX", PhotonMomentum, - // TAirARindex,NumPhotWaveLengthBins); + a = 12.01 * CLHEP::g / CLHEP::mole; + G4Element *elC = new G4Element(name = "Carbon", symbol = "C", z = 6., a); - TAirA->SetMaterialPropertiesTable(TAirAMPT); - RichTbAirA = TAirA; + // Silicon - // HistoRichTbMaterialProperties(rAnalysis, rConfig); + a = 28.09 * CLHEP::g / CLHEP::mole; + G4Element *elSi = new G4Element(name = "Silicon", symbol = "Si", z = 14., a); + // Fluorine + a = 18.998 * CLHEP::g / CLHEP::mole; + G4Element *elF = new G4Element(name = "Fluorine", symbol = "F", z = 9., a); + // Aluminum + a = 26.98 * CLHEP::g / CLHEP::mole; + G4Element *elAL = new G4Element(name = "Aluminium", symbol = "Al", z = 13., a); + + // Sodium + a = 22.99 * CLHEP::g / CLHEP::mole; + G4Element *elNa = new G4Element(name = "Sodium", symbol = "Na", z = 11., a); + + // Potassium + a = 39.10 * CLHEP::g / CLHEP::mole; + G4Element *elK = new G4Element(name = "Potassium", symbol = "K", z = 19., a); + + // Cesium + + a = 132.91 * CLHEP::g / CLHEP::mole; + G4Element *elCs = new G4Element(name = "Cesium", symbol = "Cs", z = 55., a); + + // Antimony + + a = 121.76 * CLHEP::g / CLHEP::mole; + G4Element *elSb = new G4Element(name = "Antimony", symbol = "Sb", z = 51., a); + + // Define Materials + G4cout << "\nNow Define Materials ..\n" << G4endl; + // + + // Air at 20 degree C and 1 atm for the ambiet air. + // Also Air as a radiator material for inside the tubes. + //-- + density = 1.205e-03 * CLHEP::g / CLHEP::cm3; + pressure = 1. * CLHEP::atmosphere; + temperature = 293. * CLHEP::kelvin; + G4Material *Air = new G4Material(name = "Air ", density, numel = 2, aStateGas, temperature, pressure); + Air->AddElement(elN, fractionmass = 0.7); + Air->AddElement(elO, fractionmass = 0.3); + + RichTbAmbientAir = Air; + + density = 1.205e-03 * CLHEP::g / CLHEP::cm3; + pressure = 1. * CLHEP::atmosphere; + temperature = 293. * CLHEP::kelvin; + G4Material *TAir = new G4Material(name = "TAir ", density, numel = 2, aStateGas, temperature, pressure); + TAir->AddElement(elN, fractionmass = 0.7); + TAir->AddElement(elO, fractionmass = 0.3); + + G4double *TAirAbsorpLength = new G4double[NumPhotWaveLengthBins]; + G4double *TAirRindex = new G4double[NumPhotWaveLengthBins]; + + for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { + TAirAbsorpLength[ibin] = 1.E32 * CLHEP::mm; + TAirRindex[ibin] = 1.000273; + } + G4MaterialPropertiesTable *TAirMPT = new G4MaterialPropertiesTable(); - //Water - - density=1.000*CLHEP::g/CLHEP::cm3; - G4Material* H2O = new G4Material(name="Water",density,numel=2); - H2O->AddElement(elH,natoms=2); - H2O->AddElement(elO,natoms=1); - G4double *H20AbsorpLength = new G4double[NumPhotWaveLengthBins]; - G4double *H20Rindex = new G4double[NumPhotWaveLengthBins]; + TAirMPT->AddProperty("ABSLENGTH", PhotonMomentum, TAirAbsorpLength, NumPhotWaveLengthBins); - G4MaterialPropertiesTable *H20AMPT = new G4MaterialPropertiesTable(); - for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { - H20AbsorpLength[ibin]=100000.0*CLHEP::mm ; - H20Rindex[ibin]=1.33; - - } - H20AMPT->AddProperty("ABSLENGTH",PhotonMomentum, - H20AbsorpLength, NumPhotWaveLengthBins); + TAirMPT->AddProperty("RINDEX", PhotonMomentum, TAirRindex, NumPhotWaveLengthBins); - H20AMPT->AddProperty("RINDEX", PhotonMomentum, - H20Rindex,NumPhotWaveLengthBins); + TAir->SetMaterialPropertiesTable(TAirMPT); + RichTbTubeAir = TAir; - H2O->SetMaterialPropertiesTable(H20AMPT); - + // + // + density = 1.205e-03 * CLHEP::g / CLHEP::cm3; + pressure = 1. * CLHEP::atmosphere; + temperature = 293. * CLHEP::kelvin; + G4Material *TAirA = new G4Material(name = "TAirA ", density, numel = 2, aStateGas, temperature, pressure); + TAirA->AddElement(elN, fractionmass = 0.7); + TAirA->AddElement(elO, fractionmass = 0.3); + + G4double *TAirAAbsorpLength = new G4double[NumPhotWaveLengthBins]; + // G4double *TAirARindex = new G4double[NumPhotWaveLengthBins]; + + for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { + TAirAAbsorpLength[ibin] = 1.E32 * CLHEP::mm; + // TAirARindex[ibin]=1.0; + // TAirARindex[ibin]=1.000273; + } + G4MaterialPropertiesTable *TAirAMPT = new G4MaterialPropertiesTable(); + TAirAMPT->AddProperty("ABSLENGTH", PhotonMomentum, TAirAAbsorpLength, NumPhotWaveLengthBins); - //Nitrogen gas. + // TAirAMPT->AddProperty("RINDEX", PhotonMomentum, + // TAirARindex,NumPhotWaveLengthBins); - density = 0.8073e-03*CLHEP::g/CLHEP::cm3; + TAirA->SetMaterialPropertiesTable(TAirAMPT); + RichTbAirA = TAirA; + + // HistoRichTbMaterialProperties(rAnalysis, rConfig); + + // Water + + density = 1.000 * CLHEP::g / CLHEP::cm3; + G4Material *H2O = new G4Material(name = "Water", density, numel = 2); + H2O->AddElement(elH, natoms = 2); + H2O->AddElement(elO, natoms = 1); + G4double *H20AbsorpLength = new G4double[NumPhotWaveLengthBins]; + G4double *H20Rindex = new G4double[NumPhotWaveLengthBins]; + + G4MaterialPropertiesTable *H20AMPT = new G4MaterialPropertiesTable(); + for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { + H20AbsorpLength[ibin] = 100000.0 * CLHEP::mm; + H20Rindex[ibin] = 1.33; + } + H20AMPT->AddProperty("ABSLENGTH", PhotonMomentum, H20AbsorpLength, NumPhotWaveLengthBins); + + H20AMPT->AddProperty("RINDEX", PhotonMomentum, H20Rindex, NumPhotWaveLengthBins); + + H2O->SetMaterialPropertiesTable(H20AMPT); + + // Nitrogen gas. + + density = 0.8073e-03 * CLHEP::g / CLHEP::cm3; // pressure=1.*CLHEP::atmosphere; // temperature=293.*CLHEP::kelvin; - pressure = aRunConfig -> getNitrogenPressure(); - - temperature = aRunConfig ->getNitrogenTemperature(); - + pressure = aRunConfig->getNitrogenPressure(); - G4Material* NitrogenGas = new G4Material(name=NitrogenGasMaterialName, - density, numel=1, - kStateGas,temperature,pressure); - NitrogenGas->AddElement(elN, natoms=2); + temperature = aRunConfig->getNitrogenTemperature(); - G4double* NitrogenGasAbsorpLength=new G4double[NumPhotWaveLengthBins]; - G4double* NitrogenGasRindex=new G4double[NumPhotWaveLengthBins]; - G4double* NitrogenGasPhotMom=new G4double[NumPhotWaveLengthBins]; + G4Material *NitrogenGas = + new G4Material(name = NitrogenGasMaterialName, density, numel = 1, kStateGas, temperature, pressure); + NitrogenGas->AddElement(elN, natoms = 2); - G4double* NitrogenGasCkvProdRindex= - new G4double[CkvProdNumPhotWaveLengthBins]; - G4double* NitrogenGasPhotMomCkvProd= - new G4double[CkvProdNumPhotWaveLengthBins]; - + G4double *NitrogenGasAbsorpLength = new G4double[NumPhotWaveLengthBins]; + G4double *NitrogenGasRindex = new G4double[NumPhotWaveLengthBins]; + G4double *NitrogenGasPhotMom = new G4double[NumPhotWaveLengthBins]; - std::vector<G4double>N2RefInd= InitN2RefIndex(pressure,temperature); - std::vector<G4double>N2RefPhotMom=InitN2RefPhotMom(); + G4double *NitrogenGasCkvProdRindex = new G4double[CkvProdNumPhotWaveLengthBins]; + G4double *NitrogenGasPhotMomCkvProd = new G4double[CkvProdNumPhotWaveLengthBins]; + std::vector<G4double> N2RefInd = InitN2RefIndex(pressure, temperature); + std::vector<G4double> N2RefPhotMom = InitN2RefPhotMom(); - for (G4int ibin=0; ibin<NumPhotWaveLengthBins; ibin++){ - NitrogenGasAbsorpLength[ibin]=1.E32*CLHEP::mm; - - NitrogenGasRindex[ibin]=N2RefInd[ibin]; - NitrogenGasPhotMom[ibin]=N2RefPhotMom[ibin]; - // G4cout<<" N2 ref index in RichMaterial "<<ibin<<" "<< NitrogenGasPhotMom[ibin] <<" "<<NitrogenGasRindex[ibin]<<G4endl; + for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { + NitrogenGasAbsorpLength[ibin] = 1.E32 * CLHEP::mm; + NitrogenGasRindex[ibin] = N2RefInd[ibin]; + NitrogenGasPhotMom[ibin] = N2RefPhotMom[ibin]; + // G4cout<<" N2 ref index in RichMaterial "<<ibin<<" "<< NitrogenGasPhotMom[ibin] <<" + // "<<NitrogenGasRindex[ibin]<<G4endl; } - - for (G4int ibina=IbMinForCkv; ibina <IbMaxForCkv ; ibina++){ - G4int ibinp= ibina-PhotEnerBinEdgeForSafety; - - NitrogenGasCkvProdRindex[ibinp]= NitrogenGasRindex[ibina]; - NitrogenGasPhotMomCkvProd[ibinp]= NitrogenGasPhotMom[ibina]; - + + for (G4int ibina = IbMinForCkv; ibina < IbMaxForCkv; ibina++) { + G4int ibinp = ibina - PhotEnerBinEdgeForSafety; + + NitrogenGasCkvProdRindex[ibinp] = NitrogenGasRindex[ibina]; + NitrogenGasPhotMomCkvProd[ibinp] = NitrogenGasPhotMom[ibina]; } - - G4MaterialPropertiesTable* NitrogenGasMPT = - new G4MaterialPropertiesTable(); - NitrogenGasMPT->AddProperty("ABSLENGTH",NitrogenGasPhotMom, - NitrogenGasAbsorpLength,NumPhotWaveLengthBins); + G4MaterialPropertiesTable *NitrogenGasMPT = new G4MaterialPropertiesTable(); - NitrogenGasMPT->AddProperty("RINDEX", NitrogenGasPhotMom, - NitrogenGasRindex,NumPhotWaveLengthBins); + NitrogenGasMPT->AddProperty("ABSLENGTH", NitrogenGasPhotMom, NitrogenGasAbsorpLength, NumPhotWaveLengthBins); - NitrogenGasMPT->AddProperty("CKVRNDX", NitrogenGasPhotMomCkvProd , - NitrogenGasCkvProdRindex,CkvProdNumPhotWaveLengthBins); + NitrogenGasMPT->AddProperty("RINDEX", NitrogenGasPhotMom, NitrogenGasRindex, NumPhotWaveLengthBins); - NitrogenGas->SetMaterialPropertiesTable(NitrogenGasMPT); - RichTbNitrogenGas = NitrogenGas; + NitrogenGasMPT->AddProperty("CKVRNDX", NitrogenGasPhotMomCkvProd, NitrogenGasCkvProdRindex, + CkvProdNumPhotWaveLengthBins); - // test printout + NitrogenGas->SetMaterialPropertiesTable(NitrogenGasMPT); + RichTbNitrogenGas = NitrogenGas; - // G4MaterialPropertyVector* theRefractionIndexVector = - // NitrogenGasMPT ->GetProperty("CKVRNDX"); + // test printout - // G4int itb=0; - // theRefractionIndexVector->ResetIterator(); - // while(++(*theRefractionIndexVector)) + // G4MaterialPropertyVector* theRefractionIndexVector = + // NitrogenGasMPT ->GetProperty("CKVRNDX"); - // { - // itb++; - - // G4double currentPM = theRefractionIndexVector->GetPhotonMomentum(); - // G4double currentRI=theRefractionIndexVector->GetProperty(); + // G4int itb=0; + // theRefractionIndexVector->ResetIterator(); + // while(++(*theRefractionIndexVector)) + // { + // itb++; - // G4cout<<" Richtbmaterial N2refindVect "<< itb<<" "<< currentPM<<" "<<currentRI - // <<G4endl; + // G4double currentPM = theRefractionIndexVector->GetPhotonMomentum(); + // G4double currentRI=theRefractionIndexVector->GetProperty(); - // } + // G4cout<<" Richtbmaterial N2refindVect "<< itb<<" "<< currentPM<<" "<<currentRI + // <<G4endl; + + // } // end testprintout - //c4f10 gas. + // c4f10 gas. - density = 0.01195*CLHEP::g/CLHEP::cm3; + density = 0.01195 * CLHEP::g / CLHEP::cm3; // pressure=1.*CLHEP::atmosphere; // temperature=293.*CLHEP::kelvin; - pressure = aRunConfig -> getc4f10Pressure(); - - temperature = aRunConfig ->getc4f10Temperature(); - - - G4Material* c4f10Gas = new G4Material(name=c4f10GasMaterialName, - density, numel=2, - kStateGas,temperature,pressure); - c4f10Gas->AddElement(elC, natoms=4); - c4f10Gas->AddElement(elF, natoms=10); + pressure = aRunConfig->getc4f10Pressure(); - G4double* c4f10GasAbsorpLength=new G4double[NumPhotWaveLengthBins]; - G4double* c4f10GasRindex=new G4double[NumPhotWaveLengthBins]; - G4double* c4f10GasPhotMom=new G4double[NumPhotWaveLengthBins]; + temperature = aRunConfig->getc4f10Temperature(); - G4double* c4f10GasCkvProdRindex= - new G4double[CkvProdNumPhotWaveLengthBins]; - G4double* c4f10GasPhotMomCkvProd= - new G4double[CkvProdNumPhotWaveLengthBins]; - + G4Material *c4f10Gas = + new G4Material(name = c4f10GasMaterialName, density, numel = 2, kStateGas, temperature, pressure); + c4f10Gas->AddElement(elC, natoms = 4); + c4f10Gas->AddElement(elF, natoms = 10); - std::vector<G4double>c4f10RefInd= Initc4f10RefIndex(pressure,temperature); - std::vector<G4double>c4f10RefPhotMom=Initc4f10RefPhotMom(); + G4double *c4f10GasAbsorpLength = new G4double[NumPhotWaveLengthBins]; + G4double *c4f10GasRindex = new G4double[NumPhotWaveLengthBins]; + G4double *c4f10GasPhotMom = new G4double[NumPhotWaveLengthBins]; + G4double *c4f10GasCkvProdRindex = new G4double[CkvProdNumPhotWaveLengthBins]; + G4double *c4f10GasPhotMomCkvProd = new G4double[CkvProdNumPhotWaveLengthBins]; - for (G4int ibin=0; ibin<NumPhotWaveLengthBins; ibin++){ - c4f10GasAbsorpLength[ibin]=1.E32*CLHEP::mm; + std::vector<G4double> c4f10RefInd = Initc4f10RefIndex(pressure, temperature); + std::vector<G4double> c4f10RefPhotMom = Initc4f10RefPhotMom(); - c4f10GasRindex[ibin]=c4f10RefInd[ibin]; - c4f10GasPhotMom[ibin]=c4f10RefPhotMom[ibin]; + for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { + c4f10GasAbsorpLength[ibin] = 1.E32 * CLHEP::mm; + c4f10GasRindex[ibin] = c4f10RefInd[ibin]; + c4f10GasPhotMom[ibin] = c4f10RefPhotMom[ibin]; } - - for (G4int ibina=IbMinForCkv; ibina <IbMaxForCkv ; ibina++){ - G4int ibinp= ibina-PhotEnerBinEdgeForSafety; - - c4f10GasCkvProdRindex[ibinp]= c4f10GasRindex[ibina]; - c4f10GasPhotMomCkvProd[ibinp]= c4f10GasPhotMom[ibina]; - - } - - G4MaterialPropertiesTable* c4f10GasMPT = - new G4MaterialPropertiesTable(); - - c4f10GasMPT->AddProperty("ABSLENGTH",c4f10GasPhotMom, - c4f10GasAbsorpLength,NumPhotWaveLengthBins); - - c4f10GasMPT->AddProperty("RINDEX", c4f10GasPhotMom, - c4f10GasRindex,NumPhotWaveLengthBins); - - c4f10GasMPT->AddProperty("CKVRNDX", c4f10GasPhotMomCkvProd , - c4f10GasCkvProdRindex,CkvProdNumPhotWaveLengthBins); - - c4f10Gas->SetMaterialPropertiesTable(c4f10GasMPT); - RichTbc4f10Gas = c4f10Gas; - - - // MirrorQuartz. -//Sio2 -//There is a quartz for the mirror and - //another quartz which is used in aerogel and - // yet another quartz used for the quartz window. - //Mirrorquartz - - density=2.200*CLHEP::g/CLHEP::cm3; - G4Material* SiO2MirrorQuartz = new G4Material(name="MirrorQuartz", - density,numel=2); - SiO2MirrorQuartz->AddElement(elSi,natoms=1); - SiO2MirrorQuartz->AddElement(elO,natoms=2); - - // G4double* MirrorQuartzRindex=new G4double[NumPhotWaveLengthBins]; - G4double* MirrorQuartzAbsorpLength=new G4double[NumPhotWaveLengthBins]; - for (G4int ibin=0; ibin<NumPhotWaveLengthBins; ibin++){ - MirrorQuartzAbsorpLength[ibin]=0.01*CLHEP::mm; - // MirrorQuartzRindex[ibin]=1.40; + + for (G4int ibina = IbMinForCkv; ibina < IbMaxForCkv; ibina++) { + G4int ibinp = ibina - PhotEnerBinEdgeForSafety; + + c4f10GasCkvProdRindex[ibinp] = c4f10GasRindex[ibina]; + c4f10GasPhotMomCkvProd[ibinp] = c4f10GasPhotMom[ibina]; } - G4MaterialPropertiesTable* MirrorQuartzMPT = - new G4MaterialPropertiesTable(); + G4MaterialPropertiesTable *c4f10GasMPT = new G4MaterialPropertiesTable(); - MirrorQuartzMPT->AddProperty("ABSLENGTH",PhotonMomentum, - MirrorQuartzAbsorpLength,NumPhotWaveLengthBins); + c4f10GasMPT->AddProperty("ABSLENGTH", c4f10GasPhotMom, c4f10GasAbsorpLength, NumPhotWaveLengthBins); + c4f10GasMPT->AddProperty("RINDEX", c4f10GasPhotMom, c4f10GasRindex, NumPhotWaveLengthBins); - // MirrorQuartzMPT->AddProperty("RINDEX", PhotonMomentum, - // MirrorQuartzRindex,NumPhotWaveLengthBins); + c4f10GasMPT->AddProperty("CKVRNDX", c4f10GasPhotMomCkvProd, c4f10GasCkvProdRindex, CkvProdNumPhotWaveLengthBins); - SiO2MirrorQuartz->SetMaterialPropertiesTable(MirrorQuartzMPT); - RichTbMirrorQuartz=SiO2MirrorQuartz; - // - // GasQuWindowQuartz. -//Sio2 - - density=2.200*CLHEP::g/CLHEP::cm3; - G4Material* SiO2GasWinQuartz = new G4Material(name="GasWinQuartz", - density,numel=2); - SiO2GasWinQuartz->AddElement(elSi,natoms=1); - SiO2GasWinQuartz->AddElement(elO,natoms=2); - - // G4int CurGasQuWinAbsorpNumBins=aRichTbGasQuWinProperty->getGasQuWinAbsorpNumBins(); - // G4double* GasWinQuartzAbsorpLength=new G4double[CurGasQuWinAbsorpNumBins]; - // G4double* GasWinQuAbsorpPhotonMomentum= new G4double[ CurGasQuWinAbsorpNumBins]; - // std::vector<G4double> GasQuWinAbsorpLengthVect= aRichTbGasQuWinProperty-> getGasQuWinAbsorpLength(); - // std::vector<G4double> GasWinQuAbsorpPhotonMomentumVect=aRichTbGasQuWinProperty-> getGasQuWinAbsorpPhMom(); - // for(G4int ibina=0; ibina<CurGasQuWinAbsorpNumBins; ibina++) { - - // GasWinQuartzAbsorpLength[ibina]=1.E32*CLHEP::mm; - // GasWinQuartzAbsorpLength[ibina]=GasQuWinAbsorpLengthVect[ibina]; - // GasWinQuAbsorpPhotonMomentum[ibina]= GasWinQuAbsorpPhotonMomentumVect[ibina]; - // } + c4f10Gas->SetMaterialPropertiesTable(c4f10GasMPT); + RichTbc4f10Gas = c4f10Gas; - // now for the refractive index of GasQuWindow. - // G4double* GasWinQuartzRindex=new G4double[NumPhotWaveLengthBins]; - // for (G4int ibin=0; ibin<NumPhotWaveLengthBins; ibin++){ - // GasWinQuartzRindex[ibin]=1.40; - // GasWinQuartzRindex[ibin]=GasQuartzWindowNominalRefIndex; - // } - - - //4MaterialPropertiesTable* GasWinQuartzMPT = - // new G4MaterialPropertiesTable(); - - - // GasWinQuartzMPT->AddProperty("ABSLENGTH",GasWinQuAbsorpPhotonMomentum, - // GasWinQuartzAbsorpLength,CurGasQuWinAbsorpNumBins); - - - // GasWinQuartzMPT->AddProperty("RINDEX", PhotonMomentum, - // GasWinQuartzRindex,NumPhotWaveLengthBins); - - // SiO2GasWinQuartz->SetMaterialPropertiesTable(GasWinQuartzMPT); - // RichTbGasWinQuartz=SiO2GasWinQuartz; - -//Vaccum -// - density=CLHEP::universe_mean_density; //from PhysicalConstants.h - a=1.01*CLHEP::g/CLHEP::mole; - pressure=1.e-19*CLHEP::pascal; - temperature=0.1*CLHEP::kelvin; -// G4Material* vaccum = new G4Material(name="Galactic",z=1.,a,density, - G4Material* vaccum = new G4Material(name="Galactic",density,numel=1, - kStateGas,temperature,pressure); - vaccum->AddMaterial(Air, fractionmass=1.); - G4double *vacAbsorpLength = new G4double[NumPhotWaveLengthBins]; - G4double *vacRindex = new G4double[NumPhotWaveLengthBins]; - for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { - vacAbsorpLength[ibin] = 1.E32 * CLHEP::mm; - vacRindex[ibin] = 1.000273; - } - G4MaterialPropertiesTable *vacMPT = new G4MaterialPropertiesTable(); + // MirrorQuartz. + // Sio2 + // There is a quartz for the mirror and + // another quartz which is used in aerogel and + // yet another quartz used for the quartz window. + // Mirrorquartz - vacMPT->AddProperty("ABSLENGTH", PhotonMomentum, - vacAbsorpLength, NumPhotWaveLengthBins); + density = 2.200 * CLHEP::g / CLHEP::cm3; + G4Material *SiO2MirrorQuartz = new G4Material(name = "MirrorQuartz", density, numel = 2); + SiO2MirrorQuartz->AddElement(elSi, natoms = 1); + SiO2MirrorQuartz->AddElement(elO, natoms = 2); - vacMPT->AddProperty("RINDEX", PhotonMomentum, vacRindex, - NumPhotWaveLengthBins); + // G4double* MirrorQuartzRindex=new G4double[NumPhotWaveLengthBins]; + G4double *MirrorQuartzAbsorpLength = new G4double[NumPhotWaveLengthBins]; + for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { + MirrorQuartzAbsorpLength[ibin] = 0.01 * CLHEP::mm; + // MirrorQuartzRindex[ibin]=1.40; + } + G4MaterialPropertiesTable *MirrorQuartzMPT = new G4MaterialPropertiesTable(); - vaccum->SetMaterialPropertiesTable(vacMPT); - - RichTbVaccum=vaccum; + MirrorQuartzMPT->AddProperty("ABSLENGTH", PhotonMomentum, MirrorQuartzAbsorpLength, NumPhotWaveLengthBins); - // G4cout<<"Now define Aluminium "<<G4endl; - -//Aluminium - density=2.7*CLHEP::g/CLHEP::cm3; - G4Material* Aluminium =new G4Material(name="Aluminium",density,numel=1); - Aluminium->AddElement(elAL,natoms=1); - + // MirrorQuartzMPT->AddProperty("RINDEX", PhotonMomentum, + // MirrorQuartzRindex,NumPhotWaveLengthBins); - G4double* AluminiumAbsorpLength= new G4double[NumPhotWaveLengthBins]; + SiO2MirrorQuartz->SetMaterialPropertiesTable(MirrorQuartzMPT); + RichTbMirrorQuartz = SiO2MirrorQuartz; + // + // GasQuWindowQuartz. + // Sio2 + + density = 2.200 * CLHEP::g / CLHEP::cm3; + G4Material *SiO2GasWinQuartz = new G4Material(name = "GasWinQuartz", density, numel = 2); + SiO2GasWinQuartz->AddElement(elSi, natoms = 1); + SiO2GasWinQuartz->AddElement(elO, natoms = 2); + + // G4int CurGasQuWinAbsorpNumBins=aRichTbGasQuWinProperty->getGasQuWinAbsorpNumBins(); + // G4double* GasWinQuartzAbsorpLength=new G4double[CurGasQuWinAbsorpNumBins]; + // G4double* GasWinQuAbsorpPhotonMomentum= new G4double[ CurGasQuWinAbsorpNumBins]; + // std::vector<G4double> GasQuWinAbsorpLengthVect= aRichTbGasQuWinProperty-> getGasQuWinAbsorpLength(); + // std::vector<G4double> GasWinQuAbsorpPhotonMomentumVect=aRichTbGasQuWinProperty-> getGasQuWinAbsorpPhMom(); + // for(G4int ibina=0; ibina<CurGasQuWinAbsorpNumBins; ibina++) { + + // GasWinQuartzAbsorpLength[ibina]=1.E32*CLHEP::mm; + // GasWinQuartzAbsorpLength[ibina]=GasQuWinAbsorpLengthVect[ibina]; + // GasWinQuAbsorpPhotonMomentum[ibina]= GasWinQuAbsorpPhotonMomentumVect[ibina]; + // } - for (G4int ibin=0; ibin<NumPhotWaveLengthBins; ibin++){ - AluminiumAbsorpLength[ibin]=0.0*CLHEP::mm; + // now for the refractive index of GasQuWindow. + // G4double* GasWinQuartzRindex=new G4double[NumPhotWaveLengthBins]; + // for (G4int ibin=0; ibin<NumPhotWaveLengthBins; ibin++){ + // GasWinQuartzRindex[ibin]=1.40; + // GasWinQuartzRindex[ibin]=GasQuartzWindowNominalRefIndex; + // } + + // 4MaterialPropertiesTable* GasWinQuartzMPT = + // new G4MaterialPropertiesTable(); + + // GasWinQuartzMPT->AddProperty("ABSLENGTH",GasWinQuAbsorpPhotonMomentum, + // GasWinQuartzAbsorpLength,CurGasQuWinAbsorpNumBins); + + // GasWinQuartzMPT->AddProperty("RINDEX", PhotonMomentum, + // GasWinQuartzRindex,NumPhotWaveLengthBins); + + // SiO2GasWinQuartz->SetMaterialPropertiesTable(GasWinQuartzMPT); + // RichTbGasWinQuartz=SiO2GasWinQuartz; + + // Vaccum + // + density = CLHEP::universe_mean_density; // from PhysicalConstants.h + a = 1.01 * CLHEP::g / CLHEP::mole; + pressure = 1.e-19 * CLHEP::pascal; + temperature = 0.1 * CLHEP::kelvin; + // G4Material* vaccum = new G4Material(name="Galactic",z=1.,a,density, + G4Material *vaccum = new G4Material(name = "Galactic", density, numel = 1, kStateGas, temperature, pressure); + vaccum->AddMaterial(Air, fractionmass = 1.); + G4double *vacAbsorpLength = new G4double[NumPhotWaveLengthBins]; + G4double *vacRindex = new G4double[NumPhotWaveLengthBins]; + for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { + vacAbsorpLength[ibin] = 1.E32 * CLHEP::mm; + vacRindex[ibin] = 1.000273; } + G4MaterialPropertiesTable *vacMPT = new G4MaterialPropertiesTable(); + + vacMPT->AddProperty("ABSLENGTH", PhotonMomentum, vacAbsorpLength, NumPhotWaveLengthBins); + + vacMPT->AddProperty("RINDEX", PhotonMomentum, vacRindex, NumPhotWaveLengthBins); + + vaccum->SetMaterialPropertiesTable(vacMPT); + RichTbVaccum = vaccum; - G4MaterialPropertiesTable* AluminiumMPT = - new G4MaterialPropertiesTable(); + // G4cout<<"Now define Aluminium "<<G4endl; + // Aluminium + density = 2.7 * CLHEP::g / CLHEP::cm3; + G4Material *Aluminium = new G4Material(name = "Aluminium", density, numel = 1); + Aluminium->AddElement(elAL, natoms = 1); - AluminiumMPT->AddProperty("ABSLENGTH",PhotonMomentum, - AluminiumAbsorpLength,NumPhotWaveLengthBins); + G4double *AluminiumAbsorpLength = new G4double[NumPhotWaveLengthBins]; + for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { + AluminiumAbsorpLength[ibin] = 0.0 * CLHEP::mm; + } + + G4MaterialPropertiesTable *AluminiumMPT = new G4MaterialPropertiesTable(); + AluminiumMPT->AddProperty("ABSLENGTH", PhotonMomentum, AluminiumAbsorpLength, NumPhotWaveLengthBins); Aluminium->SetMaterialPropertiesTable(AluminiumMPT); - RichTbAluminium=Aluminium; + RichTbAluminium = Aluminium; // generic carbon - density= 2.0*CLHEP::g/CLHEP::cm3; - G4Material* CarbonMaterial = - new G4Material (name="CarbonMaterial", - density,numel=1 ); - CarbonMaterial->AddElement(elC, natoms=1); - RichTbCarbon= CarbonMaterial; - - - -// Kovar - density=2.7*CLHEP::g/CLHEP::cm3; - G4Material* Kovar =new G4Material(PMTEnvelopeMaterialName,density,numel=1); - Kovar->AddElement(elAL,natoms=1); - - PMTTubeEnvelopeMaterial=Kovar; - HpdTubeEnvelopeMaterial=Kovar; - + density = 2.0 * CLHEP::g / CLHEP::cm3; + G4Material *CarbonMaterial = new G4Material(name = "CarbonMaterial", density, numel = 1); + CarbonMaterial->AddElement(elC, natoms = 1); + RichTbCarbon = CarbonMaterial; + + // Kovar + density = 2.7 * CLHEP::g / CLHEP::cm3; + G4Material *Kovar = new G4Material(PMTEnvelopeMaterialName, density, numel = 1); + Kovar->AddElement(elAL, natoms = 1); + + PMTTubeEnvelopeMaterial = Kovar; + HpdTubeEnvelopeMaterial = Kovar; + // Silicon - - density=2.33*CLHEP::g/CLHEP::cm3; - //"PMTSilicon" - G4Material* Silicon =new G4Material(name= PMTAnodeMaterialName, - density,numel=1); - Silicon->AddElement(elSi,natoms=1); - PMTAnodeMaterial=Silicon; + density = 2.33 * CLHEP::g / CLHEP::cm3; + //"PMTSilicon" + G4Material *Silicon = new G4Material(name = PMTAnodeMaterialName, density, numel = 1); + Silicon->AddElement(elSi, natoms = 1); + PMTAnodeMaterial = Silicon; - G4Material* HpdSilicon =new G4Material(name= HpdSiDetMaterialName,density,numel=1); - HpdSilicon->AddElement(elSi,natoms=1); + G4Material *HpdSilicon = new G4Material(name = HpdSiDetMaterialName, density, numel = 1); + HpdSilicon->AddElement(elSi, natoms = 1); HpdSiDetMaterial = HpdSilicon; - // hpd quartz window - density=2.200*CLHEP::g/CLHEP::cm3; - //"PMTWindowQuartz" - G4Material* PMTWindowQuartz = new G4Material(name=PmtQuartzWMaterialName, - density,numel=2); - PMTWindowQuartz->AddElement(elSi,natoms=1); - PMTWindowQuartz->AddElement(elO,natoms=2); - - G4double* PMTWindowQuartzRindex=new G4double[PMTQuartzRefIndNumBins]; //31 bin - G4double* PMTWindowQuartzPhMom = new G4double[PMTQuartzRefIndNumBins]; - G4double* PMTWindowQuartzAbsorpLength=new G4double[NumPhotWaveLengthBins]; - for (G4int ibin=0; ibin<NumPhotWaveLengthBins; ibin++){ - PMTWindowQuartzAbsorpLength[ibin]=1.E32*CLHEP::mm; - // PMTWindowQuartzRindex[ibin]=1.40; + density = 2.200 * CLHEP::g / CLHEP::cm3; + //"PMTWindowQuartz" + G4Material *PMTWindowQuartz = new G4Material(name = PmtQuartzWMaterialName, density, numel = 2); + PMTWindowQuartz->AddElement(elSi, natoms = 1); + PMTWindowQuartz->AddElement(elO, natoms = 2); + + G4double *PMTWindowQuartzRindex = new G4double[PMTQuartzRefIndNumBins]; // 31 bin + G4double *PMTWindowQuartzPhMom = new G4double[PMTQuartzRefIndNumBins]; + G4double *PMTWindowQuartzAbsorpLength = new G4double[NumPhotWaveLengthBins]; + for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { + PMTWindowQuartzAbsorpLength[ibin] = 1.E32 * CLHEP::mm; + // PMTWindowQuartzRindex[ibin]=1.40; } - for(G4int ibina=0; ibina <PMTQuartzRefIndNumBins; ibina++ ) { - PMTWindowQuartzPhMom[ibina]= - PhotWaveLengthToMom/ - (PMTQuartzRefWaveLenValues[ibina]*PMTQuartzRefWaveLenUnits); - PMTWindowQuartzRindex[ibina] = PMTQuartzRefIndexValues[ibina]; - + for (G4int ibina = 0; ibina < PMTQuartzRefIndNumBins; ibina++) { + PMTWindowQuartzPhMom[ibina] = PhotWaveLengthToMom / (PMTQuartzRefWaveLenValues[ibina] * PMTQuartzRefWaveLenUnits); + PMTWindowQuartzRindex[ibina] = PMTQuartzRefIndexValues[ibina]; } - - G4MaterialPropertiesTable* PMTWindowQuartzMPT = - new G4MaterialPropertiesTable(); - PMTWindowQuartzMPT->AddProperty("ABSLENGTH",PhotonMomentum, - PMTWindowQuartzAbsorpLength,NumPhotWaveLengthBins); + G4MaterialPropertiesTable *PMTWindowQuartzMPT = new G4MaterialPropertiesTable(); + + PMTWindowQuartzMPT->AddProperty("ABSLENGTH", PhotonMomentum, PMTWindowQuartzAbsorpLength, NumPhotWaveLengthBins); - PMTWindowQuartzMPT->AddProperty("RINDEX",PMTWindowQuartzPhMom , - PMTWindowQuartzRindex,PMTQuartzRefIndNumBins); + PMTWindowQuartzMPT->AddProperty("RINDEX", PMTWindowQuartzPhMom, PMTWindowQuartzRindex, PMTQuartzRefIndNumBins); PMTWindowQuartz->SetMaterialPropertiesTable(PMTWindowQuartzMPT); - PMTQuartzWindowMaterial=PMTWindowQuartz; + PMTQuartzWindowMaterial = PMTWindowQuartz; - - //"HPDWindowQuartz" + //"HPDWindowQuartz" - G4Material* HPDWindowQuartz = new G4Material(name= HpdQuartzWMaterialName,density,numel=2); - HPDWindowQuartz->AddElement(elSi,natoms=1); - HPDWindowQuartz->AddElement(elO,natoms=2); - - G4double* HPDWindowQuartzRindex=new G4double[HPDQuartzRefIndNumBins]; //31 bin - G4double* HPDWindowQuartzPhMom = new G4double[HPDQuartzRefIndNumBins]; + G4Material *HPDWindowQuartz = new G4Material(name = HpdQuartzWMaterialName, density, numel = 2); + HPDWindowQuartz->AddElement(elSi, natoms = 1); + HPDWindowQuartz->AddElement(elO, natoms = 2); - G4double* HPDWindowQuartzAbsorpLength=new G4double[NumPhotWaveLengthBins]; + G4double *HPDWindowQuartzRindex = new G4double[HPDQuartzRefIndNumBins]; // 31 bin + G4double *HPDWindowQuartzPhMom = new G4double[HPDQuartzRefIndNumBins]; - for (G4int ibin=0; ibin<NumPhotWaveLengthBins; ibin++){ - HPDWindowQuartzAbsorpLength[ibin]=1.E32*CLHEP::mm; - // PMTWindowQuartzRindex[ibin]=1.40; + G4double *HPDWindowQuartzAbsorpLength = new G4double[NumPhotWaveLengthBins]; + + for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { + HPDWindowQuartzAbsorpLength[ibin] = 1.E32 * CLHEP::mm; + // PMTWindowQuartzRindex[ibin]=1.40; } - for(G4int ibina=0; ibina <HPDQuartzRefIndNumBins; ibina++ ) { - HPDWindowQuartzPhMom[ibina]= - PhotWaveLengthToMom/ - (HPDQuartzRefWaveLenValues[ibina]*HPDQuartzRefWaveLenUnits); - HPDWindowQuartzRindex[ibina] = HPDQuartzRefIndexValues[ibina]; - + for (G4int ibina = 0; ibina < HPDQuartzRefIndNumBins; ibina++) { + HPDWindowQuartzPhMom[ibina] = PhotWaveLengthToMom / (HPDQuartzRefWaveLenValues[ibina] * HPDQuartzRefWaveLenUnits); + HPDWindowQuartzRindex[ibina] = HPDQuartzRefIndexValues[ibina]; } - - - G4MaterialPropertiesTable* HPDWindowQuartzMPT = - new G4MaterialPropertiesTable(); - HPDWindowQuartzMPT->AddProperty("ABSLENGTH",PhotonMomentum, - HPDWindowQuartzAbsorpLength,NumPhotWaveLengthBins); + G4MaterialPropertiesTable *HPDWindowQuartzMPT = new G4MaterialPropertiesTable(); - HPDWindowQuartzMPT->AddProperty("RINDEX",HPDWindowQuartzPhMom , - HPDWindowQuartzRindex,HPDQuartzRefIndNumBins); + HPDWindowQuartzMPT->AddProperty("ABSLENGTH", PhotonMomentum, HPDWindowQuartzAbsorpLength, NumPhotWaveLengthBins); - HPDWindowQuartz->SetMaterialPropertiesTable(HPDWindowQuartzMPT); + HPDWindowQuartzMPT->AddProperty("RINDEX", HPDWindowQuartzPhMom, HPDWindowQuartzRindex, HPDQuartzRefIndNumBins); - HPDQuartzWindowMaterial=HPDWindowQuartz; + HPDWindowQuartz->SetMaterialPropertiesTable(HPDWindowQuartzMPT); + HPDQuartzWindowMaterial = HPDWindowQuartz; + // crystal material -// crystal material + density = 2.200 * CLHEP::g / CLHEP::cm3; // non e' quella giusta - density=2.200*CLHEP::g/CLHEP::cm3; //non e' quella giusta + G4Material *CrystalMat = new G4Material(name = CrystalMaterialName, density, numel = 2); + CrystalMat->AddElement(elSi, natoms = 1); // anche questi sono sbagliati + CrystalMat->AddElement(elO, natoms = 2); - G4Material* CrystalMat = new G4Material(name=CrystalMaterialName, - density,numel=2); - CrystalMat->AddElement(elSi,natoms=1); // anche questi sono sbagliati - CrystalMat->AddElement(elO,natoms=2); - - G4double* CrystalMatRindex=new G4double[CrystalMatRefIndNumBins]; //31 - //std::vector<G4double> CrystalMatRefPhMom=Initc4f10RefPhotMom(); - G4double* CrystalMatPhMom = new G4double[CrystalMatRefIndNumBins]; - G4double* CrystalMatAbsorpLength= new G4double[CrystalMatRefIndNumBins]; - G4double* CrystalMatCkvProdRindex= new G4double[CrystalMatRefIndNumBins]; + G4double *CrystalMatRindex = new G4double[CrystalMatRefIndNumBins]; // 31 + // std::vector<G4double> CrystalMatRefPhMom=Initc4f10RefPhotMom(); + G4double *CrystalMatPhMom = new G4double[CrystalMatRefIndNumBins]; + G4double *CrystalMatAbsorpLength = new G4double[CrystalMatRefIndNumBins]; + G4double *CrystalMatCkvProdRindex = new G4double[CrystalMatRefIndNumBins]; G4cout << "n bin " << CkvProdNumPhotWaveLengthBins << G4endl; - G4double* CrystalMatPhotMomCkvProd= - new G4double[CrystalMatRefIndNumBins]; + G4double *CrystalMatPhotMomCkvProd = new G4double[CrystalMatRefIndNumBins]; // test study for reconstruction // G4bool m_activateRefIndexStudy = false; - G4bool m_activateRefIndexStudy = true; - + G4bool m_activateRefIndexStudy = true; + // G4double CrysMatRefractiveIndexShift = m_activateRefIndexStudy ? 0.1 : 0.0 ; - G4double CrysMatRefractiveIndexShift = m_activateRefIndexStudy ? 0.03 : 0.0 ; - + G4double CrysMatRefractiveIndexShift = m_activateRefIndexStudy ? 0.03 : 0.0; + // end test study for reconstruction - - - RichTbAnalysisManager* aRichTbAnalysisManager = RichTbAnalysisManager::getInstance(); - - - for(G4int ibina=0; ibina <CrystalMatRefIndNumBins; ibina++ ) { - CrystalMatPhMom[ibina]= - PhotWaveLengthToMom/ - (CrystalMatRefWaveLenValues[ibina]*CrystalMatRefWaveLenUnits); - CrystalMatRindex[ibina] = CrystalMatRefIndexValues[ibina] + CrysMatRefractiveIndexShift; + + RichTbAnalysisManager *aRichTbAnalysisManager = RichTbAnalysisManager::getInstance(); + + for (G4int ibina = 0; ibina < CrystalMatRefIndNumBins; ibina++) { + CrystalMatPhMom[ibina] = PhotWaveLengthToMom / (CrystalMatRefWaveLenValues[ibina] * CrystalMatRefWaveLenUnits); + CrystalMatRindex[ibina] = CrystalMatRefIndexValues[ibina] + CrysMatRefractiveIndexShift; // G4cout<<"Crystal RI " << CrystalMatRindex[ibina] <<G4endl; - //G4cout<<"momentum " << CrystalMatPhMom[ibina] <<G4endl; - - if(aRichTbAnalysisManager->getfRadiatorRefIndex()) - aRichTbAnalysisManager->getfRadiatorRefIndex()->Fill(CrystalMatRefWaveLenValues[ibina], - (CrystalMatRindex[ibina]-1.0) ); - - // CrystalMatAbsorpLength[ibina]=1.E32*CLHEP::mm; - CrystalMatAbsorpLength[ibina] = CrystalMatAbsorptionValues[ibina]*CLHEP::mm; - // CrystalMatRindex[ibina]=1.5; - // G4cout<<"Crystal RI " << CrystalMatRindex[ibin] <<G4endl; - // G4cout<<"Crystal momentum and Abs Length " <<CrystalMatPhMom[ibina]<< " "<<CrystalMatAbsorpLength[ibina] <<G4endl; - - G4int ibinp = ibina; - CrystalMatCkvProdRindex[ibinp]= CrystalMatRindex[ibina]; + // G4cout<<"momentum " << CrystalMatPhMom[ibina] <<G4endl; + + if (aRichTbAnalysisManager->getfRadiatorRefIndex()) + aRichTbAnalysisManager->getfRadiatorRefIndex()->Fill(CrystalMatRefWaveLenValues[ibina], + (CrystalMatRindex[ibina] - 1.0)); + + // CrystalMatAbsorpLength[ibina]=1.E32*CLHEP::mm; + CrystalMatAbsorpLength[ibina] = CrystalMatAbsorptionValues[ibina] * CLHEP::mm; + // CrystalMatRindex[ibina]=1.5; + // G4cout<<"Crystal RI " << CrystalMatRindex[ibin] <<G4endl; + // G4cout<<"Crystal momentum and Abs Length " <<CrystalMatPhMom[ibina]<< " "<<CrystalMatAbsorpLength[ibina] + // <<G4endl; + + G4int ibinp = ibina; + CrystalMatCkvProdRindex[ibinp] = CrystalMatRindex[ibina]; // G4cout << "Ckv crystal RI " << ibinp<< " " << CrystalMatCkvProdRindex[ibinp] << G4endl; - CrystalMatPhotMomCkvProd[ibinp]= CrystalMatPhMom[ibina]; + CrystalMatPhotMomCkvProd[ibinp] = CrystalMatPhMom[ibina]; // G4cout << "Ckv momentum " << ibinp<< " " << CrystalMatPhotMomCkvProd[ibinp] << G4endl; } - - - G4MaterialPropertiesTable* CrystalMPT = - new G4MaterialPropertiesTable(); + G4MaterialPropertiesTable *CrystalMPT = new G4MaterialPropertiesTable(); - CrystalMPT->AddProperty("ABSLENGTH",CrystalMatPhMom, - CrystalMatAbsorpLength,CrystalMatRefIndNumBins); + CrystalMPT->AddProperty("ABSLENGTH", CrystalMatPhMom, CrystalMatAbsorpLength, CrystalMatRefIndNumBins); - CrystalMPT->AddProperty("RINDEX",CrystalMatPhMom , - CrystalMatRindex,CrystalMatRefIndNumBins); + CrystalMPT->AddProperty("RINDEX", CrystalMatPhMom, CrystalMatRindex, CrystalMatRefIndNumBins); - CrystalMPT->AddProperty("CKVRNDX", CrystalMatPhotMomCkvProd , - CrystalMatCkvProdRindex,CrystalMatRefIndNumBins); + CrystalMPT->AddProperty("CKVRNDX", CrystalMatPhotMomCkvProd, CrystalMatCkvProdRindex, CrystalMatRefIndNumBins); CrystalMat->SetMaterialPropertiesTable(CrystalMPT); - CrystalMaterial=CrystalMat; - + CrystalMaterial = CrystalMat; // PMT Ph Cathode - //the following numbers on the property of the S20 may not be accurate. - //Some number is is jut put in for initial program test purposes. - //The real composition is 60 nm of Na2KSb followed by 20 nm of Cs3Sb - //from the outside to inside of the HPD. - density=0.100*CLHEP::g/CLHEP::cm3; + // the following numbers on the property of the S20 may not be accurate. + // Some number is is jut put in for initial program test purposes. + // The real composition is 60 nm of Na2KSb followed by 20 nm of Cs3Sb + // from the outside to inside of the HPD. + density = 0.100 * CLHEP::g / CLHEP::cm3; //"S20PhCathode" - - G4Material* S20PhCathode = new G4Material(name=PmtPhCathodeMaterialName, - density, numel=4); - S20PhCathode->AddElement(elNa, fractionmass=37.5*CLHEP::perCent); - S20PhCathode->AddElement(elK, fractionmass=18.75*CLHEP::perCent); - S20PhCathode->AddElement(elCs, fractionmass=18.75*CLHEP::perCent); - S20PhCathode->AddElement(elSb, fractionmass=25.0*CLHEP::perCent); - - // G4double* S20PhCathodeRindex=new G4double[NumPhotWaveLengthBins]; - G4int S20PhCathodeRefIndNumBins=PMTQuartzRefIndNumBins; - G4double* S20PhCathodeRindex=new G4double[S20PhCathodeRefIndNumBins]; - G4double* S20PhCathodeRefIndPhMom = new G4double[S20PhCathodeRefIndNumBins]; - // the ref index of phcathode is derived from that of the hpd quartz window. - // using the formula (na*na-nb*nb)/(na*na+nb*nb) = fraction of refelcted photons. - G4double refindphFactor=1.04; - if (PMTQwPhReflectionProb < 1.0) - refindphFactor = pow(((1+PMTQwPhReflectionProb)/(1-PMTQwPhReflectionProb)),0.5); - for(G4int ibins=0; ibins <S20PhCathodeRefIndNumBins; ibins++ ) { - // S20PhCathodeRindex[ibin]=1.6; - - S20PhCathodeRefIndPhMom[ibins] = PMTWindowQuartzPhMom[ibins]; - - S20PhCathodeRindex[ibins] = refindphFactor* PMTWindowQuartzRindex[ibins]; + G4Material *S20PhCathode = new G4Material(name = PmtPhCathodeMaterialName, density, numel = 4); + S20PhCathode->AddElement(elNa, fractionmass = 37.5 * CLHEP::perCent); + S20PhCathode->AddElement(elK, fractionmass = 18.75 * CLHEP::perCent); + S20PhCathode->AddElement(elCs, fractionmass = 18.75 * CLHEP::perCent); + S20PhCathode->AddElement(elSb, fractionmass = 25.0 * CLHEP::perCent); + + // G4double* S20PhCathodeRindex=new G4double[NumPhotWaveLengthBins]; + G4int S20PhCathodeRefIndNumBins = PMTQuartzRefIndNumBins; + G4double *S20PhCathodeRindex = new G4double[S20PhCathodeRefIndNumBins]; + G4double *S20PhCathodeRefIndPhMom = new G4double[S20PhCathodeRefIndNumBins]; + // the ref index of phcathode is derived from that of the hpd quartz window. + // using the formula (na*na-nb*nb)/(na*na+nb*nb) = fraction of refelcted photons. + G4double refindphFactor = 1.04; + if (PMTQwPhReflectionProb < 1.0) + refindphFactor = pow(((1 + PMTQwPhReflectionProb) / (1 - PMTQwPhReflectionProb)), 0.5); + for (G4int ibins = 0; ibins < S20PhCathodeRefIndNumBins; ibins++) { + // S20PhCathodeRindex[ibin]=1.6; + + S20PhCathodeRefIndPhMom[ibins] = PMTWindowQuartzPhMom[ibins]; + + S20PhCathodeRindex[ibins] = refindphFactor * PMTWindowQuartzRindex[ibins]; } // now for the absorption length. - G4double* S20PhCathodeAbsorpLength=new G4double[NumPhotWaveLengthBins]; - G4double MomBoundaryRedBlue=PhotWaveLengthToMom/PMTPhCathodeRedBlueBoundary; - G4double ablengblue = -1.0*RichTbPMTPhCathodeThickness/log(PMTPhCathodeTransBlue); - G4double ablengred= -1.0*RichTbPMTPhCathodeThickness/log(PMTPhCathodeTransRed); - - for (G4int iabin=0; iabin < NumPhotWaveLengthBins; iabin++ ) { - if(PhotonMomentum[iabin] < MomBoundaryRedBlue ) { - S20PhCathodeAbsorpLength[iabin]=ablengred; - }else { - S20PhCathodeAbsorpLength[iabin]= ablengblue; - } - - + G4double *S20PhCathodeAbsorpLength = new G4double[NumPhotWaveLengthBins]; + G4double MomBoundaryRedBlue = PhotWaveLengthToMom / PMTPhCathodeRedBlueBoundary; + G4double ablengblue = -1.0 * RichTbPMTPhCathodeThickness / log(PMTPhCathodeTransBlue); + G4double ablengred = -1.0 * RichTbPMTPhCathodeThickness / log(PMTPhCathodeTransRed); + + for (G4int iabin = 0; iabin < NumPhotWaveLengthBins; iabin++) { + if (PhotonMomentum[iabin] < MomBoundaryRedBlue) { + S20PhCathodeAbsorpLength[iabin] = ablengred; + } else { + S20PhCathodeAbsorpLength[iabin] = ablengblue; + } } + G4MaterialPropertiesTable *S20PhCathodeMPT = new G4MaterialPropertiesTable(); + S20PhCathodeMPT->AddProperty("ABSLENGTH", PhotonMomentum, S20PhCathodeAbsorpLength, NumPhotWaveLengthBins); - G4MaterialPropertiesTable* S20PhCathodeMPT = - new G4MaterialPropertiesTable(); - S20PhCathodeMPT->AddProperty("ABSLENGTH",PhotonMomentum, - S20PhCathodeAbsorpLength,NumPhotWaveLengthBins); - - // S20PhCathodeMPT->AddProperty("RINDEX", PhotonMomentum, + // S20PhCathodeMPT->AddProperty("RINDEX", PhotonMomentum, // S20PhCathodeRindex,NumPhotWaveLengthBins); - S20PhCathodeMPT->AddProperty("RINDEX",S20PhCathodeRefIndPhMom , - S20PhCathodeRindex,S20PhCathodeRefIndNumBins); - - + S20PhCathodeMPT->AddProperty("RINDEX", S20PhCathodeRefIndPhMom, S20PhCathodeRindex, S20PhCathodeRefIndNumBins); S20PhCathode->SetMaterialPropertiesTable(S20PhCathodeMPT); - PMTPhCathodeMaterial=S20PhCathode; - - - + PMTPhCathodeMaterial = S20PhCathode; //"HPDS20PhCathode" - G4Material* HPDS20PhCathode = new G4Material(name=HpdPhCathodeMaterialName, - density, numel=4); - HPDS20PhCathode->AddElement(elNa, fractionmass=37.5*CLHEP::perCent); - HPDS20PhCathode->AddElement(elK, fractionmass=18.75*CLHEP::perCent); - HPDS20PhCathode->AddElement(elCs, fractionmass=18.75*CLHEP::perCent); - HPDS20PhCathode->AddElement(elSb, fractionmass=25.0*CLHEP::perCent); - - // G4double* S20PhCathodeRindex=new G4double[NumPhotWaveLengthBins]; + G4Material *HPDS20PhCathode = new G4Material(name = HpdPhCathodeMaterialName, density, numel = 4); + HPDS20PhCathode->AddElement(elNa, fractionmass = 37.5 * CLHEP::perCent); + HPDS20PhCathode->AddElement(elK, fractionmass = 18.75 * CLHEP::perCent); + HPDS20PhCathode->AddElement(elCs, fractionmass = 18.75 * CLHEP::perCent); + HPDS20PhCathode->AddElement(elSb, fractionmass = 25.0 * CLHEP::perCent); - G4int HPDS20PhCathodeRefIndNumBins=HPDQuartzRefIndNumBins; + // G4double* S20PhCathodeRindex=new G4double[NumPhotWaveLengthBins]; - G4double* HPDS20PhCathodeRindex=new G4double[HPDS20PhCathodeRefIndNumBins]; - G4double* HPDS20PhCathodeRefIndPhMom = new G4double[HPDS20PhCathodeRefIndNumBins]; - // the ref index of phcathode is derived from that of the hpd quartz window. - // using the formula (na*na-nb*nb)/(na*na+nb*nb) = fraction of refelcted photons. + G4int HPDS20PhCathodeRefIndNumBins = HPDQuartzRefIndNumBins; - G4double hpdrefindphFactor=1.04; + G4double *HPDS20PhCathodeRindex = new G4double[HPDS20PhCathodeRefIndNumBins]; + G4double *HPDS20PhCathodeRefIndPhMom = new G4double[HPDS20PhCathodeRefIndNumBins]; + // the ref index of phcathode is derived from that of the hpd quartz window. + // using the formula (na*na-nb*nb)/(na*na+nb*nb) = fraction of refelcted photons. + G4double hpdrefindphFactor = 1.04; - if (HPDQwPhReflectionProb < 1.0) - hpdrefindphFactor = pow(((1+HPDQwPhReflectionProb)/(1-HPDQwPhReflectionProb)),0.5); + if (HPDQwPhReflectionProb < 1.0) + hpdrefindphFactor = pow(((1 + HPDQwPhReflectionProb) / (1 - HPDQwPhReflectionProb)), 0.5); - for(G4int ibins=0; ibins <HPDS20PhCathodeRefIndNumBins; ibins++ ) { - // HPDS20PhCathodeRindex[ibin]=1.6; + for (G4int ibins = 0; ibins < HPDS20PhCathodeRefIndNumBins; ibins++) { + // HPDS20PhCathodeRindex[ibin]=1.6; - HPDS20PhCathodeRefIndPhMom[ibins] = HPDWindowQuartzPhMom[ibins]; + HPDS20PhCathodeRefIndPhMom[ibins] = HPDWindowQuartzPhMom[ibins]; - HPDS20PhCathodeRindex[ibins] = hpdrefindphFactor* HPDWindowQuartzRindex[ibins]; + HPDS20PhCathodeRindex[ibins] = hpdrefindphFactor * HPDWindowQuartzRindex[ibins]; } - // now for the absorption length. - G4double* HPDS20PhCathodeAbsorpLength=new G4double[NumPhotWaveLengthBins]; - - G4double HpdMomBoundaryRedBlue=PhotWaveLengthToMom/HPDPhCathodeRedBlueBoundary; - G4double hablengblue = -1.0*RichTbHpdPhCathodeThickness/log(HPDPhCathodeTransBlue); - G4double hablengred= -1.0*RichTbHpdPhCathodeThickness/log(HPDPhCathodeTransRed); - - for (G4int ibin=0; ibin<NumPhotWaveLengthBins; ibin++){ - // S20PhCathodeAbsorpLength[ibin]=1.E32*CLHEP::mm; - if(PhotonMomentum[ibin] < MomBoundaryRedBlue ) { - // we are in the red region. - HPDS20PhCathodeAbsorpLength[ibin]=hablengred; - }else { - HPDS20PhCathodeAbsorpLength[ibin]= hablengblue; - - } - - } - - - + G4double *HPDS20PhCathodeAbsorpLength = new G4double[NumPhotWaveLengthBins]; + +// G4double HpdMomBoundaryRedBlue = PhotWaveLengthToMom / HPDPhCathodeRedBlueBoundary; + G4double hablengblue = -1.0 * RichTbHpdPhCathodeThickness / log(HPDPhCathodeTransBlue); + G4double hablengred = -1.0 * RichTbHpdPhCathodeThickness / log(HPDPhCathodeTransRed); + + for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { + // S20PhCathodeAbsorpLength[ibin]=1.E32*CLHEP::mm; + if (PhotonMomentum[ibin] < MomBoundaryRedBlue) { + // we are in the red region. + HPDS20PhCathodeAbsorpLength[ibin] = hablengred; + } else { + HPDS20PhCathodeAbsorpLength[ibin] = hablengblue; + } + } - G4MaterialPropertiesTable* HPDS20PhCathodeMPT = - new G4MaterialPropertiesTable(); - HPDS20PhCathodeMPT->AddProperty("ABSLENGTH",PhotonMomentum, - HPDS20PhCathodeAbsorpLength,NumPhotWaveLengthBins); + G4MaterialPropertiesTable *HPDS20PhCathodeMPT = new G4MaterialPropertiesTable(); + HPDS20PhCathodeMPT->AddProperty("ABSLENGTH", PhotonMomentum, HPDS20PhCathodeAbsorpLength, NumPhotWaveLengthBins); - // S20PhCathodeMPT->AddProperty("RINDEX", PhotonMomentum, + // S20PhCathodeMPT->AddProperty("RINDEX", PhotonMomentum, // S20PhCathodeRindex,NumPhotWaveLengthBins); - HPDS20PhCathodeMPT->AddProperty("RINDEX",HPDS20PhCathodeRefIndPhMom , - HPDS20PhCathodeRindex,HPDS20PhCathodeRefIndNumBins); + HPDS20PhCathodeMPT->AddProperty("RINDEX", HPDS20PhCathodeRefIndPhMom, HPDS20PhCathodeRindex, + HPDS20PhCathodeRefIndNumBins); HPDS20PhCathode->SetMaterialPropertiesTable(HPDS20PhCathodeMPT); - HPDPhCathodeMaterial=HPDS20PhCathode; - - - + HPDPhCathodeMaterial = HPDS20PhCathode; } - - - - -RichTbMaterial* RichTbMaterial::getRichTbMaterialInstance() -{ - if( RichTbMaterialInstance== 0 ) { - RichTbMaterialInstance= new RichTbMaterial(); - +RichTbMaterial *RichTbMaterial::getRichTbMaterialInstance() { + if (RichTbMaterialInstance == 0) { + RichTbMaterialInstance = new RichTbMaterial(); } return RichTbMaterialInstance; - } - -RichTbMaterial::~RichTbMaterial() -{ - ; -} +RichTbMaterial::~RichTbMaterial() { ; } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbMaterialParameters.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbMaterialParameters.cc index 8c9e5482187c1d813e9c84c5f460e77788249b94..e23fc35db91e72ddeeed165c6ee2908f10a0bdca 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbMaterialParameters.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbMaterialParameters.cc @@ -2,343 +2,288 @@ #include "Geant4/globals.hh" // STL etc +#include <cmath> #include <iostream> #include <vector> -#include <cmath> // local -#include "RichTbMaterialParameters.hh" -#include "RichTbGeometryParameters.hh" #include "RichTbAnalysisManager.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbMaterialParameters.hh" - -void InitializeRichTbMaterial() -{ - //Setup a switch between the various parametrizations of the - // ref index. +void InitializeRichTbMaterial() { + // Setup a switch between the various parametrizations of the + // ref index. } void HistoRichMaterialProperty() { - //histogram the material properties. - - // G4cout<<" Now in histo material Property "<<G4endl; - - // RichTbAnalysisManager* rAnalysis= - // RichTbAnalysisManager::getInstance(); + // histogram the material properties. + // G4cout<<" Now in histo material Property "<<G4endl; + // RichTbAnalysisManager* rAnalysis= + // RichTbAnalysisManager::getInstance(); } - std::vector<G4double> InitializePhotonMomentumVector() { - G4double PhotonEnergyStep=(PhotonMaxEnergy-PhotonMinEnergy)/ - NumPhotWaveLengthBins; - std::vector<G4double>PhotMomVect(NumPhotWaveLengthBins); - for (G4int ibin=0; ibin<NumPhotWaveLengthBins; ibin++){ - PhotMomVect[ibin]=PhotonMinEnergy+PhotonEnergyStep*ibin; - } - return PhotMomVect; + G4double PhotonEnergyStep = (PhotonMaxEnergy - PhotonMinEnergy) / NumPhotWaveLengthBins; + std::vector<G4double> PhotMomVect(NumPhotWaveLengthBins); + for (G4int ibin = 0; ibin < NumPhotWaveLengthBins; ibin++) { + PhotMomVect[ibin] = PhotonMinEnergy + PhotonEnergyStep * ibin; + } + return PhotMomVect; } -G4double FresnelLossAtNormalIncidence(G4double RIndex1, G4double RIndex2 ) -{ - G4double ALoss=0.0; - - if(RIndex1 >= 1.0 && RIndex2 >= 1.0) { - - ALoss= pow(((RIndex2- RIndex1)/( RIndex2+ RIndex1)),2.0); +G4double FresnelLossAtNormalIncidence(G4double RIndex1, G4double RIndex2) { + G4double ALoss = 0.0; - } - return ALoss; + if (RIndex1 >= 1.0 && RIndex2 >= 1.0) { + ALoss = pow(((RIndex2 - RIndex1) / (RIndex2 + RIndex1)), 2.0); + } + return ALoss; } -std::vector<G4double> InitN2RefIndex(G4double pressure, G4double temperature){ +std::vector<G4double> InitN2RefIndex(G4double pressure, G4double temperature) { - G4int NumWLenBins=NumPhotWaveLengthBins; - std::vector<G4double> PmV = InitN2RefPhotMom(); - std::vector<G4double> RefN2( NumPhotWaveLengthBins); + G4int NumWLenBins = NumPhotWaveLengthBins; + std::vector<G4double> PmV = InitN2RefPhotMom(); + std::vector<G4double> RefN2(NumPhotWaveLengthBins); - // G4cout<<" RichTbmaterial Parameters Nitrogen GasPressure stppressure temp stptemp " - // << pressure <<" "<<GasPressure_STP<<" " - // << temperature<<" "<<GasTemperature_STP<<G4endl; + // G4cout<<" RichTbmaterial Parameters Nitrogen GasPressure stppressure temp stptemp " + // << pressure <<" "<<GasPressure_STP<<" " + // << temperature<<" "<<GasTemperature_STP<<G4endl; + G4double GasRhoN2Cur = GasRhoN2atSTP * (GasTemperature_STP / temperature) * (pressure / GasPressure_STP); - G4double GasRhoN2Cur=GasRhoN2atSTP*(GasTemperature_STP/temperature)* - (pressure/ GasPressure_STP); + // G4cout<<" RichTbmaterial Parameters N2densitySTP N2Curdensity " <<GasRhoN2atSTP + // << " "<< GasRhoN2Cur<<G4endl; - // G4cout<<" RichTbmaterial Parameters N2densitySTP N2Curdensity " <<GasRhoN2atSTP - // << " "<< GasRhoN2Cur<<G4endl; + G4double epho, pfe, cpfe; + for (G4int ibinwn = 0; ibinwn < NumWLenBins; ibinwn++) { + epho = PmV[ibinwn] / CLHEP::eV; + pfe = SellN2F1 / (SellN2E1 * SellN2E1 - epho * epho) + SellN2F2 / (SellN2E2 * SellN2E2 - epho * epho); + cpfe = 0.3738 * (GasRhoN2Cur / GasMolWeightN2) * pfe; + RefN2[ibinwn] = pow((1.0 + 2 * cpfe) / (1.0 - cpfe), 0.5); + // G4cout<<" N2 ref index "<< ibinwn<<" "<<epho<<" "<<PhotMomWaveConv/ epho + // <<" "<<RefN2[ibinwn]<<G4endl; + } - G4double epho,pfe,cpfe; - for(G4int ibinwn =0; ibinwn<NumWLenBins ; ibinwn++ ){ - - epho = PmV[ibinwn]/CLHEP::eV; - pfe = SellN2F1/(SellN2E1*SellN2E1 - epho*epho ) + - SellN2F2/(SellN2E2*SellN2E2 - epho*epho ); - cpfe=0.3738*(GasRhoN2Cur/GasMolWeightN2)*pfe; - RefN2[ibinwn]=pow((1.0+2*cpfe)/(1.0-cpfe),0.5); - // G4cout<<" N2 ref index "<< ibinwn<<" "<<epho<<" "<<PhotMomWaveConv/ epho - // <<" "<<RefN2[ibinwn]<<G4endl; - - } - - return RefN2; + return RefN2; } -G4double N2RefIndexAtAnEnergy( G4double pressure, G4double temperature, - G4double PhotonEnergy) -{ - G4double curRefIndex=1.0; +G4double N2RefIndexAtAnEnergy(G4double pressure, G4double temperature, G4double PhotonEnergy) { + G4double curRefIndex = 1.0; - G4double GasRhoN2Cur=GasRhoN2atSTP*(GasTemperature_STP/temperature)* - (pressure/ GasPressure_STP); - G4double epho=0.0; - G4double pfe=0.0; - G4double cpfe=0.0; + G4double GasRhoN2Cur = GasRhoN2atSTP * (GasTemperature_STP / temperature) * (pressure / GasPressure_STP); + G4double epho = 0.0; + G4double pfe = 0.0; + G4double cpfe = 0.0; + epho = PhotonEnergy / CLHEP::eV; + pfe = SellN2F1 / (SellN2E1 * SellN2E1 - epho * epho) + SellN2F2 / (SellN2E2 * SellN2E2 - epho * epho); + cpfe = 0.3738 * (GasRhoN2Cur / GasMolWeightN2) * pfe; - epho = PhotonEnergy/CLHEP::eV; - pfe = SellN2F1/(SellN2E1*SellN2E1 - epho*epho ) + - SellN2F2/(SellN2E2*SellN2E2 - epho*epho ); - cpfe=0.3738*(GasRhoN2Cur/GasMolWeightN2)*pfe; - - curRefIndex=pow((1.0+2*cpfe)/(1.0-cpfe),0.5); - - return curRefIndex; + curRefIndex = pow((1.0 + 2 * cpfe) / (1.0 - cpfe), 0.5); + return curRefIndex; } +std::vector<G4double> InitN2RefPhotMom() { return InitializePhotonMomentumVector(); } +std::vector<G4double> Initc4f10RefPhotMom() { return InitializePhotonMomentumVector(); } -std::vector<G4double> InitN2RefPhotMom() { - return InitializePhotonMomentumVector() ; -} -std::vector<G4double> Initc4f10RefPhotMom() { - return InitializePhotonMomentumVector() ; -} - -std::vector<G4double> CrystalRefPhotMom() { - return InitializePhotonMomentumVector() ; -} +std::vector<G4double> CrystalRefPhotMom() { return InitializePhotonMomentumVector(); } -std::vector<G4double> Initc4f10RefIndex(G4double pressure, G4double temperature){ +std::vector<G4double> Initc4f10RefIndex(G4double pressure, G4double temperature) { - G4int NumWLenBins=NumPhotWaveLengthBins; - std::vector<G4double> PmV = Initc4f10RefPhotMom(); - std::vector<G4double> RefC4F10( NumPhotWaveLengthBins); + G4int NumWLenBins = NumPhotWaveLengthBins; + std::vector<G4double> PmV = Initc4f10RefPhotMom(); + std::vector<G4double> RefC4F10(NumPhotWaveLengthBins); - // G4cout<<" RichTbmaterial Parameters c4f10GasPressure stppressure temp stptemp " - // << pressure <<" "<<GasPressure_STP<<" " - // << temperature<<" "<<GasTemperature_STP<<G4endl; + // G4cout<<" RichTbmaterial Parameters c4f10GasPressure stppressure temp stptemp " + // << pressure <<" "<<GasPressure_STP<<" " + // << temperature<<" "<<GasTemperature_STP<<G4endl; + G4double GasRhoC4F10Cur = GasRhoC4F10atSTP * (GasTemperature_STP / temperature) * (pressure / GasPressure_STP); - G4double GasRhoC4F10Cur=GasRhoC4F10atSTP*(GasTemperature_STP/temperature)* - (pressure/ GasPressure_STP); + G4double epho = 0.0; + G4double pfe = 0.0; + G4double cpfe = 0.0; - G4double epho=0.0; - G4double pfe=0.0; - G4double cpfe=0.0; + for (G4int ibinwn = 0; ibinwn < NumWLenBins; ibinwn++) { - for(G4int ibinwn =0; ibinwn<NumWLenBins ; ibinwn++ ){ - - epho = PmV[ibinwn]/CLHEP::eV; - pfe = SellC4F10F1/(SellC4F10E1*SellC4F10E1 - epho*epho ) + - SellC4F10F2/(SellC4F10E2*SellC4F10E2 - epho*epho ); - cpfe=0.3738*(GasRhoC4F10Cur/GasMolWeightC4F10)*pfe; - RefC4F10[ibinwn] = pow((1.0+2*cpfe)/(1.0-cpfe),0.5); - } - return RefC4F10; + epho = PmV[ibinwn] / CLHEP::eV; + pfe = SellC4F10F1 / (SellC4F10E1 * SellC4F10E1 - epho * epho) + + SellC4F10F2 / (SellC4F10E2 * SellC4F10E2 - epho * epho); + cpfe = 0.3738 * (GasRhoC4F10Cur / GasMolWeightC4F10) * pfe; + RefC4F10[ibinwn] = pow((1.0 + 2 * cpfe) / (1.0 - cpfe), 0.5); + } + return RefC4F10; } -G4double c4f10RefIndexAtAnEnergy(G4double pressure, G4double temperature , - G4double PhotonEnergy){ - - G4double curRefIndex=1.0; +G4double c4f10RefIndexAtAnEnergy(G4double pressure, G4double temperature, G4double PhotonEnergy) { - G4cout<<" RichTbmaterial Parameters c4f10GasPressure stppressure temp stptemp " - << pressure <<" "<<GasPressure_STP<<" " - << temperature<<" "<<GasTemperature_STP<<G4endl; + G4double curRefIndex = 1.0; + G4cout << " RichTbmaterial Parameters c4f10GasPressure stppressure temp stptemp " << pressure << " " + << GasPressure_STP << " " << temperature << " " << GasTemperature_STP << G4endl; - G4double GasRhoC4F10Cur=GasRhoC4F10atSTP*(GasTemperature_STP/temperature)* - (pressure/ GasPressure_STP); + G4double GasRhoC4F10Cur = GasRhoC4F10atSTP * (GasTemperature_STP / temperature) * (pressure / GasPressure_STP); - G4double epho=0.0; - G4double pfe=0.0; - G4double cpfe=0.0; + G4double epho = 0.0; + G4double pfe = 0.0; + G4double cpfe = 0.0; - epho = PhotonEnergy/CLHEP::eV; + epho = PhotonEnergy / CLHEP::eV; - pfe = SellC4F10F1/(SellC4F10E1*SellC4F10E1 - epho*epho ) + - SellC4F10F2/(SellC4F10E2*SellC4F10E2 - epho*epho ); - cpfe=0.3738*(GasRhoC4F10Cur/GasMolWeightC4F10)*pfe; - curRefIndex = pow((1.0+2*cpfe)/(1.0-cpfe),0.5); + pfe = + SellC4F10F1 / (SellC4F10E1 * SellC4F10E1 - epho * epho) + SellC4F10F2 / (SellC4F10E2 * SellC4F10E2 - epho * epho); + cpfe = 0.3738 * (GasRhoC4F10Cur / GasMolWeightC4F10) * pfe; + curRefIndex = pow((1.0 + 2 * cpfe) / (1.0 - cpfe), 0.5); - return curRefIndex ; + return curRefIndex; } -std::vector<G4double> InitializePMTWaveL(G4int /* ipmtnum */) - { - // for now it is the same wavlength bins for all pmts. - - std::vector<G4double>PmtQEW(PmtQENumBins); - for (G4int iqb=0; iqb<PmtQENumBins; iqb++){ - PmtQEW[iqb]= PmtQEWaveLen [iqb]*PmtQEWaveLenUnits; - } - return PmtQEW; - - } -std::vector<G4double> InitializePMTQE(G4int ipmtqe) { - - G4double PmtQEReductionFactor =1.; - // if(ihpdqe >= 2 ) { - // G4cout<<"Wrong HPD Number for QE " <<ihpdqe<<" vs " - // <<NumPMTs <<G4endl; - // } - std::vector<G4double>qeCurPerCent( PmtQENumBins); - if(ipmtqe == 0 ){ - for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ - qeCurPerCent[iqb] = Pmt0QEPerCent[iqb]* PmtQEReductionFactor; - } - - - }else if( ipmtqe == 1 ){ - for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ - qeCurPerCent[iqb] = Pmt1QEPerCent[iqb]* PmtQEReductionFactor; - } - - }else if( ipmtqe == 2 ){ - - for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ - qeCurPerCent[iqb] = Pmt2QEPerCent[iqb]* PmtQEReductionFactor; - } - - } else if ( ipmtqe == 3 ){ - - for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ - qeCurPerCent[iqb] = Pmt3QEPerCent[iqb]* PmtQEReductionFactor; - } - - - } else if ( ipmtqe == 4 ){ - - for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ - qeCurPerCent[iqb] = Pmt4QEPerCent[iqb]* PmtQEReductionFactor; - } - - }else if ( ipmtqe == 5 ){ - - for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ - qeCurPerCent[iqb] = Pmt5QEPerCent[iqb]* PmtQEReductionFactor; - } +std::vector<G4double> InitializePMTWaveL(G4int /* ipmtnum */) { + // for now it is the same wavlength bins for all pmts. + + std::vector<G4double> PmtQEW(PmtQENumBins); + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + PmtQEW[iqb] = PmtQEWaveLen[iqb] * PmtQEWaveLenUnits; + } + return PmtQEW; +} +std::vector<G4double> InitializePMTQE(G4int ipmtqe) { + G4double PmtQEReductionFactor = 1.; + // if(ihpdqe >= 2 ) { + // G4cout<<"Wrong HPD Number for QE " <<ihpdqe<<" vs " + // <<NumPMTs <<G4endl; + // } + std::vector<G4double> qeCurPerCent(PmtQENumBins); + if (ipmtqe == 0) { + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + qeCurPerCent[iqb] = Pmt0QEPerCent[iqb] * PmtQEReductionFactor; + } - }else if ( ipmtqe == 6 ){ + } else if (ipmtqe == 1) { + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + qeCurPerCent[iqb] = Pmt1QEPerCent[iqb] * PmtQEReductionFactor; + } - for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ - qeCurPerCent[iqb] = Pmt6QEPerCent[iqb]* PmtQEReductionFactor; - } + } else if (ipmtqe == 2) { + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + qeCurPerCent[iqb] = Pmt2QEPerCent[iqb] * PmtQEReductionFactor; + } - }else if ( ipmtqe == 7 ){ + } else if (ipmtqe == 3) { - for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ - qeCurPerCent[iqb] = Pmt7QEPerCent[iqb]* PmtQEReductionFactor; - } + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + qeCurPerCent[iqb] = Pmt3QEPerCent[iqb] * PmtQEReductionFactor; + } - }else if( ipmtqe == 8 ){ - for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ - qeCurPerCent[iqb] = Pmt8QEPerCent[iqb]* PmtQEReductionFactor; - } + } else if (ipmtqe == 4) { - }else if( ipmtqe == 9 ){ + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + qeCurPerCent[iqb] = Pmt4QEPerCent[iqb] * PmtQEReductionFactor; + } - for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ - qeCurPerCent[iqb] = Pmt9QEPerCent[iqb]* PmtQEReductionFactor; - } + } else if (ipmtqe == 5) { - } else if ( ipmtqe == 10 ){ + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + qeCurPerCent[iqb] = Pmt5QEPerCent[iqb] * PmtQEReductionFactor; + } - for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ - qeCurPerCent[iqb] = Pmt1QEPerCent[iqb]* PmtQEReductionFactor; - } + } else if (ipmtqe == 6) { + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + qeCurPerCent[iqb] = Pmt6QEPerCent[iqb] * PmtQEReductionFactor; + } - } else if ( ipmtqe == 11 ){ + } else if (ipmtqe == 7) { - for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ - qeCurPerCent[iqb] = Pmt11QEPerCent[iqb]* PmtQEReductionFactor; - } + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + qeCurPerCent[iqb] = Pmt7QEPerCent[iqb] * PmtQEReductionFactor; + } - }else if ( ipmtqe == 12 ){ + } else if (ipmtqe == 8) { + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + qeCurPerCent[iqb] = Pmt8QEPerCent[iqb] * PmtQEReductionFactor; + } - for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ - qeCurPerCent[iqb] = Pmt12QEPerCent[iqb]* PmtQEReductionFactor; - } + } else if (ipmtqe == 9) { + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + qeCurPerCent[iqb] = Pmt9QEPerCent[iqb] * PmtQEReductionFactor; + } - }else if ( ipmtqe == 13 ){ + } else if (ipmtqe == 10) { - for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ - qeCurPerCent[iqb] = Pmt13QEPerCent[iqb]* PmtQEReductionFactor; - } + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + qeCurPerCent[iqb] = Pmt1QEPerCent[iqb] * PmtQEReductionFactor; + } + } else if (ipmtqe == 11) { - }else if ( ipmtqe == 14 ){ + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + qeCurPerCent[iqb] = Pmt11QEPerCent[iqb] * PmtQEReductionFactor; + } - for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ - qeCurPerCent[iqb] = Pmt14QEPerCent[iqb]* PmtQEReductionFactor; - } + } else if (ipmtqe == 12) { - }else if ( ipmtqe == 15 ){ + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + qeCurPerCent[iqb] = Pmt12QEPerCent[iqb] * PmtQEReductionFactor; + } - for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ - qeCurPerCent[iqb] = Pmt15QEPerCent[iqb]* PmtQEReductionFactor; - } + } else if (ipmtqe == 13) { + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + qeCurPerCent[iqb] = Pmt13QEPerCent[iqb] * PmtQEReductionFactor; + } - } -// else if ( ipmtqe == 16 ){ -// -// for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ -// qeCurPerCent[iqb] = Pmt16QEPerCent[iqb]* PmtQEReductionFactor; -// } -// -// } + } else if (ipmtqe == 14) { + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + qeCurPerCent[iqb] = Pmt14QEPerCent[iqb] * PmtQEReductionFactor; + } + } else if (ipmtqe == 15) { - return qeCurPerCent; + for (G4int iqb = 0; iqb < PmtQENumBins; iqb++) { + qeCurPerCent[iqb] = Pmt15QEPerCent[iqb] * PmtQEReductionFactor; + } + } + // else if ( ipmtqe == 16 ){ + // + // for(G4int iqb=0; iqb< PmtQENumBins ; iqb++){ + // qeCurPerCent[iqb] = Pmt16QEPerCent[iqb]* PmtQEReductionFactor; + // } + // + // } + return qeCurPerCent; } -std::vector<G4double> InitializeHpdQE(G4int ihpdqe) { - - G4double HpdQEReductionFactor =1.; - std::vector<G4double>qeCurPerCent( HpdQENumBins); - if(ihpdqe == 0 ){ - for(G4int iqa=0; iqa< HpdQENumBins ; iqa++){ - qeCurPerCent[iqa] = Hpd0QEPerCent[iqa]* HpdQEReductionFactor; - } - - } - - - return qeCurPerCent; +std::vector<G4double> InitializeHpdQE(G4int ihpdqe) { + G4double HpdQEReductionFactor = 1.; + std::vector<G4double> qeCurPerCent(HpdQENumBins); + if (ihpdqe == 0) { + for (G4int iqa = 0; iqa < HpdQENumBins; iqa++) { + qeCurPerCent[iqa] = Hpd0QEPerCent[iqa] * HpdQEReductionFactor; + } + } + return qeCurPerCent; } -std::vector<G4double> InitializeHpdWaveL(G4int /* ipmtnum */) - { - // for now it is the same wavlength bins for all pmts. - - std::vector<G4double>HpdQEW(HpdQENumBins); - for (G4int iqb=0; iqb<HpdQENumBins; iqb++){ - HpdQEW[iqb]= HpdQEWaveLen [iqb]*HpdQEWaveLenUnits; - } - return HpdQEW; - - } - +std::vector<G4double> InitializeHpdWaveL(G4int /* ipmtnum */) { + // for now it is the same wavlength bins for all pmts. + std::vector<G4double> HpdQEW(HpdQENumBins); + for (G4int iqb = 0; iqb < HpdQENumBins; iqb++) { + HpdQEW[iqb] = HpdQEWaveLen[iqb] * HpdQEWaveLenUnits; + } + return HpdQEW; +} diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbPMT.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbPMT.cc index 3bd4f33bec24258ac297d2e6566666d46a80bf9f..c3b9f63e71e62e444cb63b75c4443d675c61080d 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbPMT.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbPMT.cc @@ -1,32 +1,30 @@ // $Id: $ // Include files - -#include "Geant4/globals.hh" -#include "Geant4/G4Tubs.hh" #include "Geant4/G4Box.hh" #include "Geant4/G4Sphere.hh" +#include "Geant4/G4Tubs.hh" +#include "Geant4/globals.hh" // local -#include "RichTbMaterial.hh" -#include "RichTbPMT.hh" -#include "RichTbUpgradeMaster.hh" -#include "RichTbUpgradePhDFrame.hh" -#include "RichTbGeometryParameters.hh" -#include "RichTbMaterialParameters.hh" +#include "Geant4/G4LogicalVolume.hh" +#include "Geant4/G4PVPlacement.hh" #include "Geant4/G4RotationMatrix.hh" +#include "Geant4/G4SDManager.hh" +#include "Geant4/G4SubtractionSolid.hh" #include "Geant4/G4ThreeVector.hh" #include "Geant4/G4Transform3D.hh" -#include "Geant4/G4LogicalVolume.hh" #include "Geant4/G4VPhysicalVolume.hh" -#include "Geant4/G4PVPlacement.hh" -#include "Geant4/G4SubtractionSolid.hh" -#include "Geant4/G4SDManager.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbMaterial.hh" +#include "RichTbMaterialParameters.hh" +#include "RichTbPMT.hh" +#include "RichTbUpgradeMaster.hh" +#include "RichTbUpgradePhDFrame.hh" //#include "RichTbSD.hh" -#include "RichTbRODummySD.hh" #include "RichTbMiscNames.hh" +#include "RichTbRODummySD.hh" #include "RichTbRunConfig.hh" - //----------------------------------------------------------------------------- // Implementation file for class : RichTbPMT // @@ -37,453 +35,314 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbPMT::RichTbPMT( RichTbUpgradeEC* aECMaster ) -{ PmtECFrame = aECMaster; -m_TrackingSwitch=true; -m_PMTQwLogVolName=PMTQwLogVolName; -m_PMTPhCathLogVolName= PMTPhCathLogVolName ; -m_PMTAnodeLogVolName=PMTANNamesLog[0]; -RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); -G4int aRadiatorConfiguration = aConfig ->getRadiatorConfiguration(); -CurNumPmts = NumPmtsOld; -//CurNumPmts = RichTbPMTGeometryParameters::getNumPmts(); // TESTnumPmts -if (aRadiatorConfiguration == 2) CurNumPmts = NumPmtsWithHpd; -else if (aRadiatorConfiguration == 3) CurNumPmts = NumPmtsUpgrade15; -//else if (aRadiatorConfiguration == 3) CurNumPmts = RichTbPMTGeometryParameters::getNumPmtsUpgrade();// TESTnumPmts -} - -RichTbPMT::~RichTbPMT( ) { +RichTbPMT::RichTbPMT(RichTbUpgradeEC *aECMaster) { + PmtECFrame = aECMaster; + m_TrackingSwitch = true; + m_PMTQwLogVolName = PMTQwLogVolName; + m_PMTPhCathLogVolName = PMTPhCathLogVolName; + m_PMTAnodeLogVolName = PMTANNamesLog[0]; + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); + G4int aRadiatorConfiguration = aConfig->getRadiatorConfiguration(); + CurNumPmts = NumPmtsOld; + // CurNumPmts = RichTbPMTGeometryParameters::getNumPmts(); // TESTnumPmts + if (aRadiatorConfiguration == 2) + CurNumPmts = NumPmtsWithHpd; + else if (aRadiatorConfiguration == 3) + CurNumPmts = NumPmtsUpgrade15; + // else if (aRadiatorConfiguration == 3) CurNumPmts = RichTbPMTGeometryParameters::getNumPmtsUpgrade();// TESTnumPmts } -void RichTbPMT::buildPMTGeometry() -{ - - RichTbPMTMasterLVol.resize(CurNumPmts); - RichTbPMTSMasterLVol.resize(CurNumPmts); - RichTbPMTAnodeLVol.resize(CurNumPmts); - RichTbPMTMasterPVol.resize(CurNumPmts); - RichTbPMTSMasterPVol.resize(CurNumPmts); - RichTbPMTAnodePVol.resize(CurNumPmts); - - for (int ipmt=0; ipmt <CurNumPmts; ++ipmt ){ - constructPMTMasterTree(ipmt); - } - - if(m_TrackingSwitch) { - constructPMTComponentsLVol(); - RichTbPMTEnvelopePVol.resize(CurNumPmts); - RichTbPMTQuartzWPVol.resize(CurNumPmts); - RichTbPMTPhCathodePVol.resize(CurNumPmts); - RichTbPMTFrontRingPVol.resize(CurNumPmts); - - for (int jpmt=0; jpmt <CurNumPmts; ++jpmt ) - - constructPMTComponentsPVol(jpmt) ; - - }else { - constructPMTAnode(); - } +RichTbPMT::~RichTbPMT() {} +void RichTbPMT::buildPMTGeometry() { + RichTbPMTMasterLVol.resize(CurNumPmts); + RichTbPMTSMasterLVol.resize(CurNumPmts); + RichTbPMTAnodeLVol.resize(CurNumPmts); + RichTbPMTMasterPVol.resize(CurNumPmts); + RichTbPMTSMasterPVol.resize(CurNumPmts); + RichTbPMTAnodePVol.resize(CurNumPmts); + for (int ipmt = 0; ipmt < CurNumPmts; ++ipmt) { + constructPMTMasterTree(ipmt); + } + if (m_TrackingSwitch) { + constructPMTComponentsLVol(); + RichTbPMTEnvelopePVol.resize(CurNumPmts); + RichTbPMTQuartzWPVol.resize(CurNumPmts); + RichTbPMTPhCathodePVol.resize(CurNumPmts); + RichTbPMTFrontRingPVol.resize(CurNumPmts); + for (int jpmt = 0; jpmt < CurNumPmts; ++jpmt) + constructPMTComponentsPVol(jpmt); + } else { + constructPMTAnode(); + } } -void RichTbPMT::constructPMTComponentsLVol() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - - - - // evelope = substraction of boxes +void RichTbPMT::constructPMTComponentsLVol() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + // evelope = substraction of boxes - G4Box* PMTEnvelopeBox - = new G4Box( "PMTEnvelopeBox", - 0.5 * PMTEnvelopeBoxXSize, - 0.5 * PMTEnvelopeBoxYSize, - 0.5 * PMTEnvelopeBoxZSize ); + G4Box *PMTEnvelopeBox = + new G4Box("PMTEnvelopeBox", 0.5 * PMTEnvelopeBoxXSize, 0.5 * PMTEnvelopeBoxYSize, 0.5 * PMTEnvelopeBoxZSize); - // G4cout<<"test Envelope size "<<PMTEnvelopeBoxXSize <<G4endl; + // G4cout<<"test Envelope size "<<PMTEnvelopeBoxXSize <<G4endl; - G4Box* PMTEnvelopeSubBox - = new G4Box("PMTEnvelopeSubBox", - 0.5*PMTEnvelopeSubPartXSize, - 0.5*PMTEnvelopeSubPartYSize, - 0.5*PMTEnvelopeSubPartZSize); + G4Box *PMTEnvelopeSubBox = new G4Box("PMTEnvelopeSubBox", 0.5 * PMTEnvelopeSubPartXSize, + 0.5 * PMTEnvelopeSubPartYSize, 0.5 * PMTEnvelopeSubPartZSize); - G4ThreeVector PMTEnvelopeSubPos( PMTEnvelopeSubPartXLocation, - PMTEnvelopeSubPartYLocation, - PMTEnvelopeSubPartZLocation ); + G4ThreeVector PMTEnvelopeSubPos(PMTEnvelopeSubPartXLocation, PMTEnvelopeSubPartYLocation, + PMTEnvelopeSubPartZLocation); - G4RotationMatrix PMTEnvelopeSubRotX, PMTEnvelopeSubRotY; + G4RotationMatrix PMTEnvelopeSubRotX, PMTEnvelopeSubRotY; - G4Transform3D PMTEnvelopeSubTransform(PMTEnvelopeSubRotX * PMTEnvelopeSubRotY, - PMTEnvelopeSubPos); + G4Transform3D PMTEnvelopeSubTransform(PMTEnvelopeSubRotX * PMTEnvelopeSubRotY, PMTEnvelopeSubPos); - G4SubtractionSolid* PMTEnvelope = new G4SubtractionSolid("PMTEnvelope", - PMTEnvelopeBox, - PMTEnvelopeSubBox, - PMTEnvelopeSubTransform); + G4SubtractionSolid *PMTEnvelope = + new G4SubtractionSolid("PMTEnvelope", PMTEnvelopeBox, PMTEnvelopeSubBox, PMTEnvelopeSubTransform); + // quartz window + G4Box *PMTQuartzWindow = new G4Box("PMTQuartzWindow", 0.5 * PMTQuartzWindowSupXSize, 0.5 * PMTQuartzWindowSupYSize, + 0.5 * PMTQuartzWindowSupZSize); + // cathode + G4Box *PMTPhCathode = + new G4Box("PMTPhCathode", 0.5 * PMTPhCathodeSupXSize, 0.5 * PMTPhCathodeSupYSize, 0.5 * PMTPhCathodeSupZSize); - //quartz window - G4Box* PMTQuartzWindow - = new G4Box( "PMTQuartzWindow", - 0.5 * PMTQuartzWindowSupXSize, - 0.5 * PMTQuartzWindowSupYSize, - 0.5 * PMTQuartzWindowSupZSize ); + // front ring + G4Box *PMTFrontRingOuterBox = new G4Box("PMTFrontRingOuterBox", 0.5 * RichTbPMTFrontRingLateralXSize, + 0.5 * RichTbPMTFrontRingLateralYSize, 0.5 * RichTbPMTFrontRingZSize); - //cathode - G4Box* PMTPhCathode= - new G4Box("PMTPhCathode", - 0.5 * PMTPhCathodeSupXSize, - 0.5 * PMTPhCathodeSupYSize, - 0.5 * PMTPhCathodeSupZSize ); + G4Box *PMTFrontRingInnerSubBox = + new G4Box("PMTFrontRingInnerSubBox", 0.5 * RichTbPMTFrontRingSubHoleXSize, 0.5 * RichTbPMTFrontRingSubHoleYSize, + 0.5 * RichTbPMTFrontRingSubHoleZSize); + G4ThreeVector PMTFrontRingSubPos(RichTbPMTFrontRingSubHoleXLocation, RichTbPMTFrontRingSubHoleYLocation, + RichTbPMTFrontRingSubHoleZLocation); - //front ring - G4Box* PMTFrontRingOuterBox = - new G4Box("PMTFrontRingOuterBox" , - 0.5*RichTbPMTFrontRingLateralXSize, - 0.5*RichTbPMTFrontRingLateralYSize, - 0.5* RichTbPMTFrontRingZSize); + G4RotationMatrix PMTFrontRingSubRotX, PMTFrontRingSubRotY; - G4Box* PMTFrontRingInnerSubBox = - new G4Box("PMTFrontRingInnerSubBox" , - 0.5*RichTbPMTFrontRingSubHoleXSize, - 0.5*RichTbPMTFrontRingSubHoleYSize, - 0.5*RichTbPMTFrontRingSubHoleZSize); + G4Transform3D PMTFrontRingSubTransform(PMTFrontRingSubRotX * PMTFrontRingSubRotY, PMTFrontRingSubPos); + G4SubtractionSolid *PMTFrontRing = + new G4SubtractionSolid("PMTFrontRing", PMTFrontRingOuterBox, PMTFrontRingInnerSubBox, PMTFrontRingSubTransform); - G4ThreeVector PMTFrontRingSubPos( RichTbPMTFrontRingSubHoleXLocation , - RichTbPMTFrontRingSubHoleYLocation, - RichTbPMTFrontRingSubHoleZLocation ); + // logical voulmes - G4RotationMatrix PMTFrontRingSubRotX, PMTFrontRingSubRotY; - - G4Transform3D PMTFrontRingSubTransform(PMTFrontRingSubRotX * PMTFrontRingSubRotY, - PMTFrontRingSubPos); - - G4SubtractionSolid* PMTFrontRing = new G4SubtractionSolid("PMTFrontRing", - PMTFrontRingOuterBox, - PMTFrontRingInnerSubBox, - PMTFrontRingSubTransform); - - //logical voulmes - - - - G4LogicalVolume* PMTEnvelopeLog = - new G4LogicalVolume( PMTEnvelope, - aMaterial->getPMTTubeEnvelopeMaterial(), - "PMTEnvelopeLog",0,0,0); - - G4LogicalVolume* PMTQuartzWLog= - new G4LogicalVolume( PMTQuartzWindow, - aMaterial->getPMTQuartzWindowMaterial(), - m_PMTQwLogVolName ,0,0,0); - G4LogicalVolume* PMTPhCathodeLog = - new G4LogicalVolume( PMTPhCathode, - aMaterial->getPMTPhCathodeMaterial() , - m_PMTPhCathLogVolName ,0,0,0); - - - G4LogicalVolume* PMTFrontRingLog = - new G4LogicalVolume( PMTFrontRing, - aMaterial->getPMTTubeEnvelopeMaterial(), - "PMTFrontRingLog",0,0,0); - - RichTbPMTEnvelopeLVol=PMTEnvelopeLog; - RichTbPMTQuartzWLVol= PMTQuartzWLog; - RichTbPMTPhCathodeLVol=PMTPhCathodeLog; - RichTbPMTFrontRingLVol = PMTFrontRingLog; + G4LogicalVolume *PMTEnvelopeLog = + new G4LogicalVolume(PMTEnvelope, aMaterial->getPMTTubeEnvelopeMaterial(), "PMTEnvelopeLog", 0, 0, 0); + G4LogicalVolume *PMTQuartzWLog = + new G4LogicalVolume(PMTQuartzWindow, aMaterial->getPMTQuartzWindowMaterial(), m_PMTQwLogVolName, 0, 0, 0); + G4LogicalVolume *PMTPhCathodeLog = + new G4LogicalVolume(PMTPhCathode, aMaterial->getPMTPhCathodeMaterial(), m_PMTPhCathLogVolName, 0, 0, 0); + G4LogicalVolume *PMTFrontRingLog = + new G4LogicalVolume(PMTFrontRing, aMaterial->getPMTTubeEnvelopeMaterial(), "PMTFrontRingLog", 0, 0, 0); + RichTbPMTEnvelopeLVol = PMTEnvelopeLog; + RichTbPMTQuartzWLVol = PMTQuartzWLog; + RichTbPMTPhCathodeLVol = PMTPhCathodeLog; + RichTbPMTFrontRingLVol = PMTFrontRingLog; } -void RichTbPMT::constructPMTComponentsPVol(int CurPMTNum) -{ - - G4RotationMatrix PMTEnvelopeBoxRot, PMTFrontRingBoxRot; - - G4RotationMatrix PMTQuartzWindowRot, PMTPhCathodeRot; - - - - G4ThreeVector PMTEnvelopeBoxPos( RichTbPMTEnvBoxXLocation, - RichTbPMTEnvBoxYLocation, - RichTbPMTEnvBoxZLocation); - - G4Transform3D PMTEnvelopeBoxTransform( PMTEnvelopeBoxRot, - PMTEnvelopeBoxPos); - - G4ThreeVector PMTFrontRingBoxPos( RichTbPMTFrontRingXLocation, - RichTbPMTFrontRingYLocation, - RichTbPMTFrontRingZLocation); - - G4Transform3D PMTFrontRingBoxTransform( PMTFrontRingBoxRot, - PMTFrontRingBoxPos); - - G4ThreeVector PMTQuartzWindowPos( RichTbPMTQuartzWindowXLocation, - RichTbPMTQuartzWindowYLocation, - RichTbPMTQuartzWindowZLocation); +void RichTbPMT::constructPMTComponentsPVol(int CurPMTNum) { - G4Transform3D PMTQuartzWindowTransform( PMTQuartzWindowRot, - PMTQuartzWindowPos); + G4RotationMatrix PMTEnvelopeBoxRot, PMTFrontRingBoxRot; - G4ThreeVector PMTPhCathodePos(RichTbPMTPhCathodeXLocation, - RichTbPMTPhCathodeYLocation, - RichTbPMTPhCathodeZLocation); + G4RotationMatrix PMTQuartzWindowRot, PMTPhCathodeRot; - G4Transform3D PMTPhCathodeTransform( PMTPhCathodeRot, PMTPhCathodePos); + G4ThreeVector PMTEnvelopeBoxPos(RichTbPMTEnvBoxXLocation, RichTbPMTEnvBoxYLocation, RichTbPMTEnvBoxZLocation); + G4Transform3D PMTEnvelopeBoxTransform(PMTEnvelopeBoxRot, PMTEnvelopeBoxPos); + G4ThreeVector PMTFrontRingBoxPos(RichTbPMTFrontRingXLocation, RichTbPMTFrontRingYLocation, + RichTbPMTFrontRingZLocation); - G4VPhysicalVolume* CurMPhys = - RichTbPMTSMasterPVol[CurPMTNum]; + G4Transform3D PMTFrontRingBoxTransform(PMTFrontRingBoxRot, PMTFrontRingBoxPos); + G4ThreeVector PMTQuartzWindowPos(RichTbPMTQuartzWindowXLocation, RichTbPMTQuartzWindowYLocation, + RichTbPMTQuartzWindowZLocation); - G4VPhysicalVolume* PMTEnvelopePhys = - new G4PVPlacement( PMTEnvelopeBoxTransform, PMTEnvelopeBoxPhysName+PMTNumberName[CurPMTNum], - RichTbPMTEnvelopeLVol , CurMPhys, - false,0); + G4Transform3D PMTQuartzWindowTransform(PMTQuartzWindowRot, PMTQuartzWindowPos); - G4VPhysicalVolume* PMTFrontRingPhys = - new G4PVPlacement( PMTFrontRingBoxTransform, PMTFrontRingBoxPhysName+PMTNumberName[CurPMTNum], - RichTbPMTFrontRingLVol , CurMPhys, - false,0); + G4ThreeVector PMTPhCathodePos(RichTbPMTPhCathodeXLocation, RichTbPMTPhCathodeYLocation, RichTbPMTPhCathodeZLocation); - G4VPhysicalVolume* PMTQuartzWPhys= - new G4PVPlacement( PMTQuartzWindowTransform, PMTQuartzWPhysName+PMTNumberName[CurPMTNum], - RichTbPMTQuartzWLVol , - CurMPhys , false,0); + G4Transform3D PMTPhCathodeTransform(PMTPhCathodeRot, PMTPhCathodePos); - G4VPhysicalVolume* PMTPhCathodePhys= - new G4PVPlacement( PMTPhCathodeTransform, PMTPhCathodePhysName +PMTNumberName[CurPMTNum], - RichTbPMTPhCathodeLVol, - CurMPhys,false,0); + G4VPhysicalVolume *CurMPhys = RichTbPMTSMasterPVol[CurPMTNum]; + G4VPhysicalVolume *PMTEnvelopePhys = + new G4PVPlacement(PMTEnvelopeBoxTransform, PMTEnvelopeBoxPhysName + PMTNumberName[CurPMTNum], + RichTbPMTEnvelopeLVol, CurMPhys, false, 0); + G4VPhysicalVolume *PMTFrontRingPhys = + new G4PVPlacement(PMTFrontRingBoxTransform, PMTFrontRingBoxPhysName + PMTNumberName[CurPMTNum], + RichTbPMTFrontRingLVol, CurMPhys, false, 0); - RichTbPMTEnvelopePVol[CurPMTNum] = PMTEnvelopePhys; - RichTbPMTQuartzWPVol[CurPMTNum]= PMTQuartzWPhys; - RichTbPMTPhCathodePVol[CurPMTNum]= PMTPhCathodePhys; - RichTbPMTFrontRingPVol[CurPMTNum] = PMTFrontRingPhys; + G4VPhysicalVolume *PMTQuartzWPhys = + new G4PVPlacement(PMTQuartzWindowTransform, PMTQuartzWPhysName + PMTNumberName[CurPMTNum], RichTbPMTQuartzWLVol, + CurMPhys, false, 0); + G4VPhysicalVolume *PMTPhCathodePhys = + new G4PVPlacement(PMTPhCathodeTransform, PMTPhCathodePhysName + PMTNumberName[CurPMTNum], RichTbPMTPhCathodeLVol, + CurMPhys, false, 0); + RichTbPMTEnvelopePVol[CurPMTNum] = PMTEnvelopePhys; + RichTbPMTQuartzWPVol[CurPMTNum] = PMTQuartzWPhys; + RichTbPMTPhCathodePVol[CurPMTNum] = PMTPhCathodePhys; + RichTbPMTFrontRingPVol[CurPMTNum] = PMTFrontRingPhys; } - - -void RichTbPMT::constructPMTMasterTree(int CurPMTNum) -{ - - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - // RichTbRunConfig* aRunConfig= RichTbRunConfig::getRunConfigInstance(); - RichTbRunConfig* aConfig = RichTbRunConfig::getRunConfigInstance(); - G4int aRadiatorConfiguration = aConfig->getRadiatorConfiguration(); - - - - G4RotationMatrix PMTSMasterRot, PMTAnodeRot; - G4ThreeVector PMTSMasterPos(PMTSMasterBoxXPos,PMTSMasterBoxYPos,PMTSMasterBoxZPos); - G4Transform3D PMTSMasterTransform( PMTSMasterRot,PMTSMasterPos); - - - G4ThreeVector PMTAnodePos(RichTbPMTAnodeXLocation, - RichTbPMTAnodeYLocation, - RichTbPMTAnodeZLocation); - - G4Transform3D PMTAnodeTransform( PMTAnodeRot, PMTAnodePos); - - - G4String PMTMasterBoxName = PMTNamesBox[ CurPMTNum ]; - G4String PMTMasterLogVolName= PMTNamesLog[CurPMTNum ]; - G4String PMTMasterPhysVolName = PMTNamesPhys[ CurPMTNum ]; - - - G4Box* PMTMasterBox - = new G4Box( PMTMasterBoxName, - 0.5 * PMTMasterBoxXSize, - 0.5 * PMTMasterBoxYSize, - 0.5 * PMTMasterBoxZSize ); - G4Box* PMTSMasterBox - = new G4Box( PMTSMNamesBox[CurPMTNum], - 0.5 * PMTMasterBoxXSize, - 0.5 * PMTMasterBoxYSize, - 0.5 * PMTMasterBoxZSize ); - //anode - G4Box* PMTAnode= - new G4Box(PMTANNamesBox[CurPMTNum], - 0.5 * PMTAnodeSupXSize, - 0.5 * PMTAnodeSupYSize, - 0.5 * PMTAnodeSupZSize ); - - G4double RichTbPMTMasterXPosFinal= RichTbPmtPosXInEC[CurPMTNum] ; - G4double RichTbPMTMasterYPosFinal= RichTbPmtPosYInEC[CurPMTNum]; - G4double RichTbPMTMasterZPosFinal = RichTbPmtPosZInEC ; - G4ThreeVector PMTMasterPos(RichTbPMTMasterXPosFinal, - RichTbPMTMasterYPosFinal, - RichTbPMTMasterZPosFinal); - - // G4RotationMatrix PMTMasterRotY; - //G4Transform3D PMTMasterTransform(PMTMasterRotY*PMTMasterRotZ, - // PMTMasterPos); - - G4RotationMatrix PMTMasterRotZ; - PMTMasterRotZ.rotateZ(RichTbPmtRotZInEC[CurPMTNum]); - - - - G4Transform3D PMTMasterTransform(PMTMasterRotZ,PMTMasterPos); - - G4LogicalVolume* PMTMasterLog= - new G4LogicalVolume(PMTMasterBox,aMaterial-> getRichTbVaccum(), - PMTMasterLogVolName ,0,0,0); - - G4VPhysicalVolume* PMTMasterPhys; - if(aRadiatorConfiguration==3){ - if(CurPMTNum<=MaxPmtNumInEC0) { - PMTMasterPhys = new G4PVPlacement(PMTMasterTransform,PMTMasterPhysVolName, - PMTMasterLog, - PmtECFrame->getRichTbECLeftPVol(), - false, CurPMTNum); - }else if(CurPMTNum<=MaxPmtNumInEC1) { - PMTMasterPhys = new G4PVPlacement(PMTMasterTransform,PMTMasterPhysVolName, - PMTMasterLog, - PmtECFrame->getRichTbECRightPVol(), - false, CurPMTNum); - }else if(CurPMTNum<=MaxPmtNumInEC2) { - PMTMasterPhys = new G4PVPlacement(PMTMasterTransform,PMTMasterPhysVolName, - PMTMasterLog, - PmtECFrame->getRichTbECBottomLeftPVol(), - false, CurPMTNum); - }else if(CurPMTNum<=MaxPmtNumInEC3) { - PMTMasterPhys = new G4PVPlacement(PMTMasterTransform,PMTMasterPhysVolName, - PMTMasterLog, - PmtECFrame->getRichTbECBottomRightPVol(), - false, CurPMTNum); - } - }else{ - PMTMasterPhys = (CurPMTNum <= MaxPmtNumInEC0) ? - ( new G4PVPlacement(PMTMasterTransform,PMTMasterPhysVolName, - PMTMasterLog, - PmtECFrame->getRichTbECLeftPVol(), - false, CurPMTNum)) : - ( new G4PVPlacement(PMTMasterTransform,PMTMasterPhysVolName, - PMTMasterLog, - PmtECFrame->getRichTbECRightPVol(), - false, CurPMTNum)) ; - } - - G4LogicalVolume* PMTSMasterLog= - new G4LogicalVolume(PMTSMasterBox,aMaterial-> getRichTbVaccum(), - PMTSMNamesLog[CurPMTNum] ,0,0,0); - - G4LogicalVolume* PMTAnodeLog = - new G4LogicalVolume(PMTAnode ,aMaterial->getPMTAnodeMaterial() , - PMTANNamesLog[CurPMTNum] ,0,0,0); - - G4VPhysicalVolume* PMTSMasterPhys = - new G4PVPlacement(PMTSMasterTransform, PMTSMNamesPhys [CurPMTNum], - PMTSMasterLog,PMTMasterPhys,false, 0); - - G4VPhysicalVolume* PMTAnodePhys = - new G4PVPlacement(PMTAnodeTransform,PMTANNamesPhys [CurPMTNum], - PMTAnodeLog, PMTSMasterPhys,false, 0); - - RichTbPMTMasterLVol[CurPMTNum]=PMTMasterLog; - RichTbPMTMasterPVol[CurPMTNum]=PMTMasterPhys; - RichTbPMTSMasterLVol[CurPMTNum]=PMTSMasterLog; - RichTbPMTSMasterPVol[CurPMTNum]=PMTSMasterPhys; - RichTbPMTAnodeLVol[CurPMTNum]=PMTAnodeLog; - RichTbPMTAnodePVol[CurPMTNum]=PMTAnodePhys; - - - - +void RichTbPMT::constructPMTMasterTree(int CurPMTNum) { + + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + // RichTbRunConfig* aRunConfig= RichTbRunConfig::getRunConfigInstance(); + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); + G4int aRadiatorConfiguration = aConfig->getRadiatorConfiguration(); + + G4RotationMatrix PMTSMasterRot, PMTAnodeRot; + G4ThreeVector PMTSMasterPos(PMTSMasterBoxXPos, PMTSMasterBoxYPos, PMTSMasterBoxZPos); + G4Transform3D PMTSMasterTransform(PMTSMasterRot, PMTSMasterPos); + + G4ThreeVector PMTAnodePos(RichTbPMTAnodeXLocation, RichTbPMTAnodeYLocation, RichTbPMTAnodeZLocation); + + G4Transform3D PMTAnodeTransform(PMTAnodeRot, PMTAnodePos); + + G4String PMTMasterBoxName = PMTNamesBox[CurPMTNum]; + G4String PMTMasterLogVolName = PMTNamesLog[CurPMTNum]; + G4String PMTMasterPhysVolName = PMTNamesPhys[CurPMTNum]; + + G4Box *PMTMasterBox = + new G4Box(PMTMasterBoxName, 0.5 * PMTMasterBoxXSize, 0.5 * PMTMasterBoxYSize, 0.5 * PMTMasterBoxZSize); + G4Box *PMTSMasterBox = + new G4Box(PMTSMNamesBox[CurPMTNum], 0.5 * PMTMasterBoxXSize, 0.5 * PMTMasterBoxYSize, 0.5 * PMTMasterBoxZSize); + // anode + G4Box *PMTAnode = + new G4Box(PMTANNamesBox[CurPMTNum], 0.5 * PMTAnodeSupXSize, 0.5 * PMTAnodeSupYSize, 0.5 * PMTAnodeSupZSize); + + G4double RichTbPMTMasterXPosFinal = RichTbPmtPosXInEC[CurPMTNum]; + G4double RichTbPMTMasterYPosFinal = RichTbPmtPosYInEC[CurPMTNum]; + G4double RichTbPMTMasterZPosFinal = RichTbPmtPosZInEC; + G4ThreeVector PMTMasterPos(RichTbPMTMasterXPosFinal, RichTbPMTMasterYPosFinal, RichTbPMTMasterZPosFinal); + + // G4RotationMatrix PMTMasterRotY; + // G4Transform3D PMTMasterTransform(PMTMasterRotY*PMTMasterRotZ, + // PMTMasterPos); + + G4RotationMatrix PMTMasterRotZ; + PMTMasterRotZ.rotateZ(RichTbPmtRotZInEC[CurPMTNum]); + + G4Transform3D PMTMasterTransform(PMTMasterRotZ, PMTMasterPos); + + G4LogicalVolume *PMTMasterLog = + new G4LogicalVolume(PMTMasterBox, aMaterial->getRichTbVaccum(), PMTMasterLogVolName, 0, 0, 0); + + G4VPhysicalVolume *PMTMasterPhys; + if (aRadiatorConfiguration == 3) { + if (CurPMTNum <= MaxPmtNumInEC0) { + PMTMasterPhys = new G4PVPlacement(PMTMasterTransform, PMTMasterPhysVolName, PMTMasterLog, + PmtECFrame->getRichTbECLeftPVol(), false, CurPMTNum); + } else if (CurPMTNum <= MaxPmtNumInEC1) { + PMTMasterPhys = new G4PVPlacement(PMTMasterTransform, PMTMasterPhysVolName, PMTMasterLog, + PmtECFrame->getRichTbECRightPVol(), false, CurPMTNum); + } else if (CurPMTNum <= MaxPmtNumInEC2) { + PMTMasterPhys = new G4PVPlacement(PMTMasterTransform, PMTMasterPhysVolName, PMTMasterLog, + PmtECFrame->getRichTbECBottomLeftPVol(), false, CurPMTNum); + } else if (CurPMTNum <= MaxPmtNumInEC3) { + PMTMasterPhys = new G4PVPlacement(PMTMasterTransform, PMTMasterPhysVolName, PMTMasterLog, + PmtECFrame->getRichTbECBottomRightPVol(), false, CurPMTNum); + } + } else { + PMTMasterPhys = (CurPMTNum <= MaxPmtNumInEC0) + ? (new G4PVPlacement(PMTMasterTransform, PMTMasterPhysVolName, PMTMasterLog, + PmtECFrame->getRichTbECLeftPVol(), false, CurPMTNum)) + : (new G4PVPlacement(PMTMasterTransform, PMTMasterPhysVolName, PMTMasterLog, + PmtECFrame->getRichTbECRightPVol(), false, CurPMTNum)); + } + + G4LogicalVolume *PMTSMasterLog = + new G4LogicalVolume(PMTSMasterBox, aMaterial->getRichTbVaccum(), PMTSMNamesLog[CurPMTNum], 0, 0, 0); + + G4LogicalVolume *PMTAnodeLog = + new G4LogicalVolume(PMTAnode, aMaterial->getPMTAnodeMaterial(), PMTANNamesLog[CurPMTNum], 0, 0, 0); + + G4VPhysicalVolume *PMTSMasterPhys = + new G4PVPlacement(PMTSMasterTransform, PMTSMNamesPhys[CurPMTNum], PMTSMasterLog, PMTMasterPhys, false, 0); + + G4VPhysicalVolume *PMTAnodePhys = + new G4PVPlacement(PMTAnodeTransform, PMTANNamesPhys[CurPMTNum], PMTAnodeLog, PMTSMasterPhys, false, 0); + + RichTbPMTMasterLVol[CurPMTNum] = PMTMasterLog; + RichTbPMTMasterPVol[CurPMTNum] = PMTMasterPhys; + RichTbPMTSMasterLVol[CurPMTNum] = PMTSMasterLog; + RichTbPMTSMasterPVol[CurPMTNum] = PMTSMasterPhys; + RichTbPMTAnodeLVol[CurPMTNum] = PMTAnodeLog; + RichTbPMTAnodePVol[CurPMTNum] = PMTAnodePhys; } -void RichTbPMT::constructPMTAnode() -{ - - RichTbAnodePxPVol.resize( CurNumPmts); - for (G4int jpmt =0; jpmt < CurNumPmts ; jpmt++ ){ - RichTbAnodePxPVol[jpmt].reserve( NumPixelInPmtCol*NumPixelInPmtRow); - } - - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - - - G4Box* PMTSiPxBox = - new G4Box("PMTAnodePxBox",0.5*PmtAnodePixelXSize,0.5*PmtAnodePixelYSize, - 0.5* RichTbPMTAnodePixelZSize); +void RichTbPMT::constructPMTAnode() { - G4LogicalVolume* PMTAnodePxLog = - new G4LogicalVolume( PMTSiPxBox, - aMaterial->getPMTAnodeMaterial(), - "PMTAnodePxLog",0,0,0); + RichTbAnodePxPVol.resize(CurNumPmts); + for (G4int jpmt = 0; jpmt < CurNumPmts; jpmt++) { + RichTbAnodePxPVol[jpmt].reserve(NumPixelInPmtCol * NumPixelInPmtRow); + } - //Now for the readout dummy sensitive detector - // This just flags the pixel as active. - // for now all pixels are set active. To deactivate - // specific pixels, the log vol must be created for each - // given pixel and the set to be active as done below. This means - // a separate log vol must be created for every pixel. + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - G4bool thisPixelisAlive=true; - if(thisPixelisAlive){ - RichTbRODummySD * DummySensi = new RichTbRODummySD; - PMTAnodePxLog->SetSensitiveDetector(DummySensi); - } + G4Box *PMTSiPxBox = + new G4Box("PMTAnodePxBox", 0.5 * PmtAnodePixelXSize, 0.5 * PmtAnodePixelYSize, 0.5 * RichTbPMTAnodePixelZSize); + G4LogicalVolume *PMTAnodePxLog = + new G4LogicalVolume(PMTSiPxBox, aMaterial->getPMTAnodeMaterial(), "PMTAnodePxLog", 0, 0, 0); - // now positioning the pixels in the Silicon Det. + // Now for the readout dummy sensitive detector + // This just flags the pixel as active. + // for now all pixels are set active. To deactivate + // specific pixels, the log vol must be created for each + // given pixel and the set to be active as done below. This means + // a separate log vol must be created for every pixel. - G4RotationMatrix PMTAnodeRot; + G4bool thisPixelisAlive = true; + if (thisPixelisAlive) { + RichTbRODummySD *DummySensi = new RichTbRODummySD; + PMTAnodePxLog->SetSensitiveDetector(DummySensi); + } + // now positioning the pixels in the Silicon Det. + G4RotationMatrix PMTAnodeRot; - G4double aPixelColStartX = -0.5*(NumPixelInPmtRow-1)*PmtAnodePixelXSize; - G4double aPixelColStartY = -0.5*(NumPixelInPmtCol-1)*PmtAnodePixelYSize; + G4double aPixelColStartX = -0.5 * (NumPixelInPmtRow - 1) * PmtAnodePixelXSize; + G4double aPixelColStartY = -0.5 * (NumPixelInPmtCol - 1) * PmtAnodePixelYSize; + for (G4int iPixelRowY = 0; iPixelRowY < NumPixelInPmtCol; iPixelRowY++) { + for (G4int iPixelColX = 0; iPixelColX < NumPixelInPmtRow; iPixelColX++) { - for(G4int iPixelRowY = 0; iPixelRowY < NumPixelInPmtCol ; iPixelRowY++){ - for (G4int iPixelColX = 0; iPixelColX < NumPixelInPmtRow ; iPixelColX++){ + G4int PixelCopyNumber = iPixelColX + iPixelRowY * NumPixelInPmtRow; - G4int PixelCopyNumber = iPixelColX + iPixelRowY*NumPixelInPmtRow; + G4double curPixelPosX = aPixelColStartX + iPixelColX * PmtAnodePixelXSize; - G4double curPixelPosX = aPixelColStartX + iPixelColX*PmtAnodePixelXSize ; + G4double curPixelPosY = aPixelColStartY + iPixelRowY * PmtAnodePixelYSize; - G4double curPixelPosY = aPixelColStartY + iPixelRowY*PmtAnodePixelYSize; + G4ThreeVector PMTAnodePxPos(curPixelPosX, curPixelPosY, RichTbPMTAnodePixelPosZ); + G4Transform3D PMTAnodeTransform(PMTAnodeRot, PMTAnodePxPos); - G4ThreeVector PMTAnodePxPos(curPixelPosX, curPixelPosY, RichTbPMTAnodePixelPosZ); - G4Transform3D PMTAnodeTransform(PMTAnodeRot, PMTAnodePxPos); + for (G4int ipmt = 0; ipmt < CurNumPmts; ipmt++) { - for (G4int ipmt =0; ipmt < CurNumPmts ; ipmt++ ){ - - G4VPhysicalVolume* PMTAnodePxPhys = - new G4PVPlacement( PMTAnodeTransform,"PMTAnodePxPhys"+PMTNumberName[ipmt], - PMTAnodePxLog, RichTbPMTAnodePVol[ipmt], false, PixelCopyNumber); - RichTbAnodePxPVol[ipmt].push_back(PMTAnodePxPhys); - } - - - } - - - - } - - RichTbAnodePxLVol=PMTAnodePxLog; + G4VPhysicalVolume *PMTAnodePxPhys = + new G4PVPlacement(PMTAnodeTransform, "PMTAnodePxPhys" + PMTNumberName[ipmt], PMTAnodePxLog, + RichTbPMTAnodePVol[ipmt], false, PixelCopyNumber); + RichTbAnodePxPVol[ipmt].push_back(PMTAnodePxPhys); + } + } + } + RichTbAnodePxLVol = PMTAnodePxLog; } - - //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbROGeometry.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbROGeometry.cc index 717b926102235ed0de4afe7474ac790ce0a66b2d..50ef9f137d72d1f0d2ba5d0082720a4756cebead 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbROGeometry.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbROGeometry.cc @@ -1,18 +1,16 @@ // $Id: $ // Include files - - // local #include "RichTbROGeometry.hh" -#include "RichTbUpgradeDetectorConstruction.hh" -#include "RichTbRunConfig.hh" #include "RichTbGeometryParameters.hh" #include "RichTbHall.hh" -#include "RichTbUpgradeVessel.hh" +#include "RichTbRunConfig.hh" #include "RichTbUpgradeCrystalMaster.hh" -#include "RichTbUpgradePhDetSupFrame.hh" +#include "RichTbUpgradeDetectorConstruction.hh" #include "RichTbUpgradeEC.hh" +#include "RichTbUpgradePhDetSupFrame.hh" +#include "RichTbUpgradeVessel.hh" #include "RichTbPMT.hh" //----------------------------------------------------------------------------- @@ -24,71 +22,61 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbROGeometry::RichTbROGeometry(G4String RoNameString, - RichTbDetectorConstruction* aDet ) -: G4VReadOutGeometry(RoNameString){ - - CurDet = aDet; +RichTbROGeometry::RichTbROGeometry(G4String RoNameString, RichTbDetectorConstruction *aDet) + : G4VReadOutGeometry(RoNameString) { + CurDet = aDet; } -G4VPhysicalVolume* RichTbROGeometry::Build() -{ - RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - // now construct the readout geometry. - RichTbHall* rTbHallRO = new RichTbHall(); - RichTbUpgradeVessel* rTbVesselRO = new RichTbUpgradeVessel(rTbHallRO ); - RichTbUpgradeCrystalMaster* rTbCrystalMasterRO = new RichTbUpgradeCrystalMaster(rTbVesselRO ); - - G4int aRadiatorConfiguration = aConfig->getRadiatorConfiguration(); - if(aRadiatorConfiguration == 0){ - - // RichTbCrystal* rTbCrystalRO = new RichTbCrystal(rTbCrystalMasterRO ); - // RichTbLens* rTbLensRO = new RichTbLens(rTbCrystalMasterRO ); - // RichTbCrystalCover* rTbCrystalCoverRO = new RichTbCrystalCover(rTbCrystalMasterRO ); - - }else{ - - // RichTbUpgradeRadiator* rTbUpgradeRadiatorRO = new RichTbUpgradeRadiator(rTbCrystalMasterRO ); - // RichTbUpgradeMirror* rTbMirrorRO = new RichTbUpgradeMirror(rTbCrystalMasterRO ); - // RichTbUpgradeDarkCover* rTbDarkCoverRO = new RichTbUpgradeDarkCover(rTbRadiatorRO ); - - RichTbUpgradePhDetSupFrame* rTbUpgradePhotSupFrameRO = new RichTbUpgradePhDetSupFrame(rTbCrystalMasterRO); - if( aRadiatorConfiguration == 1){ - rTbUpgradePhotSupFrameRO ->constructRichTbPhotoDetectorSupFrame(); - }else if (aRadiatorConfiguration == 2) { - rTbUpgradePhotSupFrameRO ->constructRichTbPhotoDetectorSupFrameWithHpd(); - }else if(aRadiatorConfiguration == 3) { - rTbUpgradePhotSupFrameRO->constructRichTbPhotoDetectorSupFrame15(); - } - - - - RichTbUpgradeEC * rTbECRO = new RichTbUpgradeEC(rTbUpgradePhotSupFrameRO); - if( aRadiatorConfiguration == 1){ - rTbECRO -> constructRichTbUpgradeEC (); - rTbECRO -> constructRichTbUpgradeECSupport (); - }else if( aRadiatorConfiguration == 2) { - rTbECRO -> constructRichTbUpgradeSingleEC (); - rTbECRO -> constructRichTbUpgradeSingleECSupport (); - }else if(aRadiatorConfiguration == 3) { - rTbECRO->constructRichTbUpgradeEC15(); - rTbECRO->constructRichTbUpgradeECSupport15(); - } - - - - RichTbPMT * rTbPMTRO = new RichTbPMT( rTbECRO ); - rTbPMTRO ->setTrackingSwitch(false); - rTbPMTRO ->buildPMTGeometry() ; - G4cout<<"created pmt ro geometry "<<G4endl; - - } - - return rTbHallRO->getRichTbHallPhysicalVolume(); - +G4VPhysicalVolume *RichTbROGeometry::Build() { + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); + // now construct the readout geometry. + RichTbHall *rTbHallRO = new RichTbHall(); + RichTbUpgradeVessel *rTbVesselRO = new RichTbUpgradeVessel(rTbHallRO); + RichTbUpgradeCrystalMaster *rTbCrystalMasterRO = new RichTbUpgradeCrystalMaster(rTbVesselRO); + + G4int aRadiatorConfiguration = aConfig->getRadiatorConfiguration(); + if (aRadiatorConfiguration == 0) { + + // RichTbCrystal* rTbCrystalRO = new RichTbCrystal(rTbCrystalMasterRO ); + // RichTbLens* rTbLensRO = new RichTbLens(rTbCrystalMasterRO ); + // RichTbCrystalCover* rTbCrystalCoverRO = new RichTbCrystalCover(rTbCrystalMasterRO ); + + } else { + + // RichTbUpgradeRadiator* rTbUpgradeRadiatorRO = new RichTbUpgradeRadiator(rTbCrystalMasterRO ); + // RichTbUpgradeMirror* rTbMirrorRO = new RichTbUpgradeMirror(rTbCrystalMasterRO ); + // RichTbUpgradeDarkCover* rTbDarkCoverRO = new RichTbUpgradeDarkCover(rTbRadiatorRO ); + + RichTbUpgradePhDetSupFrame *rTbUpgradePhotSupFrameRO = new RichTbUpgradePhDetSupFrame(rTbCrystalMasterRO); + if (aRadiatorConfiguration == 1) { + rTbUpgradePhotSupFrameRO->constructRichTbPhotoDetectorSupFrame(); + } else if (aRadiatorConfiguration == 2) { + rTbUpgradePhotSupFrameRO->constructRichTbPhotoDetectorSupFrameWithHpd(); + } else if (aRadiatorConfiguration == 3) { + rTbUpgradePhotSupFrameRO->constructRichTbPhotoDetectorSupFrame15(); + } + + RichTbUpgradeEC *rTbECRO = new RichTbUpgradeEC(rTbUpgradePhotSupFrameRO); + if (aRadiatorConfiguration == 1) { + rTbECRO->constructRichTbUpgradeEC(); + rTbECRO->constructRichTbUpgradeECSupport(); + } else if (aRadiatorConfiguration == 2) { + rTbECRO->constructRichTbUpgradeSingleEC(); + rTbECRO->constructRichTbUpgradeSingleECSupport(); + } else if (aRadiatorConfiguration == 3) { + rTbECRO->constructRichTbUpgradeEC15(); + rTbECRO->constructRichTbUpgradeECSupport15(); + } + + RichTbPMT *rTbPMTRO = new RichTbPMT(rTbECRO); + rTbPMTRO->setTrackingSwitch(false); + rTbPMTRO->buildPMTGeometry(); + G4cout << "created pmt ro geometry " << G4endl; + } + + return rTbHallRO->getRichTbHallPhysicalVolume(); } - //============================================================================= // Destructor //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbROGeometryHpd.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbROGeometryHpd.cc index 594b636205117633d4c1858788a26b05fb18c119..483f1d4775174bd41c0eb705053eb4f940835b31 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbROGeometryHpd.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbROGeometryHpd.cc @@ -1,17 +1,15 @@ // Include files - - // local #include "RichTbROGeometryHpd.hh" -#include "RichTbUpgradeDetectorConstruction.hh" -#include "RichTbRunConfig.hh" #include "RichTbGeometryParameters.hh" #include "RichTbHall.hh" -#include "RichTbUpgradeVessel.hh" +#include "RichTbRunConfig.hh" #include "RichTbUpgradeCrystalMaster.hh" -#include "RichTbUpgradePhDetSupFrame.hh" +#include "RichTbUpgradeDetectorConstruction.hh" #include "RichTbUpgradeEC.hh" +#include "RichTbUpgradePhDetSupFrame.hh" +#include "RichTbUpgradeVessel.hh" #include "RichTbHpd.hh" @@ -24,40 +22,33 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbROGeometryHpd::RichTbROGeometryHpd(G4String RoNameString, - RichTbDetectorConstruction* aDet ) -: G4VReadOutGeometry(RoNameString){ +RichTbROGeometryHpd::RichTbROGeometryHpd(G4String RoNameString, RichTbDetectorConstruction *aDet) + : G4VReadOutGeometry(RoNameString) { CurDet = aDet; - } -G4VPhysicalVolume* RichTbROGeometryHpd::Build() { +G4VPhysicalVolume *RichTbROGeometryHpd::Build() { - RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); // now construct the readout geometry. - RichTbHall* rTbHallRO = new RichTbHall(); - RichTbUpgradeVessel* rTbVesselRO = new RichTbUpgradeVessel(rTbHallRO ); - RichTbUpgradeCrystalMaster* rTbCrystalMasterRO = new RichTbUpgradeCrystalMaster(rTbVesselRO ); - - G4int aRadiatorConfiguration =aConfig ->getRadiatorConfiguration(); + RichTbHall *rTbHallRO = new RichTbHall(); + RichTbUpgradeVessel *rTbVesselRO = new RichTbUpgradeVessel(rTbHallRO); + RichTbUpgradeCrystalMaster *rTbCrystalMasterRO = new RichTbUpgradeCrystalMaster(rTbVesselRO); - if(aRadiatorConfiguration == 2){ + G4int aRadiatorConfiguration = aConfig->getRadiatorConfiguration(); - RichTbUpgradePhDetSupFrame* rTbUpgradePhotSupFrameRO = new RichTbUpgradePhDetSupFrame(rTbCrystalMasterRO); - rTbUpgradePhotSupFrameRO ->constructRichTbPhotoDetectorSupFrameWithHpd(); - - RichTbHpd* rTbHpdRO = new RichTbHpd(0, rTbUpgradePhotSupFrameRO); - rTbHpdRO -> setTrackingSwitch(false); - rTbHpdRO -> buildHpdGeometry(); - G4cout<<"created hpd ro geometry "<<G4endl; + if (aRadiatorConfiguration == 2) { + RichTbUpgradePhDetSupFrame *rTbUpgradePhotSupFrameRO = new RichTbUpgradePhDetSupFrame(rTbCrystalMasterRO); + rTbUpgradePhotSupFrameRO->constructRichTbPhotoDetectorSupFrameWithHpd(); + RichTbHpd *rTbHpdRO = new RichTbHpd(0, rTbUpgradePhotSupFrameRO); + rTbHpdRO->setTrackingSwitch(false); + rTbHpdRO->buildHpdGeometry(); + G4cout << "created hpd ro geometry " << G4endl; } - - return rTbHallRO->getRichTbHallPhysicalVolume(); - - + return rTbHallRO->getRichTbHallPhysicalVolume(); } //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbSurface.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbSurface.cc index e63dc16f132651530b9d6639e3c23134fe041b57..5fcd48239e81ae51657b321f12a11fe266e7282f 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbSurface.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbSurface.cc @@ -1,15 +1,12 @@ // $Id: $ -// Include files - - +// Include files // local #include "RichTbSurface.hh" #include "Geant4/G4LogicalBorderSurface.hh" +#include "RichTbPMT.hh" #include "RichTbSurfaceDefinition.hh" #include "RichTbUpgradeDetectorConstruction.hh" -#include "RichTbPMT.hh" - //----------------------------------------------------------------------------- // Implementation file for class : RichTbSurface @@ -20,109 +17,95 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbSurface::RichTbSurface( - RichTbDetectorConstruction* aDet ) { +RichTbSurface::RichTbSurface(RichTbDetectorConstruction *aDet) { - curDet= aDet; + curDet = aDet; createBorderSurfaces(); - } -RichTbSurface::~RichTbSurface( ) {} - -void RichTbSurface::createBorderSurfaces() -{ - - RichTbSurfaceDefinition* aSurfaceDef= - RichTbSurfaceDefinition::getRichTbSurfaceDefinitionInstance(); - - - G4cout << "creating mirror surface" << G4endl; - G4LogicalBorderSurface* MirrorBorderSurface = - new G4LogicalBorderSurface("RichTbMirrorSurface", - curDet->getRichTbUpgradeRadiator()->getRichTbUpgradeRadiatorPVol(), - curDet-> getRichTbUpgradeMirror()-> getRichTbUpgradeMirrorPVol(), - aSurfaceDef->getRichTbSphMirrorSurface()); - - - // curDet->getRichTbUpgradeCrystalMaster()->getRichTbUpgradeCrystalMasterPVol(), - - - G4LogicalBorderSurface* VesselOuterSurface= - new G4LogicalBorderSurface("VesselOuterSurface", - curDet-> getRichTbHall()-> getRichTbHallPhysicalVolume(), - curDet->getRichTbUpgradeVessel()->getRichTbGasVesselPVol(), - aSurfaceDef-> getRichTbVesselSurface()); - - G4LogicalBorderSurface* VesselOuterBackSurface = - new G4LogicalBorderSurface ("VesselOuterBackSurface", - curDet->getRichTbUpgradeVessel()->getRichTbGasVesselPVol(), - curDet-> getRichTbHall()-> getRichTbHallPhysicalVolume(), - aSurfaceDef-> getRichTbVesselSurface()); - - /* for(G4int ih=0; ih<curDet->getRichTbPhDetSupFrame()-> getNumPMTVol();ih++){ - - - G4LogicalBorderSurface* PMTMasterToQuartzWSurface = - new G4LogicalBorderSurface("PMTMasterToQuartzWSurface", - curDet->getRichTbPhDetSupFrame()-> - getSinglePMTVolume(ih)-> getRichTbPMTSMasterPVol(), - curDet->getRichTbPhDetSupFrame()-> - getSinglePMTVolume(ih)-> getRichTbPMTQuartzWPVol(), - aSurfaceDef->getRichTbPMTMasterQuartzWSurface()); - - G4LogicalBorderSurface* PMTQuartzWToMasterSurface = - new G4LogicalBorderSurface("PMTQuartzWToMasterSurface", - curDet->getRichTbPhDetSupFrame()-> - getSinglePMTVolume(ih)-> getRichTbPMTQuartzWPVol(), - curDet->getRichTbPhDetSupFrame()-> - getSinglePMTVolume(ih)-> getRichTbPMTSMasterPVol(), - aSurfaceDef->getRichTbPMTMasterQuartzWSurface()); - - G4LogicalBorderSurface* PMTQuartzWToPhCathodeSurface = - new G4LogicalBorderSurface("PMTQuartzWToPhCathodeSurface", - curDet->getRichTbPhDetSupFrame()-> - getSinglePMTVolume(ih)-> getRichTbPMTQuartzWPVol(), - curDet->getRichTbPhDetSupFrame()-> - getSinglePMTVolume(ih)-> getRichTbPMTPhCathodePVol(), - aSurfaceDef-> getRichTbPMTQuartzWPhCathodeSurface()); - - G4LogicalBorderSurface* PMTPhCathodeToQuartzSurface = - new G4LogicalBorderSurface("PMTPhCathodeToQuartzSurface", - curDet->getRichTbPhDetSupFrame()-> - getSinglePMTVolume(ih)-> getRichTbPMTPhCathodePVol(), - curDet->getRichTbPhDetSupFrame()-> - getSinglePMTVolume(ih)-> getRichTbPMTQuartzWPVol(), - aSurfaceDef-> getRichTbPMTQuartzWPhCathodeSurface()); - - G4LogicalBorderSurface* PMTKovarEnvelopeTubeSurface = - new G4LogicalBorderSurface("PMTKovarEnvelopeTubeSurface", - curDet->getRichTbPhDetSupFrame()-> - getSinglePMTVolume(ih)-> getRichTbPMTSMasterPVol(), - curDet->getRichTbPhDetSupFrame()-> - getSinglePMTVolume(ih)-> getRichTbPMTEnvelopeTubePVol(), - aSurfaceDef-> getRichTbKovarSurface()); - - G4LogicalBorderSurface* PMTKovarEnvelopeEndCapSurface = - new G4LogicalBorderSurface("PMTKovarEnvelopeEndCapSurface", - curDet->getRichTbPhDetSupFrame()-> - getSinglePMTVolume(ih)-> getRichTbPMTSMasterPVol(), - curDet->getRichTbPhDetSupFrame()-> - getSinglePMTVolume(ih)-> getRichTbPMTEnvelopeEndCapPVol(), - aSurfaceDef-> getRichTbKovarSurface()); - - G4LogicalBorderSurface* PMTSiDetSurface = - new G4LogicalBorderSurface("PMTSiDetSurface", - curDet->getRichTbPhDetSupFrame()-> - getSinglePMTVolume(ih)-> getRichTbPMTSMasterPVol(), - curDet->getRichTbPhDetSupFrame()-> - getSinglePMTVolume(ih)-> getRichTbPMTSiDetPVol(), - aSurfaceDef-> getRichTbSiDetSurface()); - - - } - */ - +RichTbSurface::~RichTbSurface() {} + +void RichTbSurface::createBorderSurfaces() { + + // RichTbSurfaceDefinition *aSurfaceDef = RichTbSurfaceDefinition::getRichTbSurfaceDefinitionInstance(); + + G4cout << "creating mirror surface" << G4endl; +/* G4LogicalBorderSurface *MirrorBorderSurface = new G4LogicalBorderSurface( + "RichTbMirrorSurface", curDet->getRichTbUpgradeRadiator()->getRichTbUpgradeRadiatorPVol(), + curDet->getRichTbUpgradeMirror()->getRichTbUpgradeMirrorPVol(), aSurfaceDef->getRichTbSphMirrorSurface()); */ + + // curDet->getRichTbUpgradeCrystalMaster()->getRichTbUpgradeCrystalMasterPVol(), + +/* G4LogicalBorderSurface *VesselOuterSurface = new G4LogicalBorderSurface( + "VesselOuterSurface", curDet->getRichTbHall()->getRichTbHallPhysicalVolume(), + curDet->getRichTbUpgradeVessel()->getRichTbGasVesselPVol(), aSurfaceDef->getRichTbVesselSurface()); */ + +/* G4LogicalBorderSurface *VesselOuterBackSurface = new G4LogicalBorderSurface( + "VesselOuterBackSurface", curDet->getRichTbUpgradeVessel()->getRichTbGasVesselPVol(), + curDet->getRichTbHall()->getRichTbHallPhysicalVolume(), aSurfaceDef->getRichTbVesselSurface()); */ + + /* for(G4int ih=0; ih<curDet->getRichTbPhDetSupFrame()-> getNumPMTVol();ih++){ + + + G4LogicalBorderSurface* PMTMasterToQuartzWSurface = + new G4LogicalBorderSurface("PMTMasterToQuartzWSurface", + curDet->getRichTbPhDetSupFrame()-> + getSinglePMTVolume(ih)-> getRichTbPMTSMasterPVol(), + curDet->getRichTbPhDetSupFrame()-> + getSinglePMTVolume(ih)-> getRichTbPMTQuartzWPVol(), + aSurfaceDef->getRichTbPMTMasterQuartzWSurface()); + + G4LogicalBorderSurface* PMTQuartzWToMasterSurface = + new G4LogicalBorderSurface("PMTQuartzWToMasterSurface", + curDet->getRichTbPhDetSupFrame()-> + getSinglePMTVolume(ih)-> getRichTbPMTQuartzWPVol(), + curDet->getRichTbPhDetSupFrame()-> + getSinglePMTVolume(ih)-> getRichTbPMTSMasterPVol(), + aSurfaceDef->getRichTbPMTMasterQuartzWSurface()); + + G4LogicalBorderSurface* PMTQuartzWToPhCathodeSurface = + new G4LogicalBorderSurface("PMTQuartzWToPhCathodeSurface", + curDet->getRichTbPhDetSupFrame()-> + getSinglePMTVolume(ih)-> getRichTbPMTQuartzWPVol(), + curDet->getRichTbPhDetSupFrame()-> + getSinglePMTVolume(ih)-> getRichTbPMTPhCathodePVol(), + aSurfaceDef-> getRichTbPMTQuartzWPhCathodeSurface()); + + G4LogicalBorderSurface* PMTPhCathodeToQuartzSurface = + new G4LogicalBorderSurface("PMTPhCathodeToQuartzSurface", + curDet->getRichTbPhDetSupFrame()-> + getSinglePMTVolume(ih)-> getRichTbPMTPhCathodePVol(), + curDet->getRichTbPhDetSupFrame()-> + getSinglePMTVolume(ih)-> getRichTbPMTQuartzWPVol(), + aSurfaceDef-> getRichTbPMTQuartzWPhCathodeSurface()); + + G4LogicalBorderSurface* PMTKovarEnvelopeTubeSurface = + new G4LogicalBorderSurface("PMTKovarEnvelopeTubeSurface", + curDet->getRichTbPhDetSupFrame()-> + getSinglePMTVolume(ih)-> getRichTbPMTSMasterPVol(), + curDet->getRichTbPhDetSupFrame()-> + getSinglePMTVolume(ih)-> getRichTbPMTEnvelopeTubePVol(), + aSurfaceDef-> getRichTbKovarSurface()); + + G4LogicalBorderSurface* PMTKovarEnvelopeEndCapSurface = + new G4LogicalBorderSurface("PMTKovarEnvelopeEndCapSurface", + curDet->getRichTbPhDetSupFrame()-> + getSinglePMTVolume(ih)-> getRichTbPMTSMasterPVol(), + curDet->getRichTbPhDetSupFrame()-> + getSinglePMTVolume(ih)-> getRichTbPMTEnvelopeEndCapPVol(), + aSurfaceDef-> getRichTbKovarSurface()); + + G4LogicalBorderSurface* PMTSiDetSurface = + new G4LogicalBorderSurface("PMTSiDetSurface", + curDet->getRichTbPhDetSupFrame()-> + getSinglePMTVolume(ih)-> getRichTbPMTSMasterPVol(), + curDet->getRichTbPhDetSupFrame()-> + getSinglePMTVolume(ih)-> getRichTbPMTSiDetPVol(), + aSurfaceDef-> getRichTbSiDetSurface()); + + + } + */ } //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbSurfaceDefinition.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbSurfaceDefinition.cc index 539e06a88092f51226ac9ca9d191da7e58e24695..1472572eb670e56ae5e3853614fff8c1b430de18 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbSurfaceDefinition.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbSurfaceDefinition.cc @@ -1,18 +1,17 @@ // $Id: $ // Include files -#include "Geant4/G4Material.hh" -#include "Geant4/G4MaterialTable.hh" #include "Geant4/G4Element.hh" #include "Geant4/G4ElementTable.hh" +#include "Geant4/G4Material.hh" +#include "Geant4/G4MaterialTable.hh" #include "Geant4/G4OpticalSurface.hh" -#include "RichTbRunConfig.hh" #include "RichTbMaterialParameters.hh" +#include "RichTbRunConfig.hh" #include "RichTbSurfaceParameters.hh" +#include <cstdlib> #include <fstream> #include <vector> -#include <cstdlib> - // local #include "RichTbSurfaceDefinition.hh" @@ -26,421 +25,312 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbSurfaceDefinition* RichTbSurfaceDefinition::RichTbSurfaceDefinitionInstance=0; +RichTbSurfaceDefinition *RichTbSurfaceDefinition::RichTbSurfaceDefinitionInstance = 0; -RichTbSurfaceDefinition::RichTbSurfaceDefinition( ) -: MirrorSurfWlen(std::vector<G4double>(10)), - MirrorSurfReflect(std::vector<G4double>(10)) { +RichTbSurfaceDefinition::RichTbSurfaceDefinition() + : MirrorSurfWlen(std::vector<G4double>(10)), MirrorSurfReflect(std::vector<G4double>(10)) { // in the above 10 is a dummy value. - createMirrorOpticalSurface(); createVesselSurface(); createPMTQuartzWSurface(); createPMTQuartzWPhCathodeSurface(); createRichTbKovarSurface(); createtRichTbSiDetSurface(); - - } -RichTbSurfaceDefinition::~RichTbSurfaceDefinition( ) { - -} +RichTbSurfaceDefinition::~RichTbSurfaceDefinition() {} -RichTbSurfaceDefinition* RichTbSurfaceDefinition::getRichTbSurfaceDefinitionInstance() -{ - if(RichTbSurfaceDefinitionInstance == 0) { - RichTbSurfaceDefinitionInstance= new RichTbSurfaceDefinition( ); +RichTbSurfaceDefinition *RichTbSurfaceDefinition::getRichTbSurfaceDefinitionInstance() { + if (RichTbSurfaceDefinitionInstance == 0) { + RichTbSurfaceDefinitionInstance = new RichTbSurfaceDefinition(); } return RichTbSurfaceDefinitionInstance; - } - -void RichTbSurfaceDefinition::createMirrorOpticalSurface() -{ +void RichTbSurfaceDefinition::createMirrorOpticalSurface() { ReadMirrorReflectivity(); // Now for the Spherical mirror surface - G4double* MirrReflPhotonMomentum - =new G4double[NumPhotMirrorReflectBins]; - G4double* MirrReflect - = new G4double[NumPhotMirrorReflectBins]; - G4double* MirrEff - = new G4double[NumPhotMirrorReflectBins]; - G4double* MirrReflRefIndex - = new G4double[NumPhotMirrorReflectBins]; - - for(G4int ibin=0; ibin<NumPhotMirrorReflectBins;ibin++) { - MirrReflPhotonMomentum[ibin]= - PhotWaveLengthToMom/ - ( MirrorSurfWlen[ibin]*PhotonMirrReflWavelengthUnits); - // in the following the 100 is to convert from percent - // to absolute fraction. - MirrReflect[ibin]= MirrorSurfReflect[ibin]/100.0; - MirrEff[ibin]=0.0; - MirrReflRefIndex[ibin]=1.40; - - // G4cout<<" Mirror reflectivity bin Wlen refl "<< - // ibin<<" "<< MirrorSurfWlen[ibin] <<" " << MirrReflPhotonMomentum[ibin] - // <<" "<< MirrReflect[ibin]<<G4endl; - - } - - G4OpticalSurface* OpRichTbMirrorSurface = - new G4OpticalSurface("RichTbMirrorSurface"); - - OpRichTbMirrorSurface->SetType(dielectric_metal); - OpRichTbMirrorSurface->SetFinish(polished); - OpRichTbMirrorSurface->SetModel(glisur); - G4MaterialPropertiesTable* OpRichTbMirrorSurfaceMPT = - new G4MaterialPropertiesTable(); - - OpRichTbMirrorSurfaceMPT->AddProperty("REFLECTIVITY", - MirrReflPhotonMomentum, - MirrReflect, - NumPhotMirrorReflectBins); - - OpRichTbMirrorSurfaceMPT->AddProperty("EFFICIENCY", - MirrReflPhotonMomentum, - MirrEff, - NumPhotMirrorReflectBins); - OpRichTbMirrorSurfaceMPT->AddProperty("RINDEX", - MirrReflPhotonMomentum, - MirrReflRefIndex, - NumPhotMirrorReflectBins); - OpRichTbMirrorSurface->SetMaterialPropertiesTable(OpRichTbMirrorSurfaceMPT); - - RichTbSphMirrorSurface= OpRichTbMirrorSurface; - -} + G4double *MirrReflPhotonMomentum = new G4double[NumPhotMirrorReflectBins]; + G4double *MirrReflect = new G4double[NumPhotMirrorReflectBins]; + G4double *MirrEff = new G4double[NumPhotMirrorReflectBins]; + G4double *MirrReflRefIndex = new G4double[NumPhotMirrorReflectBins]; + + for (G4int ibin = 0; ibin < NumPhotMirrorReflectBins; ibin++) { + MirrReflPhotonMomentum[ibin] = PhotWaveLengthToMom / (MirrorSurfWlen[ibin] * PhotonMirrReflWavelengthUnits); + // in the following the 100 is to convert from percent + // to absolute fraction. + MirrReflect[ibin] = MirrorSurfReflect[ibin] / 100.0; + MirrEff[ibin] = 0.0; + MirrReflRefIndex[ibin] = 1.40; + + // G4cout<<" Mirror reflectivity bin Wlen refl "<< + // ibin<<" "<< MirrorSurfWlen[ibin] <<" " << MirrReflPhotonMomentum[ibin] + // <<" "<< MirrReflect[ibin]<<G4endl; + } + G4OpticalSurface *OpRichTbMirrorSurface = new G4OpticalSurface("RichTbMirrorSurface"); + OpRichTbMirrorSurface->SetType(dielectric_metal); + OpRichTbMirrorSurface->SetFinish(polished); + OpRichTbMirrorSurface->SetModel(glisur); + G4MaterialPropertiesTable *OpRichTbMirrorSurfaceMPT = new G4MaterialPropertiesTable(); + OpRichTbMirrorSurfaceMPT->AddProperty("REFLECTIVITY", MirrReflPhotonMomentum, MirrReflect, NumPhotMirrorReflectBins); -void RichTbSurfaceDefinition::createVesselSurface() -{ - G4int NumPhotVesselSurfaceBins=10; + OpRichTbMirrorSurfaceMPT->AddProperty("EFFICIENCY", MirrReflPhotonMomentum, MirrEff, NumPhotMirrorReflectBins); + OpRichTbMirrorSurfaceMPT->AddProperty("RINDEX", MirrReflPhotonMomentum, MirrReflRefIndex, NumPhotMirrorReflectBins); + OpRichTbMirrorSurface->SetMaterialPropertiesTable(OpRichTbMirrorSurfaceMPT); - G4double VesselSurfacePhotMom[]= - {1.0*CLHEP::eV,2.0*CLHEP::eV, 3.0*CLHEP::eV,4.0*CLHEP::eV,5.0*CLHEP::eV,6.0*CLHEP::eV,7.0*CLHEP::eV,8.0*CLHEP::eV, - 9.0*CLHEP::eV,10.0*CLHEP::eV}; + RichTbSphMirrorSurface = OpRichTbMirrorSurface; +} - G4double VesselSurfaceReflectivity[]= - {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; - G4double VesselSurfaceEfficiency[]= - {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; +void RichTbSurfaceDefinition::createVesselSurface() { + G4int NumPhotVesselSurfaceBins = 10; - G4OpticalSurface* OpVesselSurface= - new G4OpticalSurface("VesselOpticalSurface"); - OpVesselSurface->SetType(dielectric_metal); - OpVesselSurface->SetFinish(polished); - OpVesselSurface->SetModel(glisur); + G4double VesselSurfacePhotMom[] = {1.0 * CLHEP::eV, 2.0 * CLHEP::eV, 3.0 * CLHEP::eV, 4.0 * CLHEP::eV, + 5.0 * CLHEP::eV, 6.0 * CLHEP::eV, 7.0 * CLHEP::eV, 8.0 * CLHEP::eV, + 9.0 * CLHEP::eV, 10.0 * CLHEP::eV}; - G4MaterialPropertiesTable* OpVesselSurfaceMPT = - new G4MaterialPropertiesTable(); + G4double VesselSurfaceReflectivity[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; + G4double VesselSurfaceEfficiency[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; - OpVesselSurfaceMPT->AddProperty("REFLECTIVITY", - VesselSurfacePhotMom, - VesselSurfaceReflectivity, - NumPhotVesselSurfaceBins); + G4OpticalSurface *OpVesselSurface = new G4OpticalSurface("VesselOpticalSurface"); + OpVesselSurface->SetType(dielectric_metal); + OpVesselSurface->SetFinish(polished); + OpVesselSurface->SetModel(glisur); + G4MaterialPropertiesTable *OpVesselSurfaceMPT = new G4MaterialPropertiesTable(); - OpVesselSurfaceMPT->AddProperty(" EFFICIENCY", - VesselSurfacePhotMom, - VesselSurfaceEfficiency, - NumPhotVesselSurfaceBins); - OpVesselSurface->SetMaterialPropertiesTable( OpVesselSurfaceMPT); + OpVesselSurfaceMPT->AddProperty("REFLECTIVITY", VesselSurfacePhotMom, VesselSurfaceReflectivity, + NumPhotVesselSurfaceBins); - RichTbVesselSurface= OpVesselSurface; + OpVesselSurfaceMPT->AddProperty(" EFFICIENCY", VesselSurfacePhotMom, VesselSurfaceEfficiency, + NumPhotVesselSurfaceBins); + OpVesselSurface->SetMaterialPropertiesTable(OpVesselSurfaceMPT); + RichTbVesselSurface = OpVesselSurface; } -void RichTbSurfaceDefinition::createPMTQuartzWSurface() -{ - G4int NumPhotPMTQuartzWMasterSurfaceWavelengthBins=10; - G4double PMTQuartzWMasterSurfacePhotMom []= - {1.0*CLHEP::eV,2.0*CLHEP::eV, 3.0*CLHEP::eV,4.0*CLHEP::eV,5.0*CLHEP::eV,6.0*CLHEP::eV,7.0*CLHEP::eV,8.0*CLHEP::eV, - 9.0*CLHEP::eV,10.0*CLHEP::eV}; - G4double PMTQuartzWMasterSurfaceReflectivity[]= - {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; - - G4double PMTQuartzWMasterSurfaceEff[]= - {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; - G4OpticalSurface* OpPMTQuartzWMasterSurface= - new G4OpticalSurface("PMTQuartzWMasterSurface"); +void RichTbSurfaceDefinition::createPMTQuartzWSurface() { + G4int NumPhotPMTQuartzWMasterSurfaceWavelengthBins = 10; + G4double PMTQuartzWMasterSurfacePhotMom[] = {1.0 * CLHEP::eV, 2.0 * CLHEP::eV, 3.0 * CLHEP::eV, 4.0 * CLHEP::eV, + 5.0 * CLHEP::eV, 6.0 * CLHEP::eV, 7.0 * CLHEP::eV, 8.0 * CLHEP::eV, + 9.0 * CLHEP::eV, 10.0 * CLHEP::eV}; + G4double PMTQuartzWMasterSurfaceReflectivity[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; - OpPMTQuartzWMasterSurface->SetType(dielectric_dielectric); - OpPMTQuartzWMasterSurface->SetFinish(polished); - OpPMTQuartzWMasterSurface->SetModel(glisur); - // OpPMTQuartzWMasterSurface->SetModel(unified); + G4double PMTQuartzWMasterSurfaceEff[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; + G4OpticalSurface *OpPMTQuartzWMasterSurface = new G4OpticalSurface("PMTQuartzWMasterSurface"); - G4MaterialPropertiesTable* OpPMTQuartzWMasterSurfaceMPT = - new G4MaterialPropertiesTable(); + OpPMTQuartzWMasterSurface->SetType(dielectric_dielectric); + OpPMTQuartzWMasterSurface->SetFinish(polished); + OpPMTQuartzWMasterSurface->SetModel(glisur); + // OpPMTQuartzWMasterSurface->SetModel(unified); - OpPMTQuartzWMasterSurfaceMPT ->AddProperty("REFLECTIVITY", - PMTQuartzWMasterSurfacePhotMom, - PMTQuartzWMasterSurfaceReflectivity, - NumPhotPMTQuartzWMasterSurfaceWavelengthBins); + G4MaterialPropertiesTable *OpPMTQuartzWMasterSurfaceMPT = new G4MaterialPropertiesTable(); - OpPMTQuartzWMasterSurfaceMPT ->AddProperty( "EFFICIENCY", - PMTQuartzWMasterSurfacePhotMom, - PMTQuartzWMasterSurfaceEff, - NumPhotPMTQuartzWMasterSurfaceWavelengthBins); + OpPMTQuartzWMasterSurfaceMPT->AddProperty("REFLECTIVITY", PMTQuartzWMasterSurfacePhotMom, + PMTQuartzWMasterSurfaceReflectivity, + NumPhotPMTQuartzWMasterSurfaceWavelengthBins); - OpPMTQuartzWMasterSurface-> - SetMaterialPropertiesTable(OpPMTQuartzWMasterSurfaceMPT); + OpPMTQuartzWMasterSurfaceMPT->AddProperty("EFFICIENCY", PMTQuartzWMasterSurfacePhotMom, PMTQuartzWMasterSurfaceEff, + NumPhotPMTQuartzWMasterSurfaceWavelengthBins); - RichTbPMTMasterQuartzWSurface=OpPMTQuartzWMasterSurface; + OpPMTQuartzWMasterSurface->SetMaterialPropertiesTable(OpPMTQuartzWMasterSurfaceMPT); + RichTbPMTMasterQuartzWSurface = OpPMTQuartzWMasterSurface; } -void RichTbSurfaceDefinition::createPMTQuartzWPhCathodeSurface() -{ +void RichTbSurfaceDefinition::createPMTQuartzWPhCathodeSurface() { - G4int NumPhotQuartzWPhCathodeSurfaceWavelengthBins=10; - G4double PMTQuartzWPhCathodeSurfaceReflectivity[]= - {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; - G4double PMTQuartzWPhCathodeSurfaceEff[]= - {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; - G4double PMTQuartzWPhCathodeSurfacePhotMom[]= - {1.0*CLHEP::eV,2.0*CLHEP::eV, 3.0*CLHEP::eV,4.0*CLHEP::eV,5.0*CLHEP::eV,6.0*CLHEP::eV,7.0*CLHEP::eV,8.0*CLHEP::eV, - 9.0*CLHEP::eV,10.0*CLHEP::eV}; + G4int NumPhotQuartzWPhCathodeSurfaceWavelengthBins = 10; + G4double PMTQuartzWPhCathodeSurfaceReflectivity[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; + G4double PMTQuartzWPhCathodeSurfaceEff[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; + G4double PMTQuartzWPhCathodeSurfacePhotMom[] = {1.0 * CLHEP::eV, 2.0 * CLHEP::eV, 3.0 * CLHEP::eV, 4.0 * CLHEP::eV, + 5.0 * CLHEP::eV, 6.0 * CLHEP::eV, 7.0 * CLHEP::eV, 8.0 * CLHEP::eV, + 9.0 * CLHEP::eV, 10.0 * CLHEP::eV}; - G4OpticalSurface * OpPMTQuartzWPhCathodeSurface= - new G4OpticalSurface("PMTQuartzWPhCathodeSurface"); + G4OpticalSurface *OpPMTQuartzWPhCathodeSurface = new G4OpticalSurface("PMTQuartzWPhCathodeSurface"); OpPMTQuartzWPhCathodeSurface->SetType(dielectric_dielectric); OpPMTQuartzWPhCathodeSurface->SetFinish(polished); OpPMTQuartzWPhCathodeSurface->SetModel(glisur); - G4MaterialPropertiesTable* OpPMTQuartzWPhCathodeSurfaceMPT= - new G4MaterialPropertiesTable(); + G4MaterialPropertiesTable *OpPMTQuartzWPhCathodeSurfaceMPT = new G4MaterialPropertiesTable(); - OpPMTQuartzWPhCathodeSurfaceMPT->AddProperty("REFLECTIVITY", - PMTQuartzWPhCathodeSurfacePhotMom, - PMTQuartzWPhCathodeSurfaceReflectivity, - NumPhotQuartzWPhCathodeSurfaceWavelengthBins); + OpPMTQuartzWPhCathodeSurfaceMPT->AddProperty("REFLECTIVITY", PMTQuartzWPhCathodeSurfacePhotMom, + PMTQuartzWPhCathodeSurfaceReflectivity, + NumPhotQuartzWPhCathodeSurfaceWavelengthBins); - OpPMTQuartzWPhCathodeSurfaceMPT->AddProperty("EFFICIENCY", - PMTQuartzWPhCathodeSurfacePhotMom, - PMTQuartzWPhCathodeSurfaceEff, - NumPhotQuartzWPhCathodeSurfaceWavelengthBins); + OpPMTQuartzWPhCathodeSurfaceMPT->AddProperty("EFFICIENCY", PMTQuartzWPhCathodeSurfacePhotMom, + PMTQuartzWPhCathodeSurfaceEff, + NumPhotQuartzWPhCathodeSurfaceWavelengthBins); - OpPMTQuartzWPhCathodeSurface-> - SetMaterialPropertiesTable(OpPMTQuartzWPhCathodeSurfaceMPT); - - RichTbPMTQuartzWPhCathodeSurface= OpPMTQuartzWPhCathodeSurface; + OpPMTQuartzWPhCathodeSurface->SetMaterialPropertiesTable(OpPMTQuartzWPhCathodeSurfaceMPT); + RichTbPMTQuartzWPhCathodeSurface = OpPMTQuartzWPhCathodeSurface; } void RichTbSurfaceDefinition::ReadMirrorReflectivity() { - - RichTbRunConfig* aRunConfig= RichTbRunConfig::getRunConfigInstance(); - G4String MirrorFname= aRunConfig->getMirrorReflFileName(); - G4cout<<" MirrorReflectivity being read from "<<MirrorFname<<G4endl; + RichTbRunConfig *aRunConfig = RichTbRunConfig::getRunConfigInstance(); + G4String MirrorFname = aRunConfig->getMirrorReflFileName(); + G4cout << " MirrorReflectivity being read from " << MirrorFname << G4endl; MirrorSurfWlen.clear(); MirrorSurfReflect.clear(); - G4int numbinrefl=0; + G4int numbinrefl = 0; // the -1 above is to take care of the addtional 1 which // happens when closing the while loop. - const char* MirrorDataFileNameChar= MirrorFname.c_str(); - std::ifstream finpfa(MirrorDataFileNameChar ); - if(!finpfa) { - G4cout<<"Mirror Reflectivity data file cannot be opened " << - " Please check the file names and paths "<<G4endl; + const char *MirrorDataFileNameChar = MirrorFname.c_str(); + std::ifstream finpfa(MirrorDataFileNameChar); + if (!finpfa) { + G4cout << "Mirror Reflectivity data file cannot be opened " + << " Please check the file names and paths " << G4endl; } else { - G4double wa=0.0; - G4double rf=0.0; - while(!finpfa.eof()) { - finpfa>>wa; - finpfa>>rf; - numbinrefl++; - - MirrorSurfWlen.push_back(wa); - MirrorSurfReflect.push_back(rf); - - } - - // remove the last bin since it is a repeat of the previous bin. - - G4int aSize= G4int (MirrorSurfWlen.size()); - if(MirrorSurfWlen[aSize-1] ==MirrorSurfWlen[aSize-2] ) { - MirrorSurfWlen.pop_back(); - MirrorSurfReflect.pop_back(); - numbinrefl--; - - } - - // G4cout<<"Numbins in Mirr file "<<numbinrefl - // <<" "<<G4int( MirrorSurfWlen.size()) <<G4endl; + G4double wa = 0.0; + G4double rf = 0.0; + while (!finpfa.eof()) { + finpfa >> wa; + finpfa >> rf; + numbinrefl++; + + MirrorSurfWlen.push_back(wa); + MirrorSurfReflect.push_back(rf); + } - // G4cout<<"Now adding the bins in Mirror Refl "<<G4endl; - // it assumes that in the data file, the order - // is set with highest wavelength to lower wavelengths. + // remove the last bin since it is a repeat of the previous bin. - if(MirrorSurfWlen.front() > 0.0 ) { - G4double MirrFirstMom=PhotWaveLengthToMom/ - ((MirrorSurfWlen.front())* PhotonMirrReflWavelengthUnits) ; - if(MirrFirstMom > PhotonMinEnergy ){ - numbinrefl++; - G4double PhotonMaxWlen= - PhotMomToWaveLength/(PhotonMinEnergy*CLHEP::nanometer); + G4int aSize = G4int(MirrorSurfWlen.size()); + if (MirrorSurfWlen[aSize - 1] == MirrorSurfWlen[aSize - 2]) { + MirrorSurfWlen.pop_back(); + MirrorSurfReflect.pop_back(); + numbinrefl--; + } - MirrorSurfWlen.insert( MirrorSurfWlen.begin(), PhotonMaxWlen); - MirrorSurfReflect.insert(MirrorSurfReflect.begin(), - MirrorSurfReflect.front()); + // G4cout<<"Numbins in Mirr file "<<numbinrefl + // <<" "<<G4int( MirrorSurfWlen.size()) <<G4endl; - } + // G4cout<<"Now adding the bins in Mirror Refl "<<G4endl; + // it assumes that in the data file, the order + // is set with highest wavelength to lower wavelengths. + if (MirrorSurfWlen.front() > 0.0) { + G4double MirrFirstMom = PhotWaveLengthToMom / ((MirrorSurfWlen.front()) * PhotonMirrReflWavelengthUnits); + if (MirrFirstMom > PhotonMinEnergy) { + numbinrefl++; + G4double PhotonMaxWlen = PhotMomToWaveLength / (PhotonMinEnergy * CLHEP::nanometer); + MirrorSurfWlen.insert(MirrorSurfWlen.begin(), PhotonMaxWlen); + MirrorSurfReflect.insert(MirrorSurfReflect.begin(), MirrorSurfReflect.front()); } + } - if( MirrorSurfWlen.back() > 0.0 ) { - G4double MirrLastMom=PhotWaveLengthToMom/ - ((MirrorSurfWlen.back())* PhotonMirrReflWavelengthUnits); - if(MirrLastMom < PhotonMaxEnergy ) { - numbinrefl++; - G4double PhotonMinWlen= - PhotMomToWaveLength/( PhotonMaxEnergy*CLHEP::nanometer); - MirrorSurfWlen.push_back(PhotonMinWlen); - MirrorSurfReflect.push_back( MirrorSurfReflect.back()); - } - + if (MirrorSurfWlen.back() > 0.0) { + G4double MirrLastMom = PhotWaveLengthToMom / ((MirrorSurfWlen.back()) * PhotonMirrReflWavelengthUnits); + if (MirrLastMom < PhotonMaxEnergy) { + numbinrefl++; + G4double PhotonMinWlen = PhotMomToWaveLength / (PhotonMaxEnergy * CLHEP::nanometer); + MirrorSurfWlen.push_back(PhotonMinWlen); + MirrorSurfReflect.push_back(MirrorSurfReflect.back()); } + } - NumPhotMirrorReflectBins= numbinrefl; - reverse(MirrorSurfWlen.begin(),MirrorSurfWlen.end()); - reverse(MirrorSurfReflect.begin(),MirrorSurfReflect.end()); - - - // test print - /* - G4cout<<"Numbins for Mirror refl "<<NumPhotMirrorReflectBins<<G4endl; + NumPhotMirrorReflectBins = numbinrefl; + reverse(MirrorSurfWlen.begin(), MirrorSurfWlen.end()); + reverse(MirrorSurfReflect.begin(), MirrorSurfReflect.end()); - for(G4int ii=0; ii<NumPhotMirrorReflectBins; ii++ ) { - G4cout<<"Mirr "<<MirrorSurfWlen[ii]<<" " - <<MirrorSurfReflect[ii] - <<G4endl; - } + // test print + /* + G4cout<<"Numbins for Mirror refl "<<NumPhotMirrorReflectBins<<G4endl; - */ + for(G4int ii=0; ii<NumPhotMirrorReflectBins; ii++ ) { + G4cout<<"Mirr "<<MirrorSurfWlen[ii]<<" " + <<MirrorSurfReflect[ii] + <<G4endl; + } - //end of test print. + */ + // end of test print. - G4cout<<"End of reading Mirror reflectivity"<<G4endl; + G4cout << "End of reading Mirror reflectivity" << G4endl; } - } void RichTbSurfaceDefinition::createRichTbKovarSurface() { - G4int NumPhotKovarSurfaceBins=12; + G4int NumPhotKovarSurfaceBins = 12; - G4double KovarSurfacePhotMom[]= - {0.01*CLHEP::eV, 1.0*CLHEP::eV,2.0*CLHEP::eV, 3.0*CLHEP::eV,4.0*CLHEP::eV,5.0*CLHEP::eV,6.0*CLHEP::eV,7.0*CLHEP::eV,8.0*CLHEP::eV, - 9.0*CLHEP::eV,10.0*CLHEP::eV,11*CLHEP::eV}; + G4double KovarSurfacePhotMom[] = {0.01 * CLHEP::eV, 1.0 * CLHEP::eV, 2.0 * CLHEP::eV, 3.0 * CLHEP::eV, + 4.0 * CLHEP::eV, 5.0 * CLHEP::eV, 6.0 * CLHEP::eV, 7.0 * CLHEP::eV, + 8.0 * CLHEP::eV, 9.0 * CLHEP::eV, 10.0 * CLHEP::eV, 11 * CLHEP::eV}; - G4double KovarSurfaceReflectivity[]= - {0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05}; - G4double KovarSurfaceEfficiency[]= - {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; + G4double KovarSurfaceReflectivity[] = {0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05}; + G4double KovarSurfaceEfficiency[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; - G4OpticalSurface* OpKovarSurface= - new G4OpticalSurface("KovarOpticalSurface"); - OpKovarSurface->SetType(dielectric_dielectric); - OpKovarSurface->SetFinish(groundfrontpainted); - OpKovarSurface->SetModel(glisur); + G4OpticalSurface *OpKovarSurface = new G4OpticalSurface("KovarOpticalSurface"); + OpKovarSurface->SetType(dielectric_dielectric); + OpKovarSurface->SetFinish(groundfrontpainted); + OpKovarSurface->SetModel(glisur); - G4MaterialPropertiesTable* OpKovarSurfaceMPT = - new G4MaterialPropertiesTable(); + G4MaterialPropertiesTable *OpKovarSurfaceMPT = new G4MaterialPropertiesTable(); - OpKovarSurfaceMPT->AddProperty("REFLECTIVITY", - KovarSurfacePhotMom, - KovarSurfaceReflectivity, + OpKovarSurfaceMPT->AddProperty("REFLECTIVITY", KovarSurfacePhotMom, KovarSurfaceReflectivity, NumPhotKovarSurfaceBins); + OpKovarSurfaceMPT->AddProperty(" EFFICIENCY", KovarSurfacePhotMom, KovarSurfaceEfficiency, NumPhotKovarSurfaceBins); + OpKovarSurface->SetMaterialPropertiesTable(OpKovarSurfaceMPT); - OpKovarSurfaceMPT->AddProperty(" EFFICIENCY", - KovarSurfacePhotMom, - KovarSurfaceEfficiency, - NumPhotKovarSurfaceBins); - OpKovarSurface->SetMaterialPropertiesTable(OpKovarSurfaceMPT); - - RichTbKovarSurface = OpKovarSurface; - + RichTbKovarSurface = OpKovarSurface; } -void RichTbSurfaceDefinition::createtRichTbSiDetSurface(){ - - RichTbRunConfig* aRunConfig= RichTbRunConfig::getRunConfigInstance(); - G4int aSiReflFlag= aRunConfig-> getPMTSiReflFlag(); - - G4int NumPhotSiDetSurfaceBins=13; +void RichTbSurfaceDefinition::createtRichTbSiDetSurface() { + RichTbRunConfig *aRunConfig = RichTbRunConfig::getRunConfigInstance(); + G4int aSiReflFlag = aRunConfig->getPMTSiReflFlag(); - G4double SiDetSurfacePhotMom[]= - {0.01*CLHEP::eV, 1.0*CLHEP::eV,2.0*CLHEP::eV, 2.5*CLHEP::eV, 3.0*CLHEP::eV,4.0*CLHEP::eV,5.0*CLHEP::eV,6.0*CLHEP::eV,7.0*CLHEP::eV,8.0*CLHEP::eV, - 9.0*CLHEP::eV,10.0*CLHEP::eV,11*CLHEP::eV}; - G4double SiDetSurfaceReflectivity[]= - {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; - + G4int NumPhotSiDetSurfaceBins = 13; + G4double SiDetSurfacePhotMom[] = {0.01 * CLHEP::eV, 1.0 * CLHEP::eV, 2.0 * CLHEP::eV, 2.5 * CLHEP::eV, + 3.0 * CLHEP::eV, 4.0 * CLHEP::eV, 5.0 * CLHEP::eV, 6.0 * CLHEP::eV, + 7.0 * CLHEP::eV, 8.0 * CLHEP::eV, 9.0 * CLHEP::eV, 10.0 * CLHEP::eV, + 11 * CLHEP::eV}; + G4double SiDetSurfaceReflectivity[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; // For now using 30% reflectivity. The use of this may be refined in the // future using more bins of the QE and disentagling the transmission // in photocathode vs reflection in Si etc. - if(aSiReflFlag >0 ) { - for(G4int ib=0; ib< NumPhotSiDetSurfaceBins;ib++) { - SiDetSurfaceReflectivity[ib]=PMTSiDetSurfaceReflectivity; - + if (aSiReflFlag > 0) { + for (G4int ib = 0; ib < NumPhotSiDetSurfaceBins; ib++) { + SiDetSurfaceReflectivity[ib] = PMTSiDetSurfaceReflectivity; } - } + G4double SiDetSurfaceEfficiency[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; - G4double SiDetSurfaceEfficiency[]= - {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; + G4double *SiDetReflRefIndex = new G4double[NumPhotSiDetSurfaceBins]; - G4double* SiDetReflRefIndex - = new G4double[NumPhotSiDetSurfaceBins]; - - for(G4int ibind=0; ibind<NumPhotSiDetSurfaceBins;ibind++) { - SiDetReflRefIndex[ibind]=1.40; - } - G4OpticalSurface* OpSiDetSurface= - new G4OpticalSurface("SiDetOpticalSurface"); - OpSiDetSurface->SetType(dielectric_metal); - OpSiDetSurface->SetFinish(polished); - OpSiDetSurface->SetModel(glisur); - - G4MaterialPropertiesTable* OpSiDetSurfaceMPT = - new G4MaterialPropertiesTable(); - - OpSiDetSurfaceMPT->AddProperty("REFLECTIVITY", - SiDetSurfacePhotMom, - SiDetSurfaceReflectivity, - NumPhotSiDetSurfaceBins); + for (G4int ibind = 0; ibind < NumPhotSiDetSurfaceBins; ibind++) { + SiDetReflRefIndex[ibind] = 1.40; + } + G4OpticalSurface *OpSiDetSurface = new G4OpticalSurface("SiDetOpticalSurface"); + OpSiDetSurface->SetType(dielectric_metal); + OpSiDetSurface->SetFinish(polished); + OpSiDetSurface->SetModel(glisur); + G4MaterialPropertiesTable *OpSiDetSurfaceMPT = new G4MaterialPropertiesTable(); - OpSiDetSurfaceMPT->AddProperty(" EFFICIENCY", - SiDetSurfacePhotMom, - SiDetSurfaceEfficiency, + OpSiDetSurfaceMPT->AddProperty("REFLECTIVITY", SiDetSurfacePhotMom, SiDetSurfaceReflectivity, NumPhotSiDetSurfaceBins); - OpSiDetSurfaceMPT->AddProperty("RINDEX", - SiDetSurfacePhotMom, - SiDetReflRefIndex, - NumPhotSiDetSurfaceBins ); - + OpSiDetSurfaceMPT->AddProperty(" EFFICIENCY", SiDetSurfacePhotMom, SiDetSurfaceEfficiency, NumPhotSiDetSurfaceBins); - OpSiDetSurface->SetMaterialPropertiesTable(OpSiDetSurfaceMPT); + OpSiDetSurfaceMPT->AddProperty("RINDEX", SiDetSurfacePhotMom, SiDetReflRefIndex, NumPhotSiDetSurfaceBins); - RichTbSiDetSurface = OpSiDetSurface; + OpSiDetSurface->SetMaterialPropertiesTable(OpSiDetSurfaceMPT); + RichTbSiDetSurface = OpSiDetSurface; } //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeCrystal.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeCrystal.cc index 8e91f931553d9657df2db4fb42a0df27a5e89980..9853a37d8c87c01c9d504367bd03bd07da5a7161 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeCrystal.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeCrystal.cc @@ -1,25 +1,23 @@ // $Id: $ -// Include files - - +// Include files // local -#include "RichTbGeometryParameters.hh" -#include "RichTbMiscNames.hh" -#include "RichTbMaterial.hh" -#include "RichTbUpgradeVessel.hh" #include "RichTbUpgradeCrystal.hh" -#include "RichTbUpgradeCrystalMaster.hh" -#include "RichTbHall.hh" +#include "Geant4/G4Box.hh" +#include "Geant4/G4LogicalVolume.hh" +#include "Geant4/G4PVPlacement.hh" #include "Geant4/G4RotationMatrix.hh" +#include "Geant4/G4SubtractionSolid.hh" #include "Geant4/G4ThreeVector.hh" #include "Geant4/G4Transform3D.hh" -#include "Geant4/G4SubtractionSolid.hh" -#include "Geant4/G4Box.hh" -#include "Geant4/G4LogicalVolume.hh" #include "Geant4/G4VPhysicalVolume.hh" -#include "Geant4/G4PVPlacement.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbHall.hh" +#include "RichTbMaterial.hh" +#include "RichTbMiscNames.hh" #include "RichTbRunConfig.hh" +#include "RichTbUpgradeCrystalMaster.hh" +#include "RichTbUpgradeVessel.hh" //----------------------------------------------------------------------------- // Implementation file for class : RichTbVessel @@ -31,77 +29,59 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbCrystal::RichTbCrystal(RichTbUpgradeCrystalMaster* rTbCrystalMaster ) { +RichTbCrystal::RichTbCrystal(RichTbUpgradeCrystalMaster *rTbCrystalMaster) { aRTbCrystalMaster = rTbCrystalMaster; - + constructRichTbCrystal(); - } -RichTbCrystal::~RichTbCrystal( ) -{ -} -void RichTbCrystal::constructRichTbCrystal() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); +RichTbCrystal::~RichTbCrystal() {} +void RichTbCrystal::constructRichTbCrystal() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); // RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - - G4Box * RichTbCrystalBox - = new G4Box("RichTbCrystalBox", 0.5*RichTbCrystalXSize, - 0.5*RichTbCrystalYSize, 0.5*RichTbCrystalZSize); - - G4ThreeVector CrystalPos(RichTbCrystalXLocation, - RichTbCrystalYLocation, - RichTbCrystalZLocation); - - G4RotationMatrix CrystalRotX,CrystalRotY; + + G4Box *RichTbCrystalBox = + new G4Box("RichTbCrystalBox", 0.5 * RichTbCrystalXSize, 0.5 * RichTbCrystalYSize, 0.5 * RichTbCrystalZSize); + + G4ThreeVector CrystalPos(RichTbCrystalXLocation, RichTbCrystalYLocation, RichTbCrystalZLocation); + + G4RotationMatrix CrystalRotX, CrystalRotY; /* - G4int aSpecialStudyCrystalRotFlag = + G4int aSpecialStudyCrystalRotFlag = aConfig ->getSpecialStudyCrystalRotation(); if( aSpecialStudyCrystalRotFlag != 1 ) { - + CrystalRotX.rotateX(aConfig ->getSpecialStudyCrystalRotationX()); CrystalRotY.rotateY(aConfig ->getSpecialStudyCrystalRotationY()); } */ - + // // G4cout<<" Vessel XRot Yrot "<<RichTbVesselXRotation<<" " // <<RichTbVesselYRotation<<G4endl; - - //G4Transform3D VesselUpsSubTransform(VesselUpsSubRot,VesselUpsSubPos); - G4Transform3D CrystalTransform( CrystalRotX * CrystalRotY, CrystalPos); - - /* G4SubtractionSolid* VesselUpsSub = + + // G4Transform3D VesselUpsSubTransform(VesselUpsSubRot,VesselUpsSubPos); + G4Transform3D CrystalTransform(CrystalRotX * CrystalRotY, CrystalPos); + + /* G4SubtractionSolid* VesselUpsSub = new G4SubtractionSolid("VesselUpsSub", RichTbVesselBoxOverall , RichTbVesselUpsSubBox,VesselUpsSubTransform); - + */ - G4LogicalVolume* CrystalLog; - - - //crystal material - CrystalLog = - new G4LogicalVolume(RichTbCrystalBox, - aMaterial->getCrystalMaterial(), "CrystalLog",0,0,0); - - //crystal location - G4VPhysicalVolume* CrystalPhys = - new G4PVPlacement(CrystalTransform, CrystalPhysName, CrystalLog , - aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), - false,0); - - RichTbCrystalLVol = CrystalLog; - RichTbCrystalPVol = CrystalPhys; - - -} -void RichTbCrystal::constructRichTbCrystalEnvelope() -{ - -} + G4LogicalVolume *CrystalLog; + + // crystal material + CrystalLog = new G4LogicalVolume(RichTbCrystalBox, aMaterial->getCrystalMaterial(), "CrystalLog", 0, 0, 0); + // crystal location + G4VPhysicalVolume *CrystalPhys = new G4PVPlacement(CrystalTransform, CrystalPhysName, CrystalLog, + aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), false, 0); + + RichTbCrystalLVol = CrystalLog; + RichTbCrystalPVol = CrystalPhys; +} +void RichTbCrystal::constructRichTbCrystalEnvelope() {} //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeCrystalCover.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeCrystalCover.cc index 9a61e9d7778f075e41bef641c1e3afed1815dc2f..3edf6a27bf0bd5d3d392e4c47b82c2d194fd5524 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeCrystalCover.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeCrystalCover.cc @@ -1,25 +1,23 @@ // $Id: $ -// Include files - - +// Include files // local -#include "RichTbGeometryParameters.hh" -#include "RichTbMiscNames.hh" -#include "RichTbMaterial.hh" -#include "RichTbUpgradeVessel.hh" #include "RichTbUpgradeCrystalCover.hh" -#include "RichTbUpgradeCrystalMaster.hh" -#include "RichTbHall.hh" +#include "Geant4/G4Box.hh" +#include "Geant4/G4LogicalVolume.hh" +#include "Geant4/G4PVPlacement.hh" #include "Geant4/G4RotationMatrix.hh" +#include "Geant4/G4SubtractionSolid.hh" #include "Geant4/G4ThreeVector.hh" #include "Geant4/G4Transform3D.hh" -#include "Geant4/G4SubtractionSolid.hh" -#include "Geant4/G4Box.hh" -#include "Geant4/G4LogicalVolume.hh" #include "Geant4/G4VPhysicalVolume.hh" -#include "Geant4/G4PVPlacement.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbHall.hh" +#include "RichTbMaterial.hh" +#include "RichTbMiscNames.hh" #include "RichTbRunConfig.hh" +#include "RichTbUpgradeCrystalMaster.hh" +#include "RichTbUpgradeVessel.hh" //----------------------------------------------------------------------------- // Implementation file for class : RichTbVessel @@ -31,46 +29,34 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbCrystalCover::RichTbCrystalCover(RichTbUpgradeCrystalMaster* rTbCrystalMaster) { +RichTbCrystalCover::RichTbCrystalCover(RichTbUpgradeCrystalMaster *rTbCrystalMaster) { aRTbCrystalMaster = rTbCrystalMaster; - + constructRichTbCrystalCover(); - } -RichTbCrystalCover::~RichTbCrystalCover( ) -{ -} -void RichTbCrystalCover::constructRichTbCrystalCover() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - - G4Box * RichTbCrystalCoverBox - = new G4Box("RichTbCrystalCoverBox", 0.5*RichTbCrystalCoverXSize, - 0.5*RichTbCrystalCoverYSize, 0.5*RichTbCrystalCoverZSize); - - //volume substraction - - G4Box* RichTbCrystalCoverSubBox - = new G4Box("RichTbCrystalCoverSubBox", - 0.5*RichTbCrystalCoverSubPartXSize, - 0.5*RichTbCrystalCoverSubPartYSize, - 0.5*RichTbCrystalCoverSubPartZSize); - - - G4ThreeVector CrystalCoverSubPos(RichTbCrystalCoverSubPartXLocation , //!posizioni relative! - RichTbCrystalCoverSubPartYLocation, - RichTbCrystalCoverSubPartZLocation ); - - G4ThreeVector CrystalCoverPos(RichTbCrystalCoverXLocation, - RichTbCrystalCoverYLocation, - RichTbCrystalCoverZLocation); - +RichTbCrystalCover::~RichTbCrystalCover() {} +void RichTbCrystalCover::constructRichTbCrystalCover() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + // RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); + + G4Box *RichTbCrystalCoverBox = new G4Box("RichTbCrystalCoverBox", 0.5 * RichTbCrystalCoverXSize, + 0.5 * RichTbCrystalCoverYSize, 0.5 * RichTbCrystalCoverZSize); + + // volume substraction + + G4Box *RichTbCrystalCoverSubBox = + new G4Box("RichTbCrystalCoverSubBox", 0.5 * RichTbCrystalCoverSubPartXSize, 0.5 * RichTbCrystalCoverSubPartYSize, + 0.5 * RichTbCrystalCoverSubPartZSize); + + G4ThreeVector CrystalCoverSubPos(RichTbCrystalCoverSubPartXLocation, //! posizioni relative! + RichTbCrystalCoverSubPartYLocation, RichTbCrystalCoverSubPartZLocation); + + G4ThreeVector CrystalCoverPos(RichTbCrystalCoverXLocation, RichTbCrystalCoverYLocation, RichTbCrystalCoverZLocation); + G4RotationMatrix CrystalCoverSubRotX, CrystalCoverSubRotY, CrystalCoverRotX, CrystalCoverRotY; /* - G4int aSpecialStudyCrystalCoverRotFlag = - aConfig ->getSpecialStudyCrystalRotation(); + G4int aSpecialStudyCrystalCoverRotFlag = aConfig ->getSpecialStudyCrystalRotation(); if( aSpecialStudyCrystalCoverRotFlag != 1 ) { @@ -79,36 +65,36 @@ void RichTbCrystalCover::constructRichTbCrystalCover() //now rotating the cover - G4double CrystalCoverRadius = 0.5 * (RichTbCrystalCoverZSize - - RichTbCrystalZSize); - - G4ThreeVector CrystalCoverPos(RichTbCrystalCoverXLocation - - CrystalCoverRadius*sin(CrystalRotY), - RichTbCrystalCoverYLocation - + CrystalCoverRadius*sin(CrystalRotX) , - RichTbCrystalCoverZLocation - + CrystalCoverRadius*(2+cos(CrystalRotY)+cos(CrystalRotX))); - + G4double CrystalCoverRadius = 0.5 * (RichTbCrystalCoverZSize + - RichTbCrystalZSize); + + G4ThreeVector CrystalCoverPos(RichTbCrystalCoverXLocation + - CrystalCoverRadius*sin(CrystalRotY), + RichTbCrystalCoverYLocation + + CrystalCoverRadius*sin(CrystalRotX) , + RichTbCrystalCoverZLocation + + CrystalCoverRadius*(2+cos(CrystalRotY)+cos(CrystalRotX))); + CrystalCoverRotX.rotateX(CrystalRotX); CrystalCoverRotY.rotateY(CrystalRotY); - - + + //now rotating the inner volume - - G4double CrystalCoverInnerRadius = 0.5 * (RichTbCrystalCoverSubPartZSize - - RichTbCrystalZSize); - - G4ThreeVector CrystalCoverSubPos(RichTbCrystalCoverSubPartXLocation - + CrystalCoverInnerRadius*sin(CrystalRotY), - RichTbCrystalCoverSubPartYLocation - - CrystalCoverInnerRadius*sin(CrystalRotX) , - RichTbCrystalCoverSubPartZLocation - + CrystalCoverInnerRadius*(2+cos(CrystalRotY)+cos(CrystalRotX))); - + + G4double CrystalCoverInnerRadius = 0.5 * (RichTbCrystalCoverSubPartZSize + - RichTbCrystalZSize); + + G4ThreeVector CrystalCoverSubPos(RichTbCrystalCoverSubPartXLocation + + CrystalCoverInnerRadius*sin(CrystalRotY), + RichTbCrystalCoverSubPartYLocation + - CrystalCoverInnerRadius*sin(CrystalRotX) , + RichTbCrystalCoverSubPartZLocation + + CrystalCoverInnerRadius*(2+cos(CrystalRotY)+cos(CrystalRotX))); + CrystalCoverSubRotX.rotateX(CrystalRotX); CrystalCoverSubRotY.rotateY(CrystalRotY); - - + + } */ @@ -116,40 +102,26 @@ void RichTbCrystalCover::constructRichTbCrystalCover() // G4cout<<" Vessel XRot Yrot "<<RichTbVesselXRotation<<" " // <<RichTbVesselYRotation<<G4endl; - G4Transform3D CrystalCoverTransform(CrystalCoverRotX * CrystalCoverRotY, - CrystalCoverPos); - - G4Transform3D CrystalCoverSubTransform(CrystalCoverSubRotX * CrystalCoverSubRotY, - CrystalCoverSubPos); - - G4SubtractionSolid* CrystalCover = - new G4SubtractionSolid("CrystalCover", RichTbCrystalCoverBox, - RichTbCrystalCoverSubBox, CrystalCoverSubTransform); - - - G4LogicalVolume* CrystalCoverLog; - - - //air in the cover - CrystalCoverLog = - new G4LogicalVolume(CrystalCover, - aMaterial->getCarbon(), "CrystalCoverLog",0,0,0); - - //location of the cover - G4VPhysicalVolume* CrystalCoverPhys = - new G4PVPlacement(CrystalCoverTransform, CrystalCoverPhysName, CrystalCoverLog , - aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), - false,0); - - RichTbCrystalCoverLVol = CrystalCoverLog; - RichTbCrystalCoverPVol = CrystalCoverPhys; - - -} -void RichTbCrystalCover::constructRichTbCrystalCoverEnvelope() -{ - -} + G4Transform3D CrystalCoverTransform(CrystalCoverRotX * CrystalCoverRotY, CrystalCoverPos); + + G4Transform3D CrystalCoverSubTransform(CrystalCoverSubRotX * CrystalCoverSubRotY, CrystalCoverSubPos); + G4SubtractionSolid *CrystalCover = + new G4SubtractionSolid("CrystalCover", RichTbCrystalCoverBox, RichTbCrystalCoverSubBox, CrystalCoverSubTransform); + + G4LogicalVolume *CrystalCoverLog; + + // air in the cover + CrystalCoverLog = new G4LogicalVolume(CrystalCover, aMaterial->getCarbon(), "CrystalCoverLog", 0, 0, 0); + + // location of the cover + G4VPhysicalVolume *CrystalCoverPhys = + new G4PVPlacement(CrystalCoverTransform, CrystalCoverPhysName, CrystalCoverLog, + aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), false, 0); + + RichTbCrystalCoverLVol = CrystalCoverLog; + RichTbCrystalCoverPVol = CrystalCoverPhys; +} +void RichTbCrystalCover::constructRichTbCrystalCoverEnvelope() {} //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeCrystalMaster.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeCrystalMaster.cc index 5b1a9f1548f8b16448a5e19789cad5967c9bae52..c24e48634f9e40b7f31e1b1b6f7b049892598119 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeCrystalMaster.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeCrystalMaster.cc @@ -1,24 +1,22 @@ // $Id: $ // Include files - - // local -#include "RichTbGeometryParameters.hh" -#include "RichTbMiscNames.hh" -#include "RichTbMaterial.hh" -#include "RichTbUpgradeVessel.hh" #include "RichTbUpgradeCrystalMaster.hh" -#include "RichTbHall.hh" +#include "Geant4/G4Box.hh" +#include "Geant4/G4LogicalVolume.hh" +#include "Geant4/G4PVPlacement.hh" #include "Geant4/G4RotationMatrix.hh" +#include "Geant4/G4SubtractionSolid.hh" #include "Geant4/G4ThreeVector.hh" #include "Geant4/G4Transform3D.hh" -#include "Geant4/G4SubtractionSolid.hh" -#include "Geant4/G4Box.hh" -#include "Geant4/G4LogicalVolume.hh" #include "Geant4/G4VPhysicalVolume.hh" -#include "Geant4/G4PVPlacement.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbHall.hh" +#include "RichTbMaterial.hh" +#include "RichTbMiscNames.hh" #include "RichTbRunConfig.hh" +#include "RichTbUpgradeVessel.hh" //----------------------------------------------------------------------------- // Implementation file for class : RichTbVessel @@ -30,77 +28,58 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbUpgradeCrystalMaster::RichTbUpgradeCrystalMaster(RichTbUpgradeVessel* rTbVessel ) { +RichTbUpgradeCrystalMaster::RichTbUpgradeCrystalMaster(RichTbUpgradeVessel *rTbVessel) { aRTbVessel = rTbVessel; constructRichTbUpgradeCrystalMaster(); - } -RichTbUpgradeCrystalMaster::~RichTbUpgradeCrystalMaster( ) -{ -} -void RichTbUpgradeCrystalMaster::constructRichTbUpgradeCrystalMaster() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - - G4Box * RichTbCrystalMasterBox - = new G4Box("RichTbCrystalMasterBox", 0.5*RichTbCrystalMasterXSize, - 0.5*RichTbCrystalMasterYSize, 0.5*RichTbCrystalMasterZSize); +RichTbUpgradeCrystalMaster::~RichTbUpgradeCrystalMaster() {} +void RichTbUpgradeCrystalMaster::constructRichTbUpgradeCrystalMaster() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); - G4ThreeVector CrystalMasterPos(RichTbCrystalMasterXLocation, - RichTbCrystalMasterYLocation, - RichTbCrystalMasterZLocation); + G4Box *RichTbCrystalMasterBox = new G4Box("RichTbCrystalMasterBox", 0.5 * RichTbCrystalMasterXSize, + 0.5 * RichTbCrystalMasterYSize, 0.5 * RichTbCrystalMasterZSize); - G4RotationMatrix CrystalMasterRotX,CrystalMasterRotY; + G4ThreeVector CrystalMasterPos(RichTbCrystalMasterXLocation, RichTbCrystalMasterYLocation, + RichTbCrystalMasterZLocation); - G4int aSpecialStudyCrystalRotFlag = - aConfig ->getSpecialStudyCrystalRotation(); + G4RotationMatrix CrystalMasterRotX, CrystalMasterRotY; - if( aSpecialStudyCrystalRotFlag != 1 ) { - //G4cout << "rotation " << -aConfig ->getSpecialStudyCrystalRotationY() << G4endl; - CrystalMasterRotX.rotateX(aConfig ->getSpecialStudyCrystalRotationX()); - CrystalMasterRotY.rotateY(aConfig ->getSpecialStudyCrystalRotationY()); + G4int aSpecialStudyCrystalRotFlag = aConfig->getSpecialStudyCrystalRotation(); + if (aSpecialStudyCrystalRotFlag != 1) { + // G4cout << "rotation " << -aConfig ->getSpecialStudyCrystalRotationY() << G4endl; + CrystalMasterRotX.rotateX(aConfig->getSpecialStudyCrystalRotationX()); + CrystalMasterRotY.rotateY(aConfig->getSpecialStudyCrystalRotationY()); } - // // G4cout<<" Vessel XRot Yrot "<<RichTbVesselXRotation<<" " // <<RichTbVesselYRotation<<G4endl; - //G4Transform3D VesselUpsSubTransform(VesselUpsSubRot,VesselUpsSubPos); - G4Transform3D CrystalMasterTransform( CrystalMasterRotX * CrystalMasterRotY, CrystalMasterPos); + // G4Transform3D VesselUpsSubTransform(VesselUpsSubRot,VesselUpsSubPos); + G4Transform3D CrystalMasterTransform(CrystalMasterRotX * CrystalMasterRotY, CrystalMasterPos); /* G4SubtractionSolid* VesselUpsSub = new G4SubtractionSolid("VesselUpsSub", RichTbVesselBoxOverall , RichTbVesselUpsSubBox,VesselUpsSubTransform); */ - G4LogicalVolume* CrystalMasterLog; - - - //crystal material - CrystalMasterLog = - new G4LogicalVolume(RichTbCrystalMasterBox, - aMaterial->getNitrogenGas(), "CrystalMasterLog",0,0,0); - - //crystal location - G4VPhysicalVolume* CrystalMasterPhys = - new G4PVPlacement(CrystalMasterTransform, CrystalMasterPhysName, CrystalMasterLog , - aRTbVessel->getRichTbGasVesselPVol(), - false,0); + G4LogicalVolume *CrystalMasterLog; - RichTbUpgradeCrystalMasterLVol = CrystalMasterLog; - RichTbUpgradeCrystalMasterPVol = CrystalMasterPhys; + // crystal material + CrystalMasterLog = + new G4LogicalVolume(RichTbCrystalMasterBox, aMaterial->getNitrogenGas(), "CrystalMasterLog", 0, 0, 0); + // crystal location + G4VPhysicalVolume *CrystalMasterPhys = new G4PVPlacement( + CrystalMasterTransform, CrystalMasterPhysName, CrystalMasterLog, aRTbVessel->getRichTbGasVesselPVol(), false, 0); + RichTbUpgradeCrystalMasterLVol = CrystalMasterLog; + RichTbUpgradeCrystalMasterPVol = CrystalMasterPhys; } -void RichTbUpgradeCrystalMaster::constructRichTbUpgradeCrystalMasterEnvelope() -{ - -} - +void RichTbUpgradeCrystalMaster::constructRichTbUpgradeCrystalMasterEnvelope() {} //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeDarkCover.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeDarkCover.cc index bbac8a21f653e09025210e1ca77c987d34d38eb4..a009bbf19c5a7ef6709bed47073d2eec125e9c33 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeDarkCover.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeDarkCover.cc @@ -1,27 +1,25 @@ // $Id: $ // Include files - - // local -#include "RichTbGeometryParameters.hh" -#include "RichTbMiscNames.hh" -#include "RichTbMaterial.hh" -#include "RichTbUpgradeVessel.hh" #include "RichTbUpgradeDarkCover.hh" -#include "RichTbUpgradeCrystalMaster.hh" -#include "RichTbHall.hh" -#include "Geant4/G4RotationMatrix.hh" -#include "Geant4/G4ThreeVector.hh" -#include "Geant4/G4Transform3D.hh" -#include "Geant4/G4SubtractionSolid.hh" #include "Geant4/G4Box.hh" #include "Geant4/G4LogicalVolume.hh" -#include "Geant4/G4VPhysicalVolume.hh" #include "Geant4/G4PVPlacement.hh" -#include "RichTbRunConfig.hh" +#include "Geant4/G4RotationMatrix.hh" #include "Geant4/G4Sphere.hh" +#include "Geant4/G4SubtractionSolid.hh" +#include "Geant4/G4ThreeVector.hh" +#include "Geant4/G4Transform3D.hh" #include "Geant4/G4Tubs.hh" +#include "Geant4/G4VPhysicalVolume.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbHall.hh" +#include "RichTbMaterial.hh" +#include "RichTbMiscNames.hh" +#include "RichTbRunConfig.hh" +#include "RichTbUpgradeCrystalMaster.hh" +#include "RichTbUpgradeVessel.hh" //----------------------------------------------------------------------------- // Implementation file for class : RichTbVessel @@ -33,276 +31,216 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbUpgradeDarkCover::RichTbUpgradeDarkCover(RichTbUpgradeRadiator* arTbRadiator ) { - - aRTbUpgradeRadiator = arTbRadiator; +RichTbUpgradeDarkCover::RichTbUpgradeDarkCover(RichTbUpgradeRadiator *arTbRadiator) { - RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - G4int aRadiatorConfiguration = aConfig ->getRadiatorConfiguration(); + aRTbUpgradeRadiator = arTbRadiator; - if(aRadiatorConfiguration == 3) constructRichTbUpgradeDarkCover15(); - else constructRichTbUpgradeDarkCover(); + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); + G4int aRadiatorConfiguration = aConfig->getRadiatorConfiguration(); + if (aRadiatorConfiguration == 3) + constructRichTbUpgradeDarkCover15(); + else + constructRichTbUpgradeDarkCover(); } -RichTbUpgradeDarkCover::~RichTbUpgradeDarkCover( ) -{ -} - -void RichTbUpgradeDarkCover::constructRichTbUpgradeDarkCover() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - //RichTbRunConfig* aConfig = RichTbRunConfig::getRunConfigInstance(); - - G4Box * RichTbUpgradeDarkCoverBox - = new G4Box("RichTbUpgradeDarkCoverBox", 0.5*RichTbUpgradeDarkCoverXSize, - 0.5*RichTbUpgradeDarkCoverYSize, 0.5*RichTbUpgradeDarkCoverZSize); - - G4ThreeVector DarkCoverPos(RichTbUpgradeDarkCoverXLocation, - RichTbUpgradeDarkCoverYLocation, - RichTbUpgradeDarkCoverZLocation); - - G4RotationMatrix DarkCoverRotX, DarkCoverRotY; - - G4Transform3D DarkCoverTransform( DarkCoverRotX * DarkCoverRotY, DarkCoverPos); +RichTbUpgradeDarkCover::~RichTbUpgradeDarkCover() {} - /* G4SubtractionSolid* VesselUpsSub = - new G4SubtractionSolid("VesselUpsSub", RichTbVesselBoxOverall , - RichTbVesselUpsSubBox,VesselUpsSubTransform); +void RichTbUpgradeDarkCover::constructRichTbUpgradeDarkCover() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + // RichTbRunConfig* aConfig = RichTbRunConfig::getRunConfigInstance(); - */ - G4LogicalVolume* DarkCoverLog; + G4Box *RichTbUpgradeDarkCoverBox = new G4Box("RichTbUpgradeDarkCoverBox", 0.5 * RichTbUpgradeDarkCoverXSize, + 0.5 * RichTbUpgradeDarkCoverYSize, 0.5 * RichTbUpgradeDarkCoverZSize); + G4ThreeVector DarkCoverPos(RichTbUpgradeDarkCoverXLocation, RichTbUpgradeDarkCoverYLocation, + RichTbUpgradeDarkCoverZLocation); + G4RotationMatrix DarkCoverRotX, DarkCoverRotY; - DarkCoverLog = - new G4LogicalVolume(RichTbUpgradeDarkCoverBox, - aMaterial->getCarbon(), "DarkCoverLog",0,0,0); + G4Transform3D DarkCoverTransform(DarkCoverRotX * DarkCoverRotY, DarkCoverPos); + /* G4SubtractionSolid* VesselUpsSub = +new G4SubtractionSolid("VesselUpsSub", RichTbVesselBoxOverall , + RichTbVesselUpsSubBox,VesselUpsSubTransform); - G4VPhysicalVolume* DarkCoverPhys = - new G4PVPlacement(DarkCoverTransform, DarkCoverPhysName, DarkCoverLog , - aRTbUpgradeRadiator->getRichTbUpgradeRadiatorPVol(), - false,0); - - RichTbUpgradeDarkCoverLVol = DarkCoverLog; - RichTbUpgradeDarkCoverPVol = DarkCoverPhys; + */ + G4LogicalVolume *DarkCoverLog; + DarkCoverLog = new G4LogicalVolume(RichTbUpgradeDarkCoverBox, aMaterial->getCarbon(), "DarkCoverLog", 0, 0, 0); + G4VPhysicalVolume *DarkCoverPhys = new G4PVPlacement(DarkCoverTransform, DarkCoverPhysName, DarkCoverLog, + aRTbUpgradeRadiator->getRichTbUpgradeRadiatorPVol(), false, 0); + RichTbUpgradeDarkCoverLVol = DarkCoverLog; + RichTbUpgradeDarkCoverPVol = DarkCoverPhys; } -void RichTbUpgradeDarkCover::constructRichTbUpgradeUpsDarkCoverEnvelope(RichTbUpgradeCrystalMaster* aMaster ) -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); +void RichTbUpgradeDarkCover::constructRichTbUpgradeUpsDarkCoverEnvelope(RichTbUpgradeCrystalMaster *aMaster) { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - G4double DarkPhiStart = 0.0*CLHEP::rad; - G4double DarkPhiSize=2*CLHEP::pi* CLHEP::rad; - G4double DarkThetaStart = 0.0*CLHEP::rad; - G4double DarkThetaSize= CLHEP::pi/5*CLHEP::rad; + G4double DarkPhiStart = 0.0 * CLHEP::rad; + G4double DarkPhiSize = 2 * CLHEP::pi * CLHEP::rad; + G4double DarkThetaStart = 0.0 * CLHEP::rad; + G4double DarkThetaSize = CLHEP::pi / 5 * CLHEP::rad; - G4Sphere* UpsDarkFull = new G4Sphere("MirrorFull", RichTbDarkUpsInnerRadius, - RichTbDarkUpsOuterRadius,DarkPhiStart , - DarkPhiSize , DarkThetaStart, - DarkThetaSize); + G4Sphere *UpsDarkFull = new G4Sphere("MirrorFull", RichTbDarkUpsInnerRadius, RichTbDarkUpsOuterRadius, DarkPhiStart, + DarkPhiSize, DarkThetaStart, DarkThetaSize); - G4Box * BoxU - = new G4Box("DarkBoxSub", 0.5* MirrorSubBoxLargeXSize, - 0.5* MirrorSubBoxLargeYSize , 0.5*MirrorSubBoxLargeZSize ); + G4Box *BoxU = + new G4Box("DarkBoxSub", 0.5 * MirrorSubBoxLargeXSize, 0.5 * MirrorSubBoxLargeYSize, 0.5 * MirrorSubBoxLargeZSize); - G4RotationMatrix BoxTopRot, BoxBotRot; - G4ThreeVector Box2PosTop (0.0, MirrorSubBoxYPosTop,0.0); - G4ThreeVector Box2PosBot (0.0, MirrorSubBoxYPosBot,0.0); - G4Transform3D BoxTopTransform(BoxTopRot, Box2PosTop ); - G4Transform3D BoxBotTransform(BoxBotRot, Box2PosBot ); + G4RotationMatrix BoxTopRot, BoxBotRot; + G4ThreeVector Box2PosTop(0.0, MirrorSubBoxYPosTop, 0.0); + G4ThreeVector Box2PosBot(0.0, MirrorSubBoxYPosBot, 0.0); + G4Transform3D BoxTopTransform(BoxTopRot, Box2PosTop); + G4Transform3D BoxBotTransform(BoxBotRot, Box2PosBot); + G4SubtractionSolid *DarkHA = new G4SubtractionSolid("DarkHA", UpsDarkFull, BoxU, BoxTopTransform); - G4SubtractionSolid* DarkHA = - new G4SubtractionSolid("DarkHA",UpsDarkFull , - BoxU , BoxTopTransform ); + G4SubtractionSolid *UpsDarkSphe = new G4SubtractionSolid("UpsDarkSphe", DarkHA, BoxU, BoxBotTransform); - G4SubtractionSolid* UpsDarkSphe = - new G4SubtractionSolid("UpsDarkSphe",DarkHA , - BoxU , BoxBotTransform ); + G4RotationMatrix UpsDarkRotationX, UpsDarkRotationY; + UpsDarkRotationY.rotateY(180 * CLHEP::degree); + G4ThreeVector UpsDarkPos(MirrorPosX, MirrorPosY, MirrorPosZ); - G4RotationMatrix UpsDarkRotationX, UpsDarkRotationY; - UpsDarkRotationY.rotateY(180*CLHEP::degree); - G4ThreeVector UpsDarkPos ( MirrorPosX , MirrorPosY, MirrorPosZ); + G4Transform3D UpsDarkTransform(UpsDarkRotationX * UpsDarkRotationY, UpsDarkPos); + G4LogicalVolume *UpsDarkLog = new G4LogicalVolume(UpsDarkSphe, aMaterial->getCarbon(), "UpsDarkSpheLog", 0, 0, 0); - G4Transform3D UpsDarkTransform( UpsDarkRotationX * UpsDarkRotationY, UpsDarkPos); + G4VPhysicalVolume *UpsDarkPhys = new G4PVPlacement(UpsDarkTransform, "UpsDarkSphePhys", UpsDarkLog, + aMaster->getRichTbUpgradeCrystalMasterPVol(), false, 0); - G4LogicalVolume* UpsDarkLog = - new G4LogicalVolume( UpsDarkSphe,aMaterial->getCarbon(), - "UpsDarkSpheLog",0,0,0); + RichTbUpgradeUpsDarkCoverLVol = UpsDarkLog; + RichTbUpgradeUpsDarkCoverPVol = UpsDarkPhys; +} +void RichTbUpgradeDarkCover::constructRichTbUpgradeSideDarkCoverEnvelope(RichTbUpgradeCrystalMaster *aMasterC) { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + + G4Box *BoxT = + new G4Box("DarkBoxSide", 0.5 * RichTbDarkSideXSize, 0.5 * RichTbDarkSideYSize, 0.5 * RichTbDarkSideZSize); + G4RotationMatrix BoxTopRot, BoxBotRot; + G4ThreeVector BoxTPosTop(RichTbDarkSideXLocation, RichTbDarkSideYTopLocation, RichTbDarkSideZLocation); + G4ThreeVector BoxTPosBot(RichTbDarkSideXLocation, RichTbDarkSideYBotLocation, RichTbDarkSideZLocation); + G4Transform3D BoxTTopTransform(BoxTopRot, BoxTPosTop); + G4Transform3D BoxTBotTransform(BoxBotRot, BoxTPosBot); + G4LogicalVolume *SideDarkLog = new G4LogicalVolume(BoxT, aMaterial->getCarbon(), "SideDarkLog", 0, 0, 0); + G4VPhysicalVolume *SideDarkTopPhys = new G4PVPlacement(BoxTTopTransform, "SideDarkTopPhys", SideDarkLog, + aMasterC->getRichTbUpgradeCrystalMasterPVol(), false, 0); + G4VPhysicalVolume *SideDarkBotPhys = new G4PVPlacement(BoxTBotTransform, "SideDarkBotPhys", SideDarkLog, + aMasterC->getRichTbUpgradeCrystalMasterPVol(), false, 0); + + RichTbUpgradeSideDarkCoverLVol = SideDarkLog; + RichTbUpgradeSideTopDarkCoverPVol = SideDarkTopPhys; + RichTbUpgradeSideBotDarkCoverPVol = SideDarkBotPhys; +} - G4VPhysicalVolume* UpsDarkPhys= - new G4PVPlacement( UpsDarkTransform, "UpsDarkSphePhys", - UpsDarkLog,aMaster->getRichTbUpgradeCrystalMasterPVol(),false,0); +void RichTbUpgradeDarkCover::constructRichTbUpgradeDarkCover15() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + // RichTbRunConfig* aConfig = RichTbRunConfig::getRunConfigInstance(); + // G4Box * RichTbUpgradeDarkCoverBox = new G4Box("RichTbUpgradeDarkCoverBox", + // 0.5*RichTbUpgradeDarkCoverXSize15, + // 0.5*RichTbUpgradeDarkCoverYSize15, + // 0.5*RichTbUpgradeDarkCoverZSize15); - RichTbUpgradeUpsDarkCoverLVol = UpsDarkLog; - RichTbUpgradeUpsDarkCoverPVol = UpsDarkPhys; + G4Tubs *RichTbUpgradeDarkCoverSubTubs = + new G4Tubs("RichTbUpgradeDarkCoverCyl", cylDarkRmin, cylDarkRmax, cylDarkHalfLength, cylSPhi, cylDPhi); + G4ThreeVector DarkCoverPos(RichTbUpgradeDarkCoverXLocation15, RichTbUpgradeDarkCoverYLocation15, + RichTbUpgradeDarkCoverZLocation15); + G4RotationMatrix DarkCoverRotX, DarkCoverRotY; + G4Transform3D DarkCoverTransform(DarkCoverRotX * DarkCoverRotY, DarkCoverPos); + /* G4SubtractionSolid* VesselUpsSub = +new G4SubtractionSolid("VesselUpsSub", RichTbVesselBoxOverall , + RichTbVesselUpsSubBox,VesselUpsSubTransform); + */ + G4LogicalVolume *DarkCoverLog; + DarkCoverLog = new G4LogicalVolume(RichTbUpgradeDarkCoverSubTubs, aMaterial->getCarbon(), "DarkCoverLog", 0, 0, 0); + G4VPhysicalVolume *DarkCoverPhys = new G4PVPlacement(DarkCoverTransform, DarkCoverPhysName, DarkCoverLog, + aRTbUpgradeRadiator->getRichTbUpgradeRadiatorPVol(), false, 0); + RichTbUpgradeDarkCoverLVol = DarkCoverLog; + RichTbUpgradeDarkCoverPVol = DarkCoverPhys; } -void RichTbUpgradeDarkCover::constructRichTbUpgradeSideDarkCoverEnvelope(RichTbUpgradeCrystalMaster* aMasterC ) -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - - G4Box * BoxT - = new G4Box("DarkBoxSide", 0.5* RichTbDarkSideXSize , - 0.5* RichTbDarkSideYSize , 0.5*RichTbDarkSideZSize ); - G4RotationMatrix BoxTopRot, BoxBotRot; - G4ThreeVector BoxTPosTop ( RichTbDarkSideXLocation,RichTbDarkSideYTopLocation ,RichTbDarkSideZLocation ); - G4ThreeVector BoxTPosBot ( RichTbDarkSideXLocation,RichTbDarkSideYBotLocation ,RichTbDarkSideZLocation); - G4Transform3D BoxTTopTransform(BoxTopRot, BoxTPosTop ); - G4Transform3D BoxTBotTransform(BoxBotRot, BoxTPosBot ); - G4LogicalVolume* SideDarkLog = - new G4LogicalVolume( BoxT,aMaterial->getCarbon(), - "SideDarkLog",0,0,0); - G4VPhysicalVolume* SideDarkTopPhys= - new G4PVPlacement( BoxTTopTransform, "SideDarkTopPhys", - SideDarkLog,aMasterC->getRichTbUpgradeCrystalMasterPVol(),false,0); - G4VPhysicalVolume* SideDarkBotPhys= - new G4PVPlacement( BoxTBotTransform, "SideDarkBotPhys", - SideDarkLog,aMasterC->getRichTbUpgradeCrystalMasterPVol(),false,0); - - RichTbUpgradeSideDarkCoverLVol = SideDarkLog; - RichTbUpgradeSideTopDarkCoverPVol = SideDarkTopPhys; - RichTbUpgradeSideBotDarkCoverPVol = SideDarkBotPhys; +void RichTbUpgradeDarkCover::constructRichTbUpgradeUpsDarkCoverEnvelope15(RichTbUpgradeCrystalMaster *aMaster) { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + + G4double DarkPhiStart = 0.0 * CLHEP::rad; + G4double DarkPhiSize = 2 * CLHEP::pi * CLHEP::rad; + G4double DarkThetaStart = 0.0 * CLHEP::rad; + G4double DarkThetaSize = CLHEP::pi / 5 * CLHEP::rad; + + G4Sphere *UpsDarkFull = new G4Sphere("MirrorFull", RichTbDarkUpsInnerRadius15, RichTbDarkUpsOuterRadius15, + DarkPhiStart, DarkPhiSize, DarkThetaStart, DarkThetaSize); + // + // G4Box * BoxU = new G4Box("DarkBoxSub", 0.5*MirrorSubBoxLargeXSize, + // 0.5*MirrorSubBoxLargeYSize, 0.5*MirrorSubBoxLargeZSize); + // + // G4RotationMatrix BoxTopRot, BoxBotRot; + // G4ThreeVector Box2PosTop (0.0, MirrorSubBoxYPosTop,0.0); + // G4ThreeVector Box2PosBot (0.0, MirrorSubBoxYPosBot,0.0); + // G4Transform3D BoxTopTransform(BoxTopRot, Box2PosTop); + // G4Transform3D BoxBotTransform(BoxBotRot, Box2PosBot); + // + // G4SubtractionSolid* DarkHA = new G4SubtractionSolid("DarkHA",UpsDarkFull, + // BoxU, BoxTopTransform); + // + // G4SubtractionSolid* UpsDarkSphe = new G4SubtractionSolid("UpsDarkSphe",DarkHA, + // BoxU, BoxBotTransform); + + G4RotationMatrix UpsDarkRotationX, UpsDarkRotationY; + UpsDarkRotationY.rotateY(180 * CLHEP::degree); + G4ThreeVector UpsDarkPos(MirrorPosX15, MirrorPosY15, MirrorPosZ15); + + G4Transform3D UpsDarkTransform(UpsDarkRotationX * UpsDarkRotationY, UpsDarkPos); + + // G4LogicalVolume* UpsDarkLog = new G4LogicalVolume(UpsDarkSphe,aMaterial->getCarbon(), + // "UpsDarkSpheLog",0,0,0); + G4LogicalVolume *UpsDarkLog = new G4LogicalVolume(UpsDarkFull, aMaterial->getCarbon(), "UpsDarkSpheLog", 0, 0, 0); + + G4VPhysicalVolume *UpsDarkPhys = new G4PVPlacement(UpsDarkTransform, "UpsDarkSphePhys", UpsDarkLog, + aMaster->getRichTbUpgradeCrystalMasterPVol(), false, 0); + + RichTbUpgradeUpsDarkCoverLVol = UpsDarkLog; + RichTbUpgradeUpsDarkCoverPVol = UpsDarkPhys; } -void RichTbUpgradeDarkCover::constructRichTbUpgradeDarkCover15() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - //RichTbRunConfig* aConfig = RichTbRunConfig::getRunConfigInstance(); - -// G4Box * RichTbUpgradeDarkCoverBox = new G4Box("RichTbUpgradeDarkCoverBox", -// 0.5*RichTbUpgradeDarkCoverXSize15, -// 0.5*RichTbUpgradeDarkCoverYSize15, -// 0.5*RichTbUpgradeDarkCoverZSize15); - - G4Tubs * RichTbUpgradeDarkCoverSubTubs = new G4Tubs("RichTbUpgradeDarkCoverCyl", cylDarkRmin, cylDarkRmax, cylDarkHalfLength, cylSPhi, cylDPhi); +void RichTbUpgradeDarkCover::constructRichTbUpgradeSideDarkCoverEnvelope15(RichTbUpgradeCrystalMaster *aMasterC) { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + G4Box *BoxOut = + new G4Box("BoxOut", 0.5 * RichTbDarkSideXSize15, 0.5 * RichTbDarkSideYSize15, 0.5 * RichTbDarkSideZSize15); - G4ThreeVector DarkCoverPos(RichTbUpgradeDarkCoverXLocation15, - RichTbUpgradeDarkCoverYLocation15, - RichTbUpgradeDarkCoverZLocation15); + G4Box *BoxInn = new G4Box("BoxInn", 0.5 * BoxInnXSize15, 0.5 * BoxInnYSize15, 0.5 * BoxInnZSize15); - G4RotationMatrix DarkCoverRotX,DarkCoverRotY; - G4Transform3D DarkCoverTransform(DarkCoverRotX * DarkCoverRotY, DarkCoverPos); + G4RotationMatrix BoxOutRot, BoxInnRot; + G4ThreeVector BoxTPosOut(RichTbDarkSideXLocation15, RichTbDarkSideYLocation15, RichTbDarkSideZLocation15); + // G4ThreeVector BoxTPosInn(RichTbDarkSideXLocation15,RichTbDarkSideYLocation15,RichTbDarkSideZLocation15); + G4Transform3D BoxTOutTransform(BoxOutRot, BoxTPosOut); + // G4Transform3D BoxTInnTransform(BoxInnRot, BoxTPosInn); - /* G4SubtractionSolid* VesselUpsSub = - new G4SubtractionSolid("VesselUpsSub", RichTbVesselBoxOverall , - RichTbVesselUpsSubBox,VesselUpsSubTransform); - */ + G4SubtractionSolid *DarkBox = new G4SubtractionSolid("DarkBox", BoxOut, BoxInn); - G4LogicalVolume* DarkCoverLog; - DarkCoverLog = new G4LogicalVolume(RichTbUpgradeDarkCoverSubTubs, - aMaterial->getCarbon(), "DarkCoverLog",0,0,0); + G4LogicalVolume *SideDarkLog = new G4LogicalVolume(DarkBox, aMaterial->getCarbon(), "SideDarkLog", 0, 0, 0); + G4VPhysicalVolume *SideDarkPhys = new G4PVPlacement(BoxTOutTransform, "SideDarkTopPhys", SideDarkLog, + aMasterC->getRichTbUpgradeCrystalMasterPVol(), false, 0); - G4VPhysicalVolume* DarkCoverPhys = new G4PVPlacement(DarkCoverTransform, - DarkCoverPhysName, DarkCoverLog , - aRTbUpgradeRadiator->getRichTbUpgradeRadiatorPVol(), - false,0); + // G4LogicalVolume* SideDarkLog = new G4LogicalVolume(BoxT,aMaterial->getCarbon(), + // "SideDarkLog",0,0,0); + // G4VPhysicalVolume* SideDarkTopPhys = new G4PVPlacement(BoxTTopTransform,"SideDarkTopPhys", + // SideDarkLog,aMasterC->getRichTbUpgradeCrystalMasterPVol(),false,0); + // G4VPhysicalVolume* SideDarkBotPhys= new G4PVPlacement(BoxTBotTransform, "SideDarkBotPhys", + // SideDarkLog,aMasterC->getRichTbUpgradeCrystalMasterPVol(),false,0); - RichTbUpgradeDarkCoverLVol = DarkCoverLog; - RichTbUpgradeDarkCoverPVol = DarkCoverPhys; + RichTbUpgradeSideDarkCoverLVol = SideDarkLog; + RichTbUpgradeSideTopDarkCoverPVol = SideDarkPhys; + // RichTbUpgradeSideTopDarkCoverPVol = SideDarkTopPhys; + // RichTbUpgradeSideBotDarkCoverPVol = SideDarkBotPhys; } -void RichTbUpgradeDarkCover::constructRichTbUpgradeUpsDarkCoverEnvelope15(RichTbUpgradeCrystalMaster* aMaster) -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - - G4double DarkPhiStart = 0.0*CLHEP::rad; - G4double DarkPhiSize=2*CLHEP::pi* CLHEP::rad; - G4double DarkThetaStart = 0.0*CLHEP::rad; - G4double DarkThetaSize= CLHEP::pi/5*CLHEP::rad; - - G4Sphere* UpsDarkFull = new G4Sphere("MirrorFull", RichTbDarkUpsInnerRadius15, - RichTbDarkUpsOuterRadius15,DarkPhiStart, - DarkPhiSize, DarkThetaStart, - DarkThetaSize); - // - // G4Box * BoxU = new G4Box("DarkBoxSub", 0.5*MirrorSubBoxLargeXSize, - // 0.5*MirrorSubBoxLargeYSize, 0.5*MirrorSubBoxLargeZSize); - // - // G4RotationMatrix BoxTopRot, BoxBotRot; - // G4ThreeVector Box2PosTop (0.0, MirrorSubBoxYPosTop,0.0); - // G4ThreeVector Box2PosBot (0.0, MirrorSubBoxYPosBot,0.0); - // G4Transform3D BoxTopTransform(BoxTopRot, Box2PosTop); - // G4Transform3D BoxBotTransform(BoxBotRot, Box2PosBot); - // - // G4SubtractionSolid* DarkHA = new G4SubtractionSolid("DarkHA",UpsDarkFull, - // BoxU, BoxTopTransform); - // - // G4SubtractionSolid* UpsDarkSphe = new G4SubtractionSolid("UpsDarkSphe",DarkHA, - // BoxU, BoxBotTransform); - - G4RotationMatrix UpsDarkRotationX, UpsDarkRotationY; - UpsDarkRotationY.rotateY(180*CLHEP::degree); - G4ThreeVector UpsDarkPos(MirrorPosX15, MirrorPosY15, MirrorPosZ15); - - G4Transform3D UpsDarkTransform(UpsDarkRotationX * UpsDarkRotationY, UpsDarkPos); - - // G4LogicalVolume* UpsDarkLog = new G4LogicalVolume(UpsDarkSphe,aMaterial->getCarbon(), - // "UpsDarkSpheLog",0,0,0); - G4LogicalVolume* UpsDarkLog = new G4LogicalVolume(UpsDarkFull,aMaterial->getCarbon(), - "UpsDarkSpheLog",0,0,0); - - G4VPhysicalVolume* UpsDarkPhys= new G4PVPlacement(UpsDarkTransform, "UpsDarkSphePhys", - UpsDarkLog,aMaster->getRichTbUpgradeCrystalMasterPVol(),false,0); - - - RichTbUpgradeUpsDarkCoverLVol = UpsDarkLog; - RichTbUpgradeUpsDarkCoverPVol = UpsDarkPhys; -} - -void RichTbUpgradeDarkCover::constructRichTbUpgradeSideDarkCoverEnvelope15(RichTbUpgradeCrystalMaster* aMasterC) -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - - G4Box * BoxOut = new G4Box("BoxOut", - 0.5 * RichTbDarkSideXSize15, - 0.5 * RichTbDarkSideYSize15, - 0.5 * RichTbDarkSideZSize15); - - G4Box * BoxInn = new G4Box("BoxInn", - 0.5 * BoxInnXSize15, - 0.5 * BoxInnYSize15, - 0.5 * BoxInnZSize15); - - G4RotationMatrix BoxOutRot, BoxInnRot; - G4ThreeVector BoxTPosOut(RichTbDarkSideXLocation15,RichTbDarkSideYLocation15,RichTbDarkSideZLocation15); - // G4ThreeVector BoxTPosInn(RichTbDarkSideXLocation15,RichTbDarkSideYLocation15,RichTbDarkSideZLocation15); - G4Transform3D BoxTOutTransform(BoxOutRot, BoxTPosOut); - // G4Transform3D BoxTInnTransform(BoxInnRot, BoxTPosInn); - - G4SubtractionSolid * DarkBox = new G4SubtractionSolid("DarkBox", BoxOut, BoxInn); - - G4LogicalVolume* SideDarkLog = new G4LogicalVolume(DarkBox,aMaterial->getCarbon(), - "SideDarkLog",0,0,0); - - G4VPhysicalVolume* SideDarkPhys = new G4PVPlacement(BoxTOutTransform,"SideDarkTopPhys", - SideDarkLog,aMasterC->getRichTbUpgradeCrystalMasterPVol(),false,0); - -// G4LogicalVolume* SideDarkLog = new G4LogicalVolume(BoxT,aMaterial->getCarbon(), -// "SideDarkLog",0,0,0); -// G4VPhysicalVolume* SideDarkTopPhys = new G4PVPlacement(BoxTTopTransform,"SideDarkTopPhys", -// SideDarkLog,aMasterC->getRichTbUpgradeCrystalMasterPVol(),false,0); -// G4VPhysicalVolume* SideDarkBotPhys= new G4PVPlacement(BoxTBotTransform, "SideDarkBotPhys", -// SideDarkLog,aMasterC->getRichTbUpgradeCrystalMasterPVol(),false,0); - - RichTbUpgradeSideDarkCoverLVol = SideDarkLog; - RichTbUpgradeSideTopDarkCoverPVol = SideDarkPhys; -// RichTbUpgradeSideTopDarkCoverPVol = SideDarkTopPhys; -// RichTbUpgradeSideBotDarkCoverPVol = SideDarkBotPhys; -} - - //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeDetectorConstruction.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeDetectorConstruction.cc index 2fa3e97a3f6e6904e5dcbf28121a60f380bcaa59..b9e978f5075a5095002b82e707084d977eda6ab7 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeDetectorConstruction.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeDetectorConstruction.cc @@ -1,204 +1,185 @@ // Geant4 headers #include "Geant4/G4Box.hh" -#include "Geant4/G4ThreeVector.hh" #include "Geant4/G4LogicalVolume.hh" -#include "Geant4/G4VPhysicalVolume.hh" #include "Geant4/G4PVPlacement.hh" #include "Geant4/G4SDManager.hh" +#include "Geant4/G4ThreeVector.hh" +#include "Geant4/G4VPhysicalVolume.hh" // STL etc #include <iostream> // local headers -#include "RichTbMiscNames.hh" #include "RichTbGeometryParameters.hh" -#include "RichTbUpgradeDetectorConstruction.hh" #include "RichTbHall.hh" +#include "RichTbMiscNames.hh" +#include "RichTbUpgradeDetectorConstruction.hh" -#include "RichTbSurfaceDefinition.hh" #include "RichTbSurface.hh" +#include "RichTbSurfaceDefinition.hh" -#include "RichTbUpgradeSD.hh" #include "RichTbUpgradeHpdSD.hh" +#include "RichTbUpgradeSD.hh" -RichTbDetectorConstruction::RichTbDetectorConstruction() -{; -} - -RichTbDetectorConstruction::~RichTbDetectorConstruction() -{; -} - -G4VPhysicalVolume *RichTbDetectorConstruction::Construct() -{ - - // now create all the materials and surface properties. - // RichTbMaterial* rMaterial = RichTbMaterial::getRichTbMaterialInstance(); - RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - G4int aRadiatorConfiguration = aConfig ->getRadiatorConfiguration(); - - G4int CurNumPmts = NumPmtsOld; -// G4int CurNumPmts = RichTbPMTGeometryParameters::getNumPmts(); //TESTnumPmts - if (aRadiatorConfiguration == 2) CurNumPmts = NumPmtsWithHpd; - else if(aRadiatorConfiguration == 3) CurNumPmts = NumPmtsUpgrade15; -// else if(aRadiatorConfiguration == 3) CurNumPmts = RichTbPMTGeometryParameters::getNumPmtsUpgrade();//TESTnumPmts - - - RichTbSurfaceDefinition* rSurfaceDef= - RichTbSurfaceDefinition::getRichTbSurfaceDefinitionInstance(); - if(rSurfaceDef) G4cout<<" RichTb Surface definitions created "<<G4endl; - - InitializeRichTbGeometry(); - - - rTbHall = new RichTbHall(); - - rTbVessel = new RichTbUpgradeVessel(rTbHall ); - - rTbCrystalMaster = new RichTbUpgradeCrystalMaster(rTbVessel ); - - - if(aRadiatorConfiguration == 0){ - - rTbCrystal = new RichTbCrystal(rTbCrystalMaster ); - - rTbLens = new RichTbLens(rTbCrystalMaster ); - - rTbCrystalCover = new RichTbCrystalCover(rTbCrystalMaster ); - - } else{ - //Radiator + Mirror + Cover - rTbUpgradeRadiator = new RichTbUpgradeRadiator(rTbCrystalMaster); - rTbUpgradeMirror = new RichTbUpgradeMirror(rTbCrystalMaster, rTbUpgradeRadiator); - // rTbMirror = RichTbUpgradeMirror::getRichTbUpgradeMirrorInstance( rTbVessel ); - rTbUpgradeDarkCover = new RichTbUpgradeDarkCover(rTbUpgradeRadiator ); - - if(aRadiatorConfiguration == 3){ - rTbUpgradeDarkCover->constructRichTbUpgradeUpsDarkCoverEnvelope15(rTbCrystalMaster); - rTbUpgradeDarkCover->constructRichTbUpgradeSideDarkCoverEnvelope15(rTbCrystalMaster); - } else { - rTbUpgradeDarkCover->constructRichTbUpgradeUpsDarkCoverEnvelope(rTbCrystalMaster); - rTbUpgradeDarkCover->constructRichTbUpgradeSideDarkCoverEnvelope(rTbCrystalMaster); - } - - //Elementary Cells, PMT's and Support - rTbUpgradePhotSupFrame = new RichTbUpgradePhDetSupFrame(rTbCrystalMaster); - if(aRadiatorConfiguration == 1){ - rTbUpgradePhotSupFrame->constructRichTbPhotoDetectorSupFrame(); - }else if (aRadiatorConfiguration == 2) { - rTbUpgradePhotSupFrame->constructRichTbPhotoDetectorSupFrameWithHpd(); - }else if(aRadiatorConfiguration == 3) { - rTbUpgradePhotSupFrame->constructRichTbPhotoDetectorSupFrame15(); - } - - rTbEC = new RichTbUpgradeEC(rTbUpgradePhotSupFrame); - - if(aRadiatorConfiguration == 1){ - rTbEC->constructRichTbUpgradeEC(); - rTbEC->constructRichTbUpgradeECSupport(); - }else if(aRadiatorConfiguration == 2) { - rTbEC->constructRichTbUpgradeSingleEC(); - rTbEC->constructRichTbUpgradeSingleECSupport (); - }else if(aRadiatorConfiguration == 3) { - rTbEC->constructRichTbUpgradeEC15(); - rTbEC->constructRichTbUpgradeECSupport15(); - } - - - rTbPMT = new RichTbPMT( rTbEC ); - rTbPMT ->buildPMTGeometry(); - if( aRadiatorConfiguration == 2 ) { - rTbHpd = new RichTbHpd(0, rTbUpgradePhotSupFrame); - rTbHpd -> buildHpdGeometry(); - } - } - - //now for the surfaces +RichTbDetectorConstruction::RichTbDetectorConstruction() { ; } - rTbSurface = new RichTbSurface(this); +RichTbDetectorConstruction::~RichTbDetectorConstruction() { ; } - //sensitive detector creation for PMT +G4VPhysicalVolume *RichTbDetectorConstruction::Construct() { - G4SDManager* SDman = G4SDManager::GetSDMpointer(); + // now create all the materials and surface properties. + // RichTbMaterial* rMaterial = RichTbMaterial::getRichTbMaterialInstance(); + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); + G4int aRadiatorConfiguration = aConfig->getRadiatorConfiguration(); + G4int CurNumPmts = NumPmtsOld; + // G4int CurNumPmts = RichTbPMTGeometryParameters::getNumPmts(); //TESTnumPmts + if (aRadiatorConfiguration == 2) + CurNumPmts = NumPmtsWithHpd; + else if (aRadiatorConfiguration == 3) + CurNumPmts = NumPmtsUpgrade15; + // else if(aRadiatorConfiguration == 3) CurNumPmts = RichTbPMTGeometryParameters::getNumPmtsUpgrade();//TESTnumPmts - RichTbUpgradeSD* PMTSD = new RichTbUpgradeSD( PMTSDname ); + RichTbSurfaceDefinition *rSurfaceDef = RichTbSurfaceDefinition::getRichTbSurfaceDefinitionInstance(); + if (rSurfaceDef) + G4cout << " RichTb Surface definitions created " << G4endl; + InitializeRichTbGeometry(); - //sensitive detector creation for HPD - RichTbUpgradeHpdSD* HPDSD = (aRadiatorConfiguration == 2) ? new RichTbUpgradeHpdSD(HPDSDname):0; + rTbHall = new RichTbHall(); + rTbVessel = new RichTbUpgradeVessel(rTbHall); + rTbCrystalMaster = new RichTbUpgradeCrystalMaster(rTbVessel); - // now for the readout Geometry. + if (aRadiatorConfiguration == 0) { - G4cout<< " Now for readout geometry in Pmt "<<G4endl; + rTbCrystal = new RichTbCrystal(rTbCrystalMaster); - rTbROGeom = new RichTbROGeometry( ROgeometryName, this); + rTbLens = new RichTbLens(rTbCrystalMaster); - rTbROGeom -> BuildROGeometry(); - PMTSD->SetROgeometry(rTbROGeom); - SDman->AddNewDetector( PMTSD ); - G4cout<< " Now associate sensdet to readout geometry in Pmt "<<G4endl; - //begin test - G4int HCID = G4SDManager::GetSDMpointer()->GetCollectionID (RichTbHColname); - G4cout<< " Now associate sensdet to readout geometry in Pmt "<< HCID << G4endl; - // end test - // Associate the anode of each pmt to the sensitive detector. - for(G4int ipmt=0; ipmt< CurNumPmts; ipmt++) { + rTbCrystalCover = new RichTbCrystalCover(rTbCrystalMaster); - G4LogicalVolume* RichTbPmtAnode_LV = rTbPMT->getRichTbPMTAnodeLVol() [ipmt]; - RichTbPmtAnode_LV ->SetSensitiveDetector( PMTSD ); - G4cout<<"associate pmtsd to sensdet "<<RichTbPmtAnode_LV->GetName()<<" "<< ipmt<<G4endl; + } else { + // Radiator + Mirror + Cover + rTbUpgradeRadiator = new RichTbUpgradeRadiator(rTbCrystalMaster); + rTbUpgradeMirror = new RichTbUpgradeMirror(rTbCrystalMaster, rTbUpgradeRadiator); + // rTbMirror = RichTbUpgradeMirror::getRichTbUpgradeMirrorInstance( rTbVessel ); + rTbUpgradeDarkCover = new RichTbUpgradeDarkCover(rTbUpgradeRadiator); - } + if (aRadiatorConfiguration == 3) { + rTbUpgradeDarkCover->constructRichTbUpgradeUpsDarkCoverEnvelope15(rTbCrystalMaster); + rTbUpgradeDarkCover->constructRichTbUpgradeSideDarkCoverEnvelope15(rTbCrystalMaster); + } else { + rTbUpgradeDarkCover->constructRichTbUpgradeUpsDarkCoverEnvelope(rTbCrystalMaster); + rTbUpgradeDarkCover->constructRichTbUpgradeSideDarkCoverEnvelope(rTbCrystalMaster); + } - // Now for the HPD sensitive detector - if( aRadiatorConfiguration == 2 ) { - if( HPDSD ) { - G4cout<< " Now for readout geometry in hpd "<<G4endl; + // Elementary Cells, PMT's and Support + rTbUpgradePhotSupFrame = new RichTbUpgradePhDetSupFrame(rTbCrystalMaster); + if (aRadiatorConfiguration == 1) { + rTbUpgradePhotSupFrame->constructRichTbPhotoDetectorSupFrame(); + } else if (aRadiatorConfiguration == 2) { + rTbUpgradePhotSupFrame->constructRichTbPhotoDetectorSupFrameWithHpd(); + } else if (aRadiatorConfiguration == 3) { + rTbUpgradePhotSupFrame->constructRichTbPhotoDetectorSupFrame15(); + } - // now for the hpd readout - rTbROGeomHpd = new RichTbROGeometryHpd( ROgeometryNameHpd, this); - rTbROGeomHpd -> BuildROGeometry(); + rTbEC = new RichTbUpgradeEC(rTbUpgradePhotSupFrame); - HPDSD ->SetROgeometry( rTbROGeomHpd); - SDman->AddNewDetector( HPDSD ); + if (aRadiatorConfiguration == 1) { + rTbEC->constructRichTbUpgradeEC(); + rTbEC->constructRichTbUpgradeECSupport(); + } else if (aRadiatorConfiguration == 2) { + rTbEC->constructRichTbUpgradeSingleEC(); + rTbEC->constructRichTbUpgradeSingleECSupport(); + } else if (aRadiatorConfiguration == 3) { + rTbEC->constructRichTbUpgradeEC15(); + rTbEC->constructRichTbUpgradeECSupport15(); + } - G4cout<<"associate hpdsd to sensdet " << G4endl; - //begin test - G4int numberOfCollections = HPDSD->GetNumberOfCollections(); - G4cout<<"hpdsd test "<< numberOfCollections<<" " - << HPDSD ->GetName() <<" "<< HPDSD->GetCollectionName(0) <<G4endl; + rTbPMT = new RichTbPMT(rTbEC); + rTbPMT->buildPMTGeometry(); + if (aRadiatorConfiguration == 2) { + rTbHpd = new RichTbHpd(0, rTbUpgradePhotSupFrame); + rTbHpd->buildHpdGeometry(); + } + } + // now for the surfaces + rTbSurface = new RichTbSurface(this); - G4int HCIDHA = G4SDManager::GetSDMpointer()->GetCollectionID (RichTbHColnameHpd); + // sensitive detector creation for PMT - G4cout<< "associated hpdsd to sensdet A "<< HCIDHA << G4endl; - // end test + G4SDManager *SDman = G4SDManager::GetSDMpointer(); - G4LogicalVolume* RichTbHpdAnode_LV = rTbHpd ->getRichTbHpdSiDetLVol(); - RichTbHpdAnode_LV -> SetSensitiveDetector( HPDSD ); - G4cout<<"associated hpdsd to sensdet "<<RichTbHpdAnode_LV->GetName()<<" "<<G4endl; + RichTbUpgradeSD *PMTSD = new RichTbUpgradeSD(PMTSDname); - //begin test - G4int HCIDH = G4SDManager::GetSDMpointer()->GetCollectionID (RichTbHColnameHpd); + // sensitive detector creation for HPD + RichTbUpgradeHpdSD *HPDSD = (aRadiatorConfiguration == 2) ? new RichTbUpgradeHpdSD(HPDSDname) : 0; - G4cout<< "associated hpdsd to sensdet "<< HCIDH << G4endl; - // end test + // now for the readout Geometry. + G4cout << " Now for readout geometry in Pmt " << G4endl; - } + rTbROGeom = new RichTbROGeometry(ROgeometryName, this); + rTbROGeom->BuildROGeometry(); + PMTSD->SetROgeometry(rTbROGeom); + SDman->AddNewDetector(PMTSD); + G4cout << " Now associate sensdet to readout geometry in Pmt " << G4endl; + // begin test + G4int HCID = G4SDManager::GetSDMpointer()->GetCollectionID(RichTbHColname); + G4cout << " Now associate sensdet to readout geometry in Pmt " << HCID << G4endl; + // end test + // Associate the anode of each pmt to the sensitive detector. + for (G4int ipmt = 0; ipmt < CurNumPmts; ipmt++) { - } + G4LogicalVolume *RichTbPmtAnode_LV = rTbPMT->getRichTbPMTAnodeLVol()[ipmt]; + RichTbPmtAnode_LV->SetSensitiveDetector(PMTSD); + G4cout << "associate pmtsd to sensdet " << RichTbPmtAnode_LV->GetName() << " " << ipmt << G4endl; + } + // Now for the HPD sensitive detector + if (aRadiatorConfiguration == 2) { + if (HPDSD) { + G4cout << " Now for readout geometry in hpd " << G4endl; - // Now for the graphics setups. - RichTbGraphics* rTbGraphics = new RichTbGraphics(this); - if( rTbGraphics) G4cout<<" Graphics definitions created "<<G4endl; + // now for the hpd readout + rTbROGeomHpd = new RichTbROGeometryHpd(ROgeometryNameHpd, this); + rTbROGeomHpd->BuildROGeometry(); + HPDSD->SetROgeometry(rTbROGeomHpd); + SDman->AddNewDetector(HPDSD); + + G4cout << "associate hpdsd to sensdet " << G4endl; + // begin test + G4int numberOfCollections = HPDSD->GetNumberOfCollections(); + G4cout << "hpdsd test " << numberOfCollections << " " << HPDSD->GetName() << " " + << HPDSD->GetCollectionName(0) << G4endl; + + G4int HCIDHA = G4SDManager::GetSDMpointer()->GetCollectionID(RichTbHColnameHpd); + + G4cout << "associated hpdsd to sensdet A " << HCIDHA << G4endl; + // end test + + G4LogicalVolume *RichTbHpdAnode_LV = rTbHpd->getRichTbHpdSiDetLVol(); + RichTbHpdAnode_LV->SetSensitiveDetector(HPDSD); + G4cout << "associated hpdsd to sensdet " << RichTbHpdAnode_LV->GetName() << " " << G4endl; + + // begin test + G4int HCIDH = G4SDManager::GetSDMpointer()->GetCollectionID(RichTbHColnameHpd); + + G4cout << "associated hpdsd to sensdet " << HCIDH << G4endl; + // end test + } + } + + // Now for the graphics setups. + RichTbGraphics *rTbGraphics = new RichTbGraphics(this); + if (rTbGraphics) + G4cout << " Graphics definitions created " << G4endl; - return rTbHall->getRichTbHallPhysicalVolume(); + return rTbHall->getRichTbHallPhysicalVolume(); } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeEC.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeEC.cc index e24645e437568055b5387b865623db378fb3d726..7ec4de7b9be37a12e0dced7c1f2bbd4a3518b517 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeEC.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeEC.cc @@ -1,18 +1,16 @@ // Include files -#include "RichTbGeometryParameters.hh" -#include "RichTbMiscNames.hh" -#include "RichTbMaterial.hh" +#include "Geant4/G4Box.hh" +#include "Geant4/G4PVPlacement.hh" #include "Geant4/G4RotationMatrix.hh" +#include "Geant4/G4SubtractionSolid.hh" #include "Geant4/G4ThreeVector.hh" #include "Geant4/G4Transform3D.hh" -#include "Geant4/G4SubtractionSolid.hh" -#include "Geant4/G4Box.hh" -#include "Geant4/G4PVPlacement.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbMaterial.hh" +#include "RichTbMiscNames.hh" #include "RichTbRunConfig.hh" - - // local #include "RichTbUpgradeEC.hh" @@ -26,13 +24,11 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbUpgradeEC::RichTbUpgradeEC(RichTbUpgradePhDetSupFrame * rTbPhotSupFrame ) { - - aRTbPhotSupFrame = rTbPhotSupFrame ; - // constructRichTbUpgradeEC (); - // constructRichTbUpgradeECSupport (); - +RichTbUpgradeEC::RichTbUpgradeEC(RichTbUpgradePhDetSupFrame *rTbPhotSupFrame) { + aRTbPhotSupFrame = rTbPhotSupFrame; + // constructRichTbUpgradeEC (); + // constructRichTbUpgradeECSupport (); } //============================================================================= // Destructor @@ -40,166 +36,149 @@ RichTbUpgradeEC::RichTbUpgradeEC(RichTbUpgradePhDetSupFrame * rTbPhotSupFrame RichTbUpgradeEC::~RichTbUpgradeEC() {} //============================================================================= -void RichTbUpgradeEC::constructRichTbUpgradeEC () { - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - G4Box * ECBox = new G4Box("ECBox", 0.5*ECXSize,0.5*ECYSize, 0.5*ECZSize); - G4RotationMatrix ECBoxRotX, ECBoxRotY; - G4ThreeVector ECPosLeft(ECXLocation ,ECYLocation ,ECZLocation); - G4ThreeVector ECPosRight(ECXLocation ,ECYLocation ,ECZLocation); - G4Transform3D ECTransformLeft( ECBoxRotX*ECBoxRotY, ECPosLeft); - G4Transform3D ECTransformRight( ECBoxRotX*ECBoxRotY, ECPosRight); - - G4LogicalVolume* ECLogLeft = new G4LogicalVolume( ECBox, aMaterial->getNitrogenGas(), - "ECLeftLog", 0,0,0); - G4LogicalVolume* ECLogRight = new G4LogicalVolume( ECBox, aMaterial->getNitrogenGas(), - "ECRightLog", 0,0,0); - G4VPhysicalVolume* ECPhysLeft = new G4PVPlacement(ECTransformLeft, "ECLeftPhys", - ECLogLeft, aRTbPhotSupFrame->getRichTbPhDetSupFrameLeftPVol(),false,0); - - G4VPhysicalVolume* ECPhysRight = new G4PVPlacement(ECTransformRight, "ECRightPhys", - ECLogRight, aRTbPhotSupFrame->getRichTbPhDetSupFrameRightPVol(),false,1); - - - RichTbECLeftLVol = ECLogLeft; - RichTbECRightLVol = ECLogRight; - RichTbECLeftPVol = ECPhysLeft; - RichTbECRightPVol = ECPhysRight; - +void RichTbUpgradeEC::constructRichTbUpgradeEC() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + G4Box *ECBox = new G4Box("ECBox", 0.5 * ECXSize, 0.5 * ECYSize, 0.5 * ECZSize); + G4RotationMatrix ECBoxRotX, ECBoxRotY; + G4ThreeVector ECPosLeft(ECXLocation, ECYLocation, ECZLocation); + G4ThreeVector ECPosRight(ECXLocation, ECYLocation, ECZLocation); + G4Transform3D ECTransformLeft(ECBoxRotX * ECBoxRotY, ECPosLeft); + G4Transform3D ECTransformRight(ECBoxRotX * ECBoxRotY, ECPosRight); + + G4LogicalVolume *ECLogLeft = new G4LogicalVolume(ECBox, aMaterial->getNitrogenGas(), "ECLeftLog", 0, 0, 0); + G4LogicalVolume *ECLogRight = new G4LogicalVolume(ECBox, aMaterial->getNitrogenGas(), "ECRightLog", 0, 0, 0); + G4VPhysicalVolume *ECPhysLeft = new G4PVPlacement(ECTransformLeft, "ECLeftPhys", ECLogLeft, + aRTbPhotSupFrame->getRichTbPhDetSupFrameLeftPVol(), false, 0); + + G4VPhysicalVolume *ECPhysRight = new G4PVPlacement(ECTransformRight, "ECRightPhys", ECLogRight, + aRTbPhotSupFrame->getRichTbPhDetSupFrameRightPVol(), false, 1); + + RichTbECLeftLVol = ECLogLeft; + RichTbECRightLVol = ECLogRight; + RichTbECLeftPVol = ECPhysLeft; + RichTbECRightPVol = ECPhysRight; } -void RichTbUpgradeEC::constructRichTbUpgradeECSupport () { - - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - G4Box * ECSupBox = new G4Box("ECBox", 0.5*ECSupportXSize,0.5*ECSupportYSize, 0.5*ECSupportZSize); - - G4ThreeVector ECSupPos(ECXLocation ,ECYLocation , ECSupportZLocation); +void RichTbUpgradeEC::constructRichTbUpgradeECSupport() { - G4RotationMatrix ECSupportBoxRot; - G4Transform3D ECSupTransform( ECSupportBoxRot, ECSupPos); - G4LogicalVolume* ECSupLog = new G4LogicalVolume( ECSupBox, aMaterial->getCarbon(), - "ECSupLog", 0,0,0); + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + G4Box *ECSupBox = new G4Box("ECBox", 0.5 * ECSupportXSize, 0.5 * ECSupportYSize, 0.5 * ECSupportZSize); - G4VPhysicalVolume* ECSupPhysLeft = new G4PVPlacement(ECSupTransform, "ECSupLeftPhys", - ECSupLog, aRTbPhotSupFrame->getRichTbPhDetSupFrameLeftPVol(),false,0); + G4ThreeVector ECSupPos(ECXLocation, ECYLocation, ECSupportZLocation); - G4VPhysicalVolume* ECSupPhysRight = new G4PVPlacement(ECSupTransform, "ECSupRightPhys", - ECSupLog, aRTbPhotSupFrame->getRichTbPhDetSupFrameRightPVol(),false,0); + G4RotationMatrix ECSupportBoxRot; + G4Transform3D ECSupTransform(ECSupportBoxRot, ECSupPos); + G4LogicalVolume *ECSupLog = new G4LogicalVolume(ECSupBox, aMaterial->getCarbon(), "ECSupLog", 0, 0, 0); - RichTbECSupLVol = ECSupLog ; - RichTbECSupLeftPVol = ECSupPhysLeft; - RichTbECSupRightPVol = ECSupPhysRight; + G4VPhysicalVolume *ECSupPhysLeft = new G4PVPlacement(ECSupTransform, "ECSupLeftPhys", ECSupLog, + aRTbPhotSupFrame->getRichTbPhDetSupFrameLeftPVol(), false, 0); + G4VPhysicalVolume *ECSupPhysRight = new G4PVPlacement(ECSupTransform, "ECSupRightPhys", ECSupLog, + aRTbPhotSupFrame->getRichTbPhDetSupFrameRightPVol(), false, 0); + RichTbECSupLVol = ECSupLog; + RichTbECSupLeftPVol = ECSupPhysLeft; + RichTbECSupRightPVol = ECSupPhysRight; } -void RichTbUpgradeEC::constructRichTbUpgradeSingleEC () { - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - G4Box * ECBox = new G4Box("ECBox", 0.5*ECXSize,0.5*ECYSize, 0.5*ECZSize); - G4RotationMatrix ECBoxRotX, ECBoxRotY; - G4ThreeVector ECPosLeft(ECXLocation ,ECYLocation ,ECZLocation); - G4Transform3D ECTransformLeft( ECBoxRotX*ECBoxRotY, ECPosLeft); - - G4LogicalVolume* ECLogLeft = new G4LogicalVolume( ECBox, aMaterial->getNitrogenGas(), - "ECLeftLog", 0,0,0); - G4VPhysicalVolume* ECPhysLeft = new G4PVPlacement(ECTransformLeft, "ECLeftPhys", - ECLogLeft, aRTbPhotSupFrame->getRichTbPhDetSupFrameLeftPVol(),false,0); - - - - RichTbECLeftLVol = ECLogLeft; - RichTbECLeftPVol = ECPhysLeft; - +void RichTbUpgradeEC::constructRichTbUpgradeSingleEC() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + G4Box *ECBox = new G4Box("ECBox", 0.5 * ECXSize, 0.5 * ECYSize, 0.5 * ECZSize); + G4RotationMatrix ECBoxRotX, ECBoxRotY; + G4ThreeVector ECPosLeft(ECXLocation, ECYLocation, ECZLocation); + G4Transform3D ECTransformLeft(ECBoxRotX * ECBoxRotY, ECPosLeft); + + G4LogicalVolume *ECLogLeft = new G4LogicalVolume(ECBox, aMaterial->getNitrogenGas(), "ECLeftLog", 0, 0, 0); + G4VPhysicalVolume *ECPhysLeft = new G4PVPlacement(ECTransformLeft, "ECLeftPhys", ECLogLeft, + aRTbPhotSupFrame->getRichTbPhDetSupFrameLeftPVol(), false, 0); + + RichTbECLeftLVol = ECLogLeft; + RichTbECLeftPVol = ECPhysLeft; } -void RichTbUpgradeEC::constructRichTbUpgradeSingleECSupport () { - - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - G4Box * ECSupBox = new G4Box("ECBox", 0.5*ECSupportXSize,0.5*ECSupportYSize, 0.5*ECSupportZSize); - - G4ThreeVector ECSupPos(ECXLocation ,ECYLocation , ECSupportZLocation); +void RichTbUpgradeEC::constructRichTbUpgradeSingleECSupport() { - G4RotationMatrix ECSupportBoxRot; - G4Transform3D ECSupTransform( ECSupportBoxRot, ECSupPos); - G4LogicalVolume* ECSupLog = new G4LogicalVolume( ECSupBox, aMaterial->getCarbon(), - "ECSupLog", 0,0,0); + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + G4Box *ECSupBox = new G4Box("ECBox", 0.5 * ECSupportXSize, 0.5 * ECSupportYSize, 0.5 * ECSupportZSize); - G4VPhysicalVolume* ECSupPhysLeft = new G4PVPlacement(ECSupTransform, "ECSupLeftPhys", - ECSupLog, aRTbPhotSupFrame->getRichTbPhDetSupFrameLeftPVol(),false,0); - - - RichTbECSupLVol = ECSupLog ; - RichTbECSupLeftPVol = ECSupPhysLeft; + G4ThreeVector ECSupPos(ECXLocation, ECYLocation, ECSupportZLocation); + G4RotationMatrix ECSupportBoxRot; + G4Transform3D ECSupTransform(ECSupportBoxRot, ECSupPos); + G4LogicalVolume *ECSupLog = new G4LogicalVolume(ECSupBox, aMaterial->getCarbon(), "ECSupLog", 0, 0, 0); + G4VPhysicalVolume *ECSupPhysLeft = new G4PVPlacement(ECSupTransform, "ECSupLeftPhys", ECSupLog, + aRTbPhotSupFrame->getRichTbPhDetSupFrameLeftPVol(), false, 0); + RichTbECSupLVol = ECSupLog; + RichTbECSupLeftPVol = ECSupPhysLeft; } void RichTbUpgradeEC::constructRichTbUpgradeEC15() { - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - G4Box * ECBox = new G4Box("ECBox", 0.5*ECXSize,0.5*ECYSize, 0.5*ECZSize); - G4RotationMatrix ECBoxRotX, ECBoxRotY; - G4ThreeVector ECPosLeft(ECXLocation15,ECYLocation15,ECZLocation15); - G4ThreeVector ECPosRight(ECXLocation15,ECYLocation15,ECZLocation15); - G4ThreeVector ECPosBottomLeft(ECXLocation15,ECYLocation15,ECZLocation15); - G4ThreeVector ECPosBottomRight(ECXLocation15,ECYLocation15,ECZLocation15); - G4Transform3D ECTransformLeft(ECBoxRotX*ECBoxRotY,ECPosLeft); - G4Transform3D ECTransformRight(ECBoxRotX*ECBoxRotY,ECPosRight); - G4Transform3D ECTransformBottomLeft(ECBoxRotX*ECBoxRotY,ECPosBottomLeft); - G4Transform3D ECTransformBottomRight(ECBoxRotX*ECBoxRotY,ECPosBottomRight); - - G4LogicalVolume* ECLogLeft = new G4LogicalVolume( ECBox, aMaterial->getNitrogenGas(), - "ECLeftLog", 0,0,0); - G4LogicalVolume* ECLogRight = new G4LogicalVolume( ECBox, aMaterial->getNitrogenGas(), - "ECRightLog", 0,0,0); - G4LogicalVolume* ECLogBottomLeft = new G4LogicalVolume(ECBox, aMaterial->getNitrogenGas(), - "ECBottomLeftLog", 0,0,0); - G4LogicalVolume* ECLogBottomRight = new G4LogicalVolume(ECBox, aMaterial->getNitrogenGas(), - "ECBottomRightLog", 0,0,0); - - G4VPhysicalVolume* ECPhysLeft = new G4PVPlacement(ECTransformLeft, "ECLeftPhys", - ECLogLeft, aRTbPhotSupFrame->getRichTbPhDetSupFrameLeftPVol(),false,0); - G4VPhysicalVolume* ECPhysRight = new G4PVPlacement(ECTransformRight, "ECRightPhys", - ECLogRight, aRTbPhotSupFrame->getRichTbPhDetSupFrameRightPVol(),false,1); - G4VPhysicalVolume* ECPhysBottomLeft = new G4PVPlacement(ECTransformBottomLeft, "ECBottomLeftPhys", - ECLogBottomLeft, aRTbPhotSupFrame->getRichTbPhDetSupFrameBottomLeftPVol(),false,2); - G4VPhysicalVolume* ECPhysBottomRight = new G4PVPlacement(ECTransformBottomRight, "ECRBottomightPhys", - ECLogBottomRight, aRTbPhotSupFrame->getRichTbPhDetSupFrameBottomRightPVol(),false,3); - - - RichTbECLeftLVol = ECLogLeft; - RichTbECRightLVol = ECLogRight; - RichTbECBottomLeftLVol = ECLogBottomLeft; - RichTbECBottomRightLVol = ECLogBottomRight; - - RichTbECLeftPVol = ECPhysLeft; - RichTbECRightPVol = ECPhysRight; - RichTbECBottomLeftPVol = ECPhysBottomLeft; - RichTbECBottomRightPVol = ECPhysBottomRight; - + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + G4Box *ECBox = new G4Box("ECBox", 0.5 * ECXSize, 0.5 * ECYSize, 0.5 * ECZSize); + G4RotationMatrix ECBoxRotX, ECBoxRotY; + G4ThreeVector ECPosLeft(ECXLocation15, ECYLocation15, ECZLocation15); + G4ThreeVector ECPosRight(ECXLocation15, ECYLocation15, ECZLocation15); + G4ThreeVector ECPosBottomLeft(ECXLocation15, ECYLocation15, ECZLocation15); + G4ThreeVector ECPosBottomRight(ECXLocation15, ECYLocation15, ECZLocation15); + G4Transform3D ECTransformLeft(ECBoxRotX * ECBoxRotY, ECPosLeft); + G4Transform3D ECTransformRight(ECBoxRotX * ECBoxRotY, ECPosRight); + G4Transform3D ECTransformBottomLeft(ECBoxRotX * ECBoxRotY, ECPosBottomLeft); + G4Transform3D ECTransformBottomRight(ECBoxRotX * ECBoxRotY, ECPosBottomRight); + + G4LogicalVolume *ECLogLeft = new G4LogicalVolume(ECBox, aMaterial->getNitrogenGas(), "ECLeftLog", 0, 0, 0); + G4LogicalVolume *ECLogRight = new G4LogicalVolume(ECBox, aMaterial->getNitrogenGas(), "ECRightLog", 0, 0, 0); + G4LogicalVolume *ECLogBottomLeft = + new G4LogicalVolume(ECBox, aMaterial->getNitrogenGas(), "ECBottomLeftLog", 0, 0, 0); + G4LogicalVolume *ECLogBottomRight = + new G4LogicalVolume(ECBox, aMaterial->getNitrogenGas(), "ECBottomRightLog", 0, 0, 0); + + G4VPhysicalVolume *ECPhysLeft = new G4PVPlacement(ECTransformLeft, "ECLeftPhys", ECLogLeft, + aRTbPhotSupFrame->getRichTbPhDetSupFrameLeftPVol(), false, 0); + G4VPhysicalVolume *ECPhysRight = new G4PVPlacement(ECTransformRight, "ECRightPhys", ECLogRight, + aRTbPhotSupFrame->getRichTbPhDetSupFrameRightPVol(), false, 1); + G4VPhysicalVolume *ECPhysBottomLeft = + new G4PVPlacement(ECTransformBottomLeft, "ECBottomLeftPhys", ECLogBottomLeft, + aRTbPhotSupFrame->getRichTbPhDetSupFrameBottomLeftPVol(), false, 2); + G4VPhysicalVolume *ECPhysBottomRight = + new G4PVPlacement(ECTransformBottomRight, "ECRBottomightPhys", ECLogBottomRight, + aRTbPhotSupFrame->getRichTbPhDetSupFrameBottomRightPVol(), false, 3); + + RichTbECLeftLVol = ECLogLeft; + RichTbECRightLVol = ECLogRight; + RichTbECBottomLeftLVol = ECLogBottomLeft; + RichTbECBottomRightLVol = ECLogBottomRight; + + RichTbECLeftPVol = ECPhysLeft; + RichTbECRightPVol = ECPhysRight; + RichTbECBottomLeftPVol = ECPhysBottomLeft; + RichTbECBottomRightPVol = ECPhysBottomRight; } void RichTbUpgradeEC::constructRichTbUpgradeECSupport15() { - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - G4Box * ECSupBox = new G4Box("ECBox", 0.5*ECSupportXSize,0.5*ECSupportYSize, 0.5*ECSupportZSize); - - G4ThreeVector ECSupPos(ECSupportXLocation15 ,ECSupportYLocation15 , ECSupportZLocation15); - G4ThreeVector ECSupPosBottom(ECSupportXLocation15 ,ECSupportYLocation15 , ECSupportZLocation15); - - G4RotationMatrix ECSupportBoxRot; - G4Transform3D ECSupTransform( ECSupportBoxRot, ECSupPos); - G4Transform3D ECSupTransformBottom( ECSupportBoxRot, ECSupPos); - G4LogicalVolume* ECSupLog = new G4LogicalVolume( ECSupBox, aMaterial->getCarbon(), - "ECSupLog", 0,0,0); - - G4VPhysicalVolume* ECSupPhysLeft = new G4PVPlacement(ECSupTransform, "ECSupLeftPhys", - ECSupLog, aRTbPhotSupFrame->getRichTbPhDetSupFrameLeftPVol(),false,0); - G4VPhysicalVolume* ECSupPhysRight = new G4PVPlacement(ECSupTransform, "ECSupRightPhys", - ECSupLog, aRTbPhotSupFrame->getRichTbPhDetSupFrameRightPVol(),false,1); - - G4VPhysicalVolume* ECSupPhysBottomLeft = new G4PVPlacement(ECSupTransformBottom, "ECSupBottomLeftPhys", - ECSupLog, aRTbPhotSupFrame->getRichTbPhDetSupFrameBottomLeftPVol(),false,2); - G4VPhysicalVolume* ECSupPhysBottomRight = new G4PVPlacement(ECSupTransformBottom, "ECSupBottomRightPhys", - ECSupLog, aRTbPhotSupFrame->getRichTbPhDetSupFrameBottomRightPVol(),false,3); - - RichTbECSupLVol = ECSupLog ; - RichTbECSupLeftPVol = ECSupPhysLeft; - RichTbECSupRightPVol = ECSupPhysRight; - RichTbECSupBottomLeftPVol = ECSupPhysBottomLeft; - RichTbECSupBottomRightPVol = ECSupPhysBottomRight; + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + G4Box *ECSupBox = new G4Box("ECBox", 0.5 * ECSupportXSize, 0.5 * ECSupportYSize, 0.5 * ECSupportZSize); + + G4ThreeVector ECSupPos(ECSupportXLocation15, ECSupportYLocation15, ECSupportZLocation15); + G4ThreeVector ECSupPosBottom(ECSupportXLocation15, ECSupportYLocation15, ECSupportZLocation15); + + G4RotationMatrix ECSupportBoxRot; + G4Transform3D ECSupTransform(ECSupportBoxRot, ECSupPos); + G4Transform3D ECSupTransformBottom(ECSupportBoxRot, ECSupPos); + G4LogicalVolume *ECSupLog = new G4LogicalVolume(ECSupBox, aMaterial->getCarbon(), "ECSupLog", 0, 0, 0); + + G4VPhysicalVolume *ECSupPhysLeft = new G4PVPlacement(ECSupTransform, "ECSupLeftPhys", ECSupLog, + aRTbPhotSupFrame->getRichTbPhDetSupFrameLeftPVol(), false, 0); + G4VPhysicalVolume *ECSupPhysRight = new G4PVPlacement(ECSupTransform, "ECSupRightPhys", ECSupLog, + aRTbPhotSupFrame->getRichTbPhDetSupFrameRightPVol(), false, 1); + + G4VPhysicalVolume *ECSupPhysBottomLeft = + new G4PVPlacement(ECSupTransformBottom, "ECSupBottomLeftPhys", ECSupLog, + aRTbPhotSupFrame->getRichTbPhDetSupFrameBottomLeftPVol(), false, 2); + G4VPhysicalVolume *ECSupPhysBottomRight = + new G4PVPlacement(ECSupTransformBottom, "ECSupBottomRightPhys", ECSupLog, + aRTbPhotSupFrame->getRichTbPhDetSupFrameBottomRightPVol(), false, 3); + + RichTbECSupLVol = ECSupLog; + RichTbECSupLeftPVol = ECSupPhysLeft; + RichTbECSupRightPVol = ECSupPhysRight; + RichTbECSupBottomLeftPVol = ECSupPhysBottomLeft; + RichTbECSupBottomRightPVol = ECSupPhysBottomRight; } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeLens.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeLens.cc index dede1b25f69b80f621b73bab7ae2f629fef75465..631a38decf161f3df0cb496407ac280a0bb9d4a1 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeLens.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeLens.cc @@ -1,25 +1,23 @@ // $Id: $ // Include files - - // local -#include "RichTbGeometryParameters.hh" -#include "RichTbMiscNames.hh" -#include "RichTbMaterial.hh" -#include "RichTbUpgradeVessel.hh" #include "RichTbUpgradeLens.hh" -#include "RichTbHall.hh" +#include "Geant4/G4Box.hh" +#include "Geant4/G4LogicalVolume.hh" +#include "Geant4/G4Orb.hh" +#include "Geant4/G4PVPlacement.hh" #include "Geant4/G4RotationMatrix.hh" +#include "Geant4/G4SubtractionSolid.hh" #include "Geant4/G4ThreeVector.hh" #include "Geant4/G4Transform3D.hh" -#include "Geant4/G4SubtractionSolid.hh" -#include "Geant4/G4Box.hh" -#include "Geant4/G4Orb.hh" -#include "Geant4/G4LogicalVolume.hh" #include "Geant4/G4VPhysicalVolume.hh" -#include "Geant4/G4PVPlacement.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbHall.hh" +#include "RichTbMaterial.hh" +#include "RichTbMiscNames.hh" #include "RichTbRunConfig.hh" +#include "RichTbUpgradeVessel.hh" //----------------------------------------------------------------------------- // Implementation file for class : RichTbVessel @@ -31,63 +29,46 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbLens::RichTbLens(RichTbUpgradeCrystalMaster* rTbCrystalMaster ) { +RichTbLens::RichTbLens(RichTbUpgradeCrystalMaster *rTbCrystalMaster) { aRTbCrystalMaster = rTbCrystalMaster; constructRichTbLens(); - } -RichTbLens::~RichTbLens( ) -{ -} -void RichTbLens::constructRichTbLens() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); +RichTbLens::~RichTbLens() {} +void RichTbLens::constructRichTbLens() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); // RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); + G4Orb *Sph1 = new G4Orb("Sph1", SphRadius1); - G4Orb * Sph1 = new G4Orb("Sph1", SphRadius1); - - G4Orb * Sph2 = new G4Orb("Sph2", SphRadius2); + G4Orb *Sph2 = new G4Orb("Sph2", SphRadius2); // G4int aSpecialStudyCrystalRotFlag = // aConfig ->getSpecialStudyCrystalRotation(); - - - - G4double RichTbSph2XLocation, RichTbSph2YLocation, RichTbSph2ZLocation; - RichTbSph2XLocation = 0.0*CLHEP::mm; - RichTbSph2YLocation = 0.0*CLHEP::mm; + RichTbSph2XLocation = 0.0 * CLHEP::mm; + RichTbSph2YLocation = 0.0 * CLHEP::mm; RichTbSph2ZLocation = DistanceSph; - G4cout << "distance " << RichTbSph2ZLocation << G4endl; + G4cout << "distance " << RichTbSph2ZLocation << G4endl; - G4ThreeVector Sph2Pos(RichTbSph2XLocation, - RichTbSph2YLocation, - RichTbSph2ZLocation); + G4ThreeVector Sph2Pos(RichTbSph2XLocation, RichTbSph2YLocation, RichTbSph2ZLocation); G4RotationMatrix Sph2RotX, Sph2RotY; + G4Transform3D Sph2Transform(Sph2RotX * Sph2RotY, Sph2Pos); + G4SubtractionSolid *A = new G4SubtractionSolid("A", Sph1, Sph2, Sph2Transform); - G4Transform3D Sph2Transform(Sph2RotX * Sph2RotY,Sph2Pos); - - G4SubtractionSolid* A = - new G4SubtractionSolid("A", Sph1, Sph2, Sph2Transform); - - G4ThreeVector APos( 0.0*CLHEP::mm, - 0.0*CLHEP::mm, - 0.0*CLHEP::mm); + G4ThreeVector APos(0.0 * CLHEP::mm, 0.0 * CLHEP::mm, 0.0 * CLHEP::mm); G4RotationMatrix ARotX, ARotY; G4Transform3D ATransform(ARotX * ARotY, APos); - G4SubtractionSolid* Lens = - new G4SubtractionSolid("Lens", Sph2, A, ATransform); + G4SubtractionSolid *Lens = new G4SubtractionSolid("Lens", Sph2, A, ATransform); /* G4Box* C = new G4Box("CBox", 0.5*CBoxXSize, 0.5*CBoxYSize, 0.5*CBoxZSize); @@ -102,9 +83,7 @@ void RichTbLens::constructRichTbLens() new G4SubtractionSolid("Lens", B, C, ATransform); */ - G4ThreeVector LensPos(RichTbLensXLocation, - RichTbLensYLocation, - RichTbLensZLocation); + G4ThreeVector LensPos(RichTbLensXLocation, RichTbLensYLocation, RichTbLensZLocation); G4RotationMatrix LensRotX, LensRotY; /* @@ -117,32 +96,20 @@ void RichTbLens::constructRichTbLens() */ - G4Transform3D LensTransform( LensRotX * LensRotY, LensPos); - - - G4LogicalVolume* LensLog; + G4Transform3D LensTransform(LensRotX * LensRotY, LensPos); + G4LogicalVolume *LensLog; - //lens logical volume - LensLog = - new G4LogicalVolume(Lens, - aMaterial->getPMTQuartzWindowMaterial(), "LensLog",0,0,0); - - //lens physical volume - G4VPhysicalVolume* LensPhys = - new G4PVPlacement(LensTransform, LensPhysName, LensLog , - aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), - false,0); - - RichTbLensLVol = LensLog; - RichTbLensPVol = LensPhys; + // lens logical volume + LensLog = new G4LogicalVolume(Lens, aMaterial->getPMTQuartzWindowMaterial(), "LensLog", 0, 0, 0); + // lens physical volume + G4VPhysicalVolume *LensPhys = new G4PVPlacement(LensTransform, LensPhysName, LensLog, + aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), false, 0); + RichTbLensLVol = LensLog; + RichTbLensPVol = LensPhys; } -void RichTbLens::constructRichTbLensEnvelope() -{ - -} - +void RichTbLens::constructRichTbLensEnvelope() {} //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeMaster.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeMaster.cc index ccb93ad3fc7cb1abe0c5267a11a3c3b7fcfde7f3..a7cd31b1aed66f5fa954679086617f67b8f0ef8a 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeMaster.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeMaster.cc @@ -1,25 +1,23 @@ // $Id: $ -// Include files - - +// Include files // local -#include "RichTbGeometryParameters.hh" -#include "RichTbMiscNames.hh" -#include "RichTbMaterial.hh" -#include "RichTbUpgradeVessel.hh" -#include "RichTbUpgradePhDFrame.hh" #include "RichTbUpgradeMaster.hh" -#include "RichTbHall.hh" +#include "Geant4/G4Box.hh" +#include "Geant4/G4LogicalVolume.hh" +#include "Geant4/G4PVPlacement.hh" #include "Geant4/G4RotationMatrix.hh" +#include "Geant4/G4SubtractionSolid.hh" #include "Geant4/G4ThreeVector.hh" #include "Geant4/G4Transform3D.hh" -#include "Geant4/G4SubtractionSolid.hh" -#include "Geant4/G4Box.hh" -#include "Geant4/G4LogicalVolume.hh" #include "Geant4/G4VPhysicalVolume.hh" -#include "Geant4/G4PVPlacement.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbHall.hh" +#include "RichTbMaterial.hh" +#include "RichTbMiscNames.hh" #include "RichTbRunConfig.hh" +#include "RichTbUpgradePhDFrame.hh" +#include "RichTbUpgradeVessel.hh" //----------------------------------------------------------------------------- // Implementation file for class : RichTbVessel @@ -31,231 +29,160 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbMaster::RichTbMaster(RichTbPhDFrame* rTbPhDFrame, int MasterNum ) { +RichTbMaster::RichTbMaster(RichTbPhDFrame *rTbPhDFrame, int MasterNum) { aMasterNum = MasterNum; aRTbPhDFrame = rTbPhDFrame; - if(aMasterNum == 1) + if (aMasterNum == 1) constructRichTbMaster1(); - if(aMasterNum == 2) + if (aMasterNum == 2) constructRichTbMaster2(); - if(aMasterNum == 3) + if (aMasterNum == 3) constructRichTbMaster3(); - if(aMasterNum == 4) + if (aMasterNum == 4) constructRichTbMaster4(); } -RichTbMaster::~RichTbMaster( ) -{ -} -void RichTbMaster::constructRichTbMaster1() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - - G4Box * RichTbMasterBox - = new G4Box("RichTbMasterBox", 0.5*RichTbMasterXSize, - 0.5*RichTbMasterYSize, 0.5*RichTbMasterZSize); - - G4ThreeVector MasterPos(RichTbMaster1XLocation, - RichTbMaster1YLocation, - RichTbMaster1ZLocation); - - G4RotationMatrix MasterRotX,MasterRotY; - - - G4int aSpecialStudyMasterRotFlag = - aConfig ->getSpecialStudyMasterRotation(); - - if( aSpecialStudyMasterRotFlag != 1 ) { - - MasterRotX.rotateX(aConfig ->getSpecialStudyMasterRotationX()); - MasterRotY.rotateY(aConfig ->getSpecialStudyMasterRotationY()); +RichTbMaster::~RichTbMaster() {} +void RichTbMaster::constructRichTbMaster1() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); + + G4Box *RichTbMasterBox = + new G4Box("RichTbMasterBox", 0.5 * RichTbMasterXSize, 0.5 * RichTbMasterYSize, 0.5 * RichTbMasterZSize); + + G4ThreeVector MasterPos(RichTbMaster1XLocation, RichTbMaster1YLocation, RichTbMaster1ZLocation); + + G4RotationMatrix MasterRotX, MasterRotY; + + G4int aSpecialStudyMasterRotFlag = aConfig->getSpecialStudyMasterRotation(); + + if (aSpecialStudyMasterRotFlag != 1) { + MasterRotX.rotateX(aConfig->getSpecialStudyMasterRotationX()); + MasterRotY.rotateY(aConfig->getSpecialStudyMasterRotationY()); } - - - G4Transform3D MasterTransform( MasterRotX * MasterRotY, MasterPos); - - - G4LogicalVolume* MasterLog; - - - //master material - MasterLog = - new G4LogicalVolume(RichTbMasterBox, - aMaterial->getRichTbVaccum(), "MasterLog",0,0,0); - - //master location - G4VPhysicalVolume* MasterPhys = - new G4PVPlacement(MasterTransform, MasterPhysName, MasterLog , - aRTbPhDFrame->getRichTbPhDFramePVol(), - false,0); - - RichTbMasterLVol = MasterLog; - RichTbMasterPVol = MasterPhys; - + G4Transform3D MasterTransform(MasterRotX * MasterRotY, MasterPos); + G4LogicalVolume *MasterLog; + + // master material + MasterLog = new G4LogicalVolume(RichTbMasterBox, aMaterial->getRichTbVaccum(), "MasterLog", 0, 0, 0); + + // master location + G4VPhysicalVolume *MasterPhys = + new G4PVPlacement(MasterTransform, MasterPhysName, MasterLog, aRTbPhDFrame->getRichTbPhDFramePVol(), false, 0); + + RichTbMasterLVol = MasterLog; + RichTbMasterPVol = MasterPhys; } -void RichTbMaster::constructRichTbMaster2() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - - G4Box * RichTbMasterBox - = new G4Box("RichTbMasterBox", 0.5*RichTbMasterXSize, - 0.5*RichTbMasterYSize, 0.5*RichTbMasterZSize); - - G4ThreeVector MasterPos(RichTbMaster2XLocation, - RichTbMaster2YLocation, - RichTbMaster2ZLocation); - - G4RotationMatrix MasterRotX,MasterRotY; - - G4int aSpecialStudyMasterRotFlag = - aConfig ->getSpecialStudyMasterRotation(); - - if( aSpecialStudyMasterRotFlag != 1 ) { - - MasterRotX.rotateX(aConfig ->getSpecialStudyMasterRotationX()); - MasterRotY.rotateY(aConfig ->getSpecialStudyMasterRotationY()); +void RichTbMaster::constructRichTbMaster2() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); + + G4Box *RichTbMasterBox = + new G4Box("RichTbMasterBox", 0.5 * RichTbMasterXSize, 0.5 * RichTbMasterYSize, 0.5 * RichTbMasterZSize); + + G4ThreeVector MasterPos(RichTbMaster2XLocation, RichTbMaster2YLocation, RichTbMaster2ZLocation); + + G4RotationMatrix MasterRotX, MasterRotY; + + G4int aSpecialStudyMasterRotFlag = aConfig->getSpecialStudyMasterRotation(); + if (aSpecialStudyMasterRotFlag != 1) { + + MasterRotX.rotateX(aConfig->getSpecialStudyMasterRotationX()); + MasterRotY.rotateY(aConfig->getSpecialStudyMasterRotationY()); } - - - G4Transform3D MasterTransform( MasterRotX * MasterRotY, MasterPos); - - - G4LogicalVolume* MasterLog; - - - //master material - MasterLog = - new G4LogicalVolume(RichTbMasterBox, - aMaterial->getAir(), "MasterLog",0,0,0); - - //master location - G4VPhysicalVolume* MasterPhys = - new G4PVPlacement(MasterTransform, MasterPhysName, MasterLog , - aRTbPhDFrame->getRichTbPhDFramePVol(), - false,0); - - RichTbMasterLVol = MasterLog; - RichTbMasterPVol = MasterPhys; - + G4Transform3D MasterTransform(MasterRotX * MasterRotY, MasterPos); + + G4LogicalVolume *MasterLog; + + // master material + MasterLog = new G4LogicalVolume(RichTbMasterBox, aMaterial->getAir(), "MasterLog", 0, 0, 0); + + // master location + G4VPhysicalVolume *MasterPhys = + new G4PVPlacement(MasterTransform, MasterPhysName, MasterLog, aRTbPhDFrame->getRichTbPhDFramePVol(), false, 0); + RichTbMasterLVol = MasterLog; + RichTbMasterPVol = MasterPhys; } -void RichTbMaster::constructRichTbMaster3() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - - G4Box * RichTbMasterBox - = new G4Box("RichTbMasterBox", 0.5*RichTbMasterXSize, - 0.5*RichTbMasterYSize, 0.5*RichTbMasterZSize); - - G4ThreeVector MasterPos(RichTbMaster3XLocation, - RichTbMaster3YLocation, - RichTbMaster3ZLocation); - - G4RotationMatrix MasterRotX,MasterRotY; - - G4int aSpecialStudyMasterRotFlag = - aConfig ->getSpecialStudyMasterRotation(); - - if( aSpecialStudyMasterRotFlag != 1 ) { - - MasterRotX.rotateX(aConfig ->getSpecialStudyMasterRotationX()); - MasterRotY.rotateY(aConfig ->getSpecialStudyMasterRotationY()); +void RichTbMaster::constructRichTbMaster3() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); + + G4Box *RichTbMasterBox = + new G4Box("RichTbMasterBox", 0.5 * RichTbMasterXSize, 0.5 * RichTbMasterYSize, 0.5 * RichTbMasterZSize); + + G4ThreeVector MasterPos(RichTbMaster3XLocation, RichTbMaster3YLocation, RichTbMaster3ZLocation); + + G4RotationMatrix MasterRotX, MasterRotY; + G4int aSpecialStudyMasterRotFlag = aConfig->getSpecialStudyMasterRotation(); + + if (aSpecialStudyMasterRotFlag != 1) { + + MasterRotX.rotateX(aConfig->getSpecialStudyMasterRotationX()); + MasterRotY.rotateY(aConfig->getSpecialStudyMasterRotationY()); } - - - G4Transform3D MasterTransform( MasterRotX * MasterRotY, MasterPos); - - - G4LogicalVolume* MasterLog; - - - //master material - MasterLog = - new G4LogicalVolume(RichTbMasterBox, - aMaterial->getAir(), "MasterLog",0,0,0); - - //master location - G4VPhysicalVolume* MasterPhys = - new G4PVPlacement(MasterTransform, MasterPhysName, MasterLog , - aRTbPhDFrame->getRichTbPhDFramePVol(), - false,0); - - RichTbMasterLVol = MasterLog; - RichTbMasterPVol = MasterPhys; - + G4Transform3D MasterTransform(MasterRotX * MasterRotY, MasterPos); + + G4LogicalVolume *MasterLog; + + // master material + MasterLog = new G4LogicalVolume(RichTbMasterBox, aMaterial->getAir(), "MasterLog", 0, 0, 0); + // master location + G4VPhysicalVolume *MasterPhys = + new G4PVPlacement(MasterTransform, MasterPhysName, MasterLog, aRTbPhDFrame->getRichTbPhDFramePVol(), false, 0); + + RichTbMasterLVol = MasterLog; + RichTbMasterPVol = MasterPhys; } -void RichTbMaster::constructRichTbMaster4() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - - G4Box * RichTbMasterBox - = new G4Box("RichTbMasterBox", 0.5*RichTbMasterXSize, - 0.5*RichTbMasterYSize, 0.5*RichTbMasterZSize); - - G4ThreeVector MasterPos(RichTbMaster4XLocation, - RichTbMaster4YLocation, - RichTbMaster4ZLocation); - - G4RotationMatrix MasterRotX,MasterRotY; - - G4int aSpecialStudyMasterRotFlag = - aConfig ->getSpecialStudyMasterRotation(); - - if( aSpecialStudyMasterRotFlag != 1 ) { - - MasterRotX.rotateX(aConfig ->getSpecialStudyMasterRotationX()); - MasterRotY.rotateY(aConfig ->getSpecialStudyMasterRotationY()); +void RichTbMaster::constructRichTbMaster4() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); + + G4Box *RichTbMasterBox = + new G4Box("RichTbMasterBox", 0.5 * RichTbMasterXSize, 0.5 * RichTbMasterYSize, 0.5 * RichTbMasterZSize); + + G4ThreeVector MasterPos(RichTbMaster4XLocation, RichTbMaster4YLocation, RichTbMaster4ZLocation); + G4RotationMatrix MasterRotX, MasterRotY; + + G4int aSpecialStudyMasterRotFlag = aConfig->getSpecialStudyMasterRotation(); + + if (aSpecialStudyMasterRotFlag != 1) { + + MasterRotX.rotateX(aConfig->getSpecialStudyMasterRotationX()); + MasterRotY.rotateY(aConfig->getSpecialStudyMasterRotationY()); } - - - G4Transform3D MasterTransform( MasterRotX * MasterRotY, MasterPos); - - - G4LogicalVolume* MasterLog; - - - //master material - MasterLog = - new G4LogicalVolume(RichTbMasterBox, - aMaterial->getAir(), "MasterLog",0,0,0); - - //master location - G4VPhysicalVolume* MasterPhys = - new G4PVPlacement(MasterTransform, MasterPhysName, MasterLog , - aRTbPhDFrame->getRichTbPhDFramePVol(), - false,0); - - RichTbMasterLVol = MasterLog; - RichTbMasterPVol = MasterPhys; - + G4Transform3D MasterTransform(MasterRotX * MasterRotY, MasterPos); -} + G4LogicalVolume *MasterLog; + // master material + MasterLog = new G4LogicalVolume(RichTbMasterBox, aMaterial->getAir(), "MasterLog", 0, 0, 0); + // master location + G4VPhysicalVolume *MasterPhys = + new G4PVPlacement(MasterTransform, MasterPhysName, MasterLog, aRTbPhDFrame->getRichTbPhDFramePVol(), false, 0); + RichTbMasterLVol = MasterLog; + RichTbMasterPVol = MasterPhys; +} -//void RichTbMaster::constructRichTbMasterEnvelope() +// void RichTbMaster::constructRichTbMasterEnvelope() //{ - -//} +//} //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeMirror.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeMirror.cc index 1c7075572a116b485e0d56875d2f7071c587d471..4fc577ec24893e82206d77d221a80c1880087d98 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeMirror.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeMirror.cc @@ -1,23 +1,23 @@ // $Id: $ // Include files -#include "RichTbGeometryParameters.hh" -#include "Geant4/globals.hh" -#include "RichTbRunConfig.hh" -#include "Geant4/G4Sphere.hh" +#include "Geant4/G4Box.hh" +#include "Geant4/G4LogicalVolume.hh" +#include "Geant4/G4PVPlacement.hh" #include "Geant4/G4RotationMatrix.hh" +#include "Geant4/G4Sphere.hh" +#include "Geant4/G4SubtractionSolid.hh" #include "Geant4/G4ThreeVector.hh" #include "Geant4/G4Transform3D.hh" -#include "Geant4/G4LogicalVolume.hh" #include "Geant4/G4VPhysicalVolume.hh" -#include "Geant4/G4PVPlacement.hh" -#include "Geant4/G4Box.hh" -#include "Geant4/G4SubtractionSolid.hh" +#include "Geant4/globals.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbRunConfig.hh" // local -#include "RichTbUpgradeMirror.hh" #include "RichTbMaterial.hh" #include "RichTbMiscNames.hh" +#include "RichTbUpgradeMirror.hh" //----------------------------------------------------------------------------- // Implementation file for class : RichTbUpgradeMirror @@ -28,94 +28,73 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -//RichTbUpgradeMirror* RichTbUpgradeMirror::RichTbUpgradeMirrorInstance=0; +// RichTbUpgradeMirror* RichTbUpgradeMirror::RichTbUpgradeMirrorInstance=0; -RichTbUpgradeMirror::RichTbUpgradeMirror( RichTbUpgradeCrystalMaster* aMaster, RichTbUpgradeRadiator* aRadiator) { - RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - G4int aRadiatorConfiguration = aConfig ->getRadiatorConfiguration(); +RichTbUpgradeMirror::RichTbUpgradeMirror(RichTbUpgradeCrystalMaster *aMaster, RichTbUpgradeRadiator *aRadiator) { + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); + G4int aRadiatorConfiguration = aConfig->getRadiatorConfiguration(); - if(aRadiatorConfiguration == 3) aRTbUpgradeRadiator = aRadiator; - else motherMaster = aMaster; + if (aRadiatorConfiguration == 3) + aRTbUpgradeRadiator = aRadiator; + else + motherMaster = aMaster; - if(aRadiatorConfiguration == 3) constructRichTbUpgradeMirror15(); - else constructRichTbUpgradeMirror(); - -} -RichTbUpgradeMirror::~RichTbUpgradeMirror( ) { + if (aRadiatorConfiguration == 3) + constructRichTbUpgradeMirror15(); + else + constructRichTbUpgradeMirror(); } -void RichTbUpgradeMirror::constructRichTbUpgradeMirror() -{ - // RichTbRunConfig* RConfig = RichTbRunConfig::getRunConfigInstance(); - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - // G4int CurMirrorOrientationCode= RConfig -> getMirrorOrientCode(); - - - // in the following theta is for the horizontal extent of the - // mirror and phi for the vertical extent of the mirror. - - // G4double MirrThetaSize = pi/5*CLHEP::rad; - - G4double MirrPhiSize = 2*CLHEP::pi* CLHEP::rad; - - // G4double MirrThetaStart = 0.0*CLHEP::rad; - G4double MirrThetaStart = MirrorMinThetaExtent; - G4double MirrThetaSize = MirrorMaxThetaExtent-MirrorMinThetaExtent; - - - G4double MirrPhiStart = 0.0*CLHEP::rad; - - - G4Sphere* MirrorFull = new G4Sphere("MirrorFull",MirrorInnerRadius, - MirrorOuterRadius,MirrPhiStart, - MirrPhiSize,MirrThetaStart, - MirrThetaSize); - G4Box * BoxS - = new G4Box("MirrBoxSub", 0.5* MirrorSubBoxLargeXSize, - 0.5* MirrorSubBoxLargeYSize , 0.5*MirrorSubBoxLargeZSize ); +RichTbUpgradeMirror::~RichTbUpgradeMirror() {} +void RichTbUpgradeMirror::constructRichTbUpgradeMirror() { + // RichTbRunConfig* RConfig = RichTbRunConfig::getRunConfigInstance(); + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + // G4int CurMirrorOrientationCode= RConfig -> getMirrorOrientCode(); + // in the following theta is for the horizontal extent of the + // mirror and phi for the vertical extent of the mirror. - G4RotationMatrix BoxTopRot, BoxBotRot; - G4ThreeVector Box2PosTop (0.0, MirrorSubBoxYPosTop,0.0); - G4ThreeVector Box2PosBot (0.0, MirrorSubBoxYPosBot,0.0); + // G4double MirrThetaSize = pi/5*CLHEP::rad; + G4double MirrPhiSize = 2 * CLHEP::pi * CLHEP::rad; - G4Transform3D BoxTopTransform(BoxTopRot, Box2PosTop ); - G4Transform3D BoxBotTransform(BoxBotRot, Box2PosBot ); + // G4double MirrThetaStart = 0.0*CLHEP::rad; + G4double MirrThetaStart = MirrorMinThetaExtent; + G4double MirrThetaSize = MirrorMaxThetaExtent - MirrorMinThetaExtent; + G4double MirrPhiStart = 0.0 * CLHEP::rad; - G4SubtractionSolid* MirrorHA = - new G4SubtractionSolid("MirrorHA",MirrorFull , - BoxS , BoxTopTransform ); - G4SubtractionSolid* MirrorSphe = - new G4SubtractionSolid("MirrorSphe",MirrorHA , - BoxS , BoxBotTransform ); + G4Sphere *MirrorFull = new G4Sphere("MirrorFull", MirrorInnerRadius, MirrorOuterRadius, MirrPhiStart, MirrPhiSize, + MirrThetaStart, MirrThetaSize); + G4Box *BoxS = + new G4Box("MirrBoxSub", 0.5 * MirrorSubBoxLargeXSize, 0.5 * MirrorSubBoxLargeYSize, 0.5 * MirrorSubBoxLargeZSize); + G4RotationMatrix BoxTopRot, BoxBotRot; + G4ThreeVector Box2PosTop(0.0, MirrorSubBoxYPosTop, 0.0); + G4ThreeVector Box2PosBot(0.0, MirrorSubBoxYPosBot, 0.0); - G4RotationMatrix MirrorRotationX, MirrorRotationY; - MirrorRotationY.rotateY(180*CLHEP::degree); + G4Transform3D BoxTopTransform(BoxTopRot, Box2PosTop); + G4Transform3D BoxBotTransform(BoxBotRot, Box2PosBot); - G4ThreeVector MirrorPos ( MirrorPosX , MirrorPosY, MirrorPosZ); + G4SubtractionSolid *MirrorHA = new G4SubtractionSolid("MirrorHA", MirrorFull, BoxS, BoxTopTransform); + G4SubtractionSolid *MirrorSphe = new G4SubtractionSolid("MirrorSphe", MirrorHA, BoxS, BoxBotTransform); - G4Transform3D MirrorTransform( MirrorRotationX * MirrorRotationY, - MirrorPos); + G4RotationMatrix MirrorRotationX, MirrorRotationY; + MirrorRotationY.rotateY(180 * CLHEP::degree); - G4LogicalVolume* MirrorLog = - new G4LogicalVolume( MirrorSphe,aMaterial->getMirrorQuartz(), - "MirrSpheLog",0,0,0); + G4ThreeVector MirrorPos(MirrorPosX, MirrorPosY, MirrorPosZ); - G4VPhysicalVolume* MirrorPhys= - new G4PVPlacement( MirrorTransform, MirrorPhysName, - MirrorLog, - motherMaster->getRichTbUpgradeCrystalMasterPVol(),false,0); + G4Transform3D MirrorTransform(MirrorRotationX * MirrorRotationY, MirrorPos); - RichTbUpgradeMirrorLVol = MirrorLog; - RichTbUpgradeMirrorPVol = MirrorPhys; + G4LogicalVolume *MirrorLog = new G4LogicalVolume(MirrorSphe, aMaterial->getMirrorQuartz(), "MirrSpheLog", 0, 0, 0); + G4VPhysicalVolume *MirrorPhys = new G4PVPlacement(MirrorTransform, MirrorPhysName, MirrorLog, + motherMaster->getRichTbUpgradeCrystalMasterPVol(), false, 0); + RichTbUpgradeMirrorLVol = MirrorLog; + RichTbUpgradeMirrorPVol = MirrorPhys; } - -//RichTbUpgradeMirror* RichTbUpgradeMirror::getRichTbUpgradeMirrorInstance() +// RichTbUpgradeMirror* RichTbUpgradeMirror::getRichTbUpgradeMirrorInstance() //{ // if( RichTbUpgradeMirrorInstance == 0 ) { // RichTbUpgradeMirrorInstance = new RichTbUpgradeMirror(RichTbCrystalMaster* aMaster ); @@ -124,7 +103,6 @@ void RichTbUpgradeMirror::constructRichTbUpgradeMirror() // return RichTbUpgradeMirrorInstance; //} - /* RichTbUpgradeMirror* RichTbUpgradeMirror::getRichTbUpgradeMirrorInstance() { @@ -137,71 +115,62 @@ RichTbUpgradeMirror* RichTbUpgradeMirror::getRichTbUpgradeMirrorInstance() */ // END OF CHANGE +void RichTbUpgradeMirror::constructRichTbUpgradeMirror15() { + // RichTbRunConfig* RConfig = RichTbRunConfig::getRunConfigInstance(); + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + // G4int CurMirrorOrientationCode= RConfig -> getMirrorOrientCode(); -void RichTbUpgradeMirror::constructRichTbUpgradeMirror15() -{ - // RichTbRunConfig* RConfig = RichTbRunConfig::getRunConfigInstance(); - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - // G4int CurMirrorOrientationCode= RConfig -> getMirrorOrientCode(); - - // in the following theta is for the horizontal extent of the - // mirror and phi for the vertical extent of the mirror. - - // G4double MirrThetaSize = pi/5*CLHEP::rad; + // in the following theta is for the horizontal extent of the + // mirror and phi for the vertical extent of the mirror. - G4double MirrPhiSize = 2*CLHEP::pi* CLHEP::rad; + // G4double MirrThetaSize = pi/5*CLHEP::rad; - // G4double MirrThetaStart = 0.0*CLHEP::rad; - G4double MirrThetaStart = MirrorMinThetaExtent15; - G4double MirrThetaSize = MirrorMaxThetaExtent15-MirrorMinThetaExtent15; + G4double MirrPhiSize = 2 * CLHEP::pi * CLHEP::rad; - G4double MirrPhiStart = 0.0*CLHEP::rad; + // G4double MirrThetaStart = 0.0*CLHEP::rad; + G4double MirrThetaStart = MirrorMinThetaExtent15; + G4double MirrThetaSize = MirrorMaxThetaExtent15 - MirrorMinThetaExtent15; - G4Sphere* MirrorFull = new G4Sphere("MirrorFull",MirrorInnerRadius15, - MirrorOuterRadius15,MirrPhiStart, - MirrPhiSize,MirrThetaStart, - MirrThetaSize); + G4double MirrPhiStart = 0.0 * CLHEP::rad; -// G4Box * BoxS = new G4Box("MirrBoxSub", 0.5* MirrorSubBoxLargeXSize, -// 0.5* MirrorSubBoxLargeYSize , 0.5*MirrorSubBoxLargeZSize ); -// -// G4RotationMatrix BoxTopRot, BoxBotRot; -// G4ThreeVector Box2PosTop(0.0,MirrorSubBoxYPosTop,0.0); -// G4ThreeVector Box2PosBot(0.0,MirrorSubBoxYPosBot,0.0); -// -// G4Transform3D BoxTopTransform(BoxTopRot, Box2PosTop); -// G4Transform3D BoxBotTransform(BoxBotRot, Box2PosBot); -// -// G4SubtractionSolid* MirrorHA = new G4SubtractionSolid("MirrorHA",MirrorFull, -// BoxS, BoxTopTransform); -// -// G4SubtractionSolid* MirrorSphe = new G4SubtractionSolid("MirrorSphe",MirrorHA, -// BoxS, BoxBotTransform); + G4Sphere *MirrorFull = new G4Sphere("MirrorFull", MirrorInnerRadius15, MirrorOuterRadius15, MirrPhiStart, MirrPhiSize, + MirrThetaStart, MirrThetaSize); - G4RotationMatrix MirrorRotationX, MirrorRotationY; - MirrorRotationY.rotateY(180*CLHEP::degree); + // G4Box * BoxS = new G4Box("MirrBoxSub", 0.5* MirrorSubBoxLargeXSize, + // 0.5* MirrorSubBoxLargeYSize , 0.5*MirrorSubBoxLargeZSize ); + // + // G4RotationMatrix BoxTopRot, BoxBotRot; + // G4ThreeVector Box2PosTop(0.0,MirrorSubBoxYPosTop,0.0); + // G4ThreeVector Box2PosBot(0.0,MirrorSubBoxYPosBot,0.0); + // + // G4Transform3D BoxTopTransform(BoxTopRot, Box2PosTop); + // G4Transform3D BoxBotTransform(BoxBotRot, Box2PosBot); + // + // G4SubtractionSolid* MirrorHA = new G4SubtractionSolid("MirrorHA",MirrorFull, + // BoxS, BoxTopTransform); + // + // G4SubtractionSolid* MirrorSphe = new G4SubtractionSolid("MirrorSphe",MirrorHA, + // BoxS, BoxBotTransform); - G4ThreeVector MirrorPos(MirrorPosX15, MirrorPosY15, MirrorVolPosZ15); + G4RotationMatrix MirrorRotationX, MirrorRotationY; + MirrorRotationY.rotateY(180 * CLHEP::degree); - G4Transform3D MirrorTransform(MirrorRotationX * MirrorRotationY, - MirrorPos); + G4ThreeVector MirrorPos(MirrorPosX15, MirrorPosY15, MirrorVolPosZ15); -// G4LogicalVolume* MirrorLog = new G4LogicalVolume(MirrorSphe, -// aMaterial->getMirrorQuartz(), -// "MirrSpheLog",0,0,0); - G4LogicalVolume* MirrorLog = new G4LogicalVolume(MirrorFull, - aMaterial->getMirrorQuartz(), - "MirrSpheLog",0,0,0); + G4Transform3D MirrorTransform(MirrorRotationX * MirrorRotationY, MirrorPos); - G4VPhysicalVolume* MirrorPhys= new G4PVPlacement(MirrorTransform, - MirrorPhysName, - MirrorLog, -// motherMaster->getRichTbUpgradeCrystalMasterPVol(),false,0); - aRTbUpgradeRadiator->getRichTbUpgradeRadiatorPVol(),false,0); + // G4LogicalVolume* MirrorLog = new G4LogicalVolume(MirrorSphe, + // aMaterial->getMirrorQuartz(), + // "MirrSpheLog",0,0,0); + G4LogicalVolume *MirrorLog = new G4LogicalVolume(MirrorFull, aMaterial->getMirrorQuartz(), "MirrSpheLog", 0, 0, 0); + G4VPhysicalVolume *MirrorPhys = + new G4PVPlacement(MirrorTransform, MirrorPhysName, MirrorLog, + // motherMaster->getRichTbUpgradeCrystalMasterPVol(),false,0); + aRTbUpgradeRadiator->getRichTbUpgradeRadiatorPVol(), false, 0); - RichTbUpgradeMirrorLVol = MirrorLog; - RichTbUpgradeMirrorPVol = MirrorPhys; + RichTbUpgradeMirrorLVol = MirrorLog; + RichTbUpgradeMirrorPVol = MirrorPhys; } //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradePhDFrame.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradePhDFrame.cc index 6f213d6aa408560a26349f511ae6ad685076b665..aa4fa4d103804b3d8a40327f16e50d41bc5c76b5 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradePhDFrame.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradePhDFrame.cc @@ -1,26 +1,24 @@ // $Id: $ -// Include files - - +// Include files // local -#include "RichTbGeometryParameters.hh" -#include "RichTbMiscNames.hh" -#include "RichTbMaterial.hh" -#include "RichTbUpgradeVessel.hh" -#include "RichTbUpgradeCrystal.hh" -#include "RichTbUpgradeCrystalMaster.hh" #include "RichTbUpgradePhDFrame.hh" -#include "RichTbHall.hh" +#include "Geant4/G4Box.hh" +#include "Geant4/G4LogicalVolume.hh" +#include "Geant4/G4PVPlacement.hh" #include "Geant4/G4RotationMatrix.hh" +#include "Geant4/G4SubtractionSolid.hh" #include "Geant4/G4ThreeVector.hh" #include "Geant4/G4Transform3D.hh" -#include "Geant4/G4SubtractionSolid.hh" -#include "Geant4/G4Box.hh" -#include "Geant4/G4LogicalVolume.hh" #include "Geant4/G4VPhysicalVolume.hh" -#include "Geant4/G4PVPlacement.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbHall.hh" +#include "RichTbMaterial.hh" +#include "RichTbMiscNames.hh" #include "RichTbRunConfig.hh" +#include "RichTbUpgradeCrystal.hh" +#include "RichTbUpgradeCrystalMaster.hh" +#include "RichTbUpgradeVessel.hh" //----------------------------------------------------------------------------- // Implementation file for class : RichTbUpgradeVessel @@ -32,37 +30,30 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbPhDFrame::RichTbPhDFrame(RichTbUpgradeCrystalMaster* rTbCrystalMaster ) { +RichTbPhDFrame::RichTbPhDFrame(RichTbUpgradeCrystalMaster *rTbCrystalMaster) { aRTbCrystalMaster = rTbCrystalMaster; - + constructRichTbPhDFrame(); - -} -RichTbPhDFrame::~RichTbPhDFrame( ) -{ } -void RichTbPhDFrame::constructRichTbPhDFrame() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); +RichTbPhDFrame::~RichTbPhDFrame() {} +void RichTbPhDFrame::constructRichTbPhDFrame() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); // RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - - G4Box * RichTbPhDFrameBox - = new G4Box("RichTbPhDFrameBox", 0.5*RichTbPhDFrameXSize, - 0.5*RichTbPhDFrameYSize, 0.5*RichTbPhDFrameZSize); - - G4ThreeVector PhDFramePos(RichTbPhDFrameXLocation, - RichTbPhDFrameYLocation, - RichTbPhDFrameZLocation); - - G4RotationMatrix PhDFrameRotX,PhDFrameRotY; + + G4Box *RichTbPhDFrameBox = + new G4Box("RichTbPhDFrameBox", 0.5 * RichTbPhDFrameXSize, 0.5 * RichTbPhDFrameYSize, 0.5 * RichTbPhDFrameZSize); + + G4ThreeVector PhDFramePos(RichTbPhDFrameXLocation, RichTbPhDFrameYLocation, RichTbPhDFrameZLocation); + + G4RotationMatrix PhDFrameRotX, PhDFrameRotY; PhDFrameRotY.rotateY(RichTbPhDFrameYRotation); PhDFrameRotX.rotateX(RichTbPhDFrameXRotation); - /* G4int aSpeicalStudyVesselRotFlag = + /* G4int aSpeicalStudyVesselRotFlag = aConfig ->getSpecialStudyVesselRotation(); if( aSpeicalStudyVesselRotFlag != 1 ) { - + VesselRotX.rotateX(RichTbUpgradeVesselXRotation); VesselRotY.rotateY(RichTbUpgradeVesselYRotation); @@ -72,34 +63,23 @@ void RichTbPhDFrame::constructRichTbPhDFrame() // // G4cout<<" Vessel XRot Yrot "<<RichTbUpgradeVesselXRotation<<" " // <<RichTbUpgradeVesselYRotation<<G4endl; - - //G4Transform3D VesselUpsSubTransform(VesselUpsSubRot,VesselUpsSubPos); - - G4Transform3D PhDFrameTransform( PhDFrameRotX * PhDFrameRotY, PhDFramePos); - - G4LogicalVolume* PhDFrameLog; - - - //material - PhDFrameLog = - new G4LogicalVolume(RichTbPhDFrameBox, - aMaterial->getNitrogenGas(), "PhDFrameLog",0,0,0); - - //position of the frame - G4VPhysicalVolume* PhDFramePhys = - new G4PVPlacement(PhDFrameTransform, PhDFramePhysName, PhDFrameLog , - aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), - false,0); - - RichTbPhDFrameLVol = PhDFrameLog; - RichTbPhDFramePVol = PhDFramePhys; - - -} -void RichTbPhDFrame::constructRichTbPhDFrameEnvelope() -{ - -} + // G4Transform3D VesselUpsSubTransform(VesselUpsSubRot,VesselUpsSubPos); + + G4Transform3D PhDFrameTransform(PhDFrameRotX * PhDFrameRotY, PhDFramePos); + + G4LogicalVolume *PhDFrameLog; + + // material + PhDFrameLog = new G4LogicalVolume(RichTbPhDFrameBox, aMaterial->getNitrogenGas(), "PhDFrameLog", 0, 0, 0); + + // position of the frame + G4VPhysicalVolume *PhDFramePhys = new G4PVPlacement(PhDFrameTransform, PhDFramePhysName, PhDFrameLog, + aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), false, 0); + + RichTbPhDFrameLVol = PhDFrameLog; + RichTbPhDFramePVol = PhDFramePhys; +} +void RichTbPhDFrame::constructRichTbPhDFrameEnvelope() {} //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradePhDetSupFrame.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradePhDetSupFrame.cc index 818f662f63fa95d961baa6d1042ac4fd123f5eb7..211f9f5e041cbeb6aad178d670ff08a507174aaa 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradePhDetSupFrame.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradePhDetSupFrame.cc @@ -1,18 +1,16 @@ // Include files -#include "RichTbGeometryParameters.hh" -#include "RichTbMiscNames.hh" -#include "RichTbMaterial.hh" +#include "Geant4/G4Box.hh" +#include "Geant4/G4PVPlacement.hh" #include "Geant4/G4RotationMatrix.hh" +#include "Geant4/G4SubtractionSolid.hh" #include "Geant4/G4ThreeVector.hh" #include "Geant4/G4Transform3D.hh" -#include "Geant4/G4SubtractionSolid.hh" -#include "Geant4/G4Box.hh" -#include "Geant4/G4PVPlacement.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbMaterial.hh" +#include "RichTbMiscNames.hh" #include "RichTbRunConfig.hh" - - // local #include "RichTbUpgradePhDetSupFrame.hh" @@ -25,12 +23,10 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbUpgradePhDetSupFrame::RichTbUpgradePhDetSupFrame(RichTbUpgradeCrystalMaster * rTbCrysMaster ) { +RichTbUpgradePhDetSupFrame::RichTbUpgradePhDetSupFrame(RichTbUpgradeCrystalMaster *rTbCrysMaster) { aRTbCrystalMaster = rTbCrysMaster; - // constructRichTbPhotoDetectorSupFrame(); - } //============================================================================= // Destructor @@ -38,146 +34,132 @@ RichTbUpgradePhDetSupFrame::RichTbUpgradePhDetSupFrame(RichTbUpgradeCrystalMaste RichTbUpgradePhDetSupFrame::~RichTbUpgradePhDetSupFrame() {} //============================================================================= -void RichTbUpgradePhDetSupFrame::constructRichTbPhotoDetectorSupFrame() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); +void RichTbUpgradePhDetSupFrame::constructRichTbPhotoDetectorSupFrame() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); // RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - G4Box * PhDetSupFrameBox - = new G4Box( "PhDetSupFrameBox", - 0.5*PhDetSupFrameXSize,0.5*PhDetSupFrameYSize,0.5*PhDetSupFrameZSize); - - + G4Box *PhDetSupFrameBox = + new G4Box("PhDetSupFrameBox", 0.5 * PhDetSupFrameXSize, 0.5 * PhDetSupFrameYSize, 0.5 * PhDetSupFrameZSize); - G4RotationMatrix PhDetSupRotX,PhDetSupRotY ; + G4RotationMatrix PhDetSupRotX, PhDetSupRotY; - G4ThreeVector PhDetSupFramePosLeft ( PhDetSupFrameXLocation[0],PhDetSupFrameYLocation[0],PhDetSupFrameZLocation); - G4ThreeVector PhDetSupFramePosRight ( PhDetSupFrameXLocation[1],PhDetSupFrameYLocation[1],PhDetSupFrameZLocation); + G4ThreeVector PhDetSupFramePosLeft(PhDetSupFrameXLocation[0], PhDetSupFrameYLocation[0], PhDetSupFrameZLocation); + G4ThreeVector PhDetSupFramePosRight(PhDetSupFrameXLocation[1], PhDetSupFrameYLocation[1], PhDetSupFrameZLocation); - G4Transform3D PhDetSupFrameTransformLeft(PhDetSupRotX*PhDetSupRotY,PhDetSupFramePosLeft ); - G4Transform3D PhDetSupFrameTransformRight(PhDetSupRotX*PhDetSupRotY,PhDetSupFramePosRight ); - - G4LogicalVolume* PhDetSupFrameLogLeft = new G4LogicalVolume(PhDetSupFrameBox,aMaterial->getNitrogenGas(),"PhDetSupFrameLeftLog", 0,0,0); - - G4LogicalVolume* PhDetSupFrameLogRight = new G4LogicalVolume(PhDetSupFrameBox,aMaterial->getNitrogenGas(),"PhDetSupFrameRightLog", 0,0,0); - - G4VPhysicalVolume* PhDetSupFramePhysLeft = new G4PVPlacement(PhDetSupFrameTransformLeft, - PhDetSupPhysNameLeft,PhDetSupFrameLogLeft, - aRTbCrystalMaster ->getRichTbUpgradeCrystalMasterPVol(),false,0); - - G4VPhysicalVolume* PhDetSupFramePhysRight = new G4PVPlacement(PhDetSupFrameTransformRight, - PhDetSupPhysNameRight,PhDetSupFrameLogRight, - aRTbCrystalMaster ->getRichTbUpgradeCrystalMasterPVol(),false,1); - - RichTbPhDetSupFrameLeftLVol = PhDetSupFrameLogLeft; - RichTbPhDetSupFrameRightLVol = PhDetSupFrameLogRight; - RichTbPhDetSupFrameLeftPVol = PhDetSupFramePhysLeft; - RichTbPhDetSupFrameRightPVol = PhDetSupFramePhysRight; + G4Transform3D PhDetSupFrameTransformLeft(PhDetSupRotX * PhDetSupRotY, PhDetSupFramePosLeft); + G4Transform3D PhDetSupFrameTransformRight(PhDetSupRotX * PhDetSupRotY, PhDetSupFramePosRight); + G4LogicalVolume *PhDetSupFrameLogLeft = + new G4LogicalVolume(PhDetSupFrameBox, aMaterial->getNitrogenGas(), "PhDetSupFrameLeftLog", 0, 0, 0); + G4LogicalVolume *PhDetSupFrameLogRight = + new G4LogicalVolume(PhDetSupFrameBox, aMaterial->getNitrogenGas(), "PhDetSupFrameRightLog", 0, 0, 0); + G4VPhysicalVolume *PhDetSupFramePhysLeft = + new G4PVPlacement(PhDetSupFrameTransformLeft, PhDetSupPhysNameLeft, PhDetSupFrameLogLeft, + aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), false, 0); + G4VPhysicalVolume *PhDetSupFramePhysRight = + new G4PVPlacement(PhDetSupFrameTransformRight, PhDetSupPhysNameRight, PhDetSupFrameLogRight, + aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), false, 1); + RichTbPhDetSupFrameLeftLVol = PhDetSupFrameLogLeft; + RichTbPhDetSupFrameRightLVol = PhDetSupFrameLogRight; + RichTbPhDetSupFrameLeftPVol = PhDetSupFramePhysLeft; + RichTbPhDetSupFrameRightPVol = PhDetSupFramePhysRight; } -void RichTbUpgradePhDetSupFrame::constructRichTbPhotoDetectorSupFrameWithHpd() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); +void RichTbUpgradePhDetSupFrame::constructRichTbPhotoDetectorSupFrameWithHpd() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); // RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - G4Box * PhDetSupFrameBox - = new G4Box( "PhDetSupFrameBox", - 0.5*PhDetSupFrameXSize,0.5*PhDetSupFrameYSize,0.5*PhDetSupFrameZSize); - - - - G4RotationMatrix PhDetSupRotX,PhDetSupRotY ; - - G4ThreeVector PhDetSupFramePosLeft ( PhDetSupFrameXLocation[0],PhDetSupFrameYLocation[0],PhDetSupFrameZLocation); - G4Transform3D PhDetSupFrameTransformLeft(PhDetSupRotX*PhDetSupRotY,PhDetSupFramePosLeft ); - G4LogicalVolume* PhDetSupFrameLogLeft = new G4LogicalVolume(PhDetSupFrameBox,aMaterial->getNitrogenGas(),"PhDetSupFrameLeftLog", 0,0,0); - G4VPhysicalVolume* PhDetSupFramePhysLeft = new G4PVPlacement(PhDetSupFrameTransformLeft, - PhDetSupPhysNameLeft,PhDetSupFrameLogLeft, - aRTbCrystalMaster ->getRichTbUpgradeCrystalMasterPVol(),false,0); + G4Box *PhDetSupFrameBox = + new G4Box("PhDetSupFrameBox", 0.5 * PhDetSupFrameXSize, 0.5 * PhDetSupFrameYSize, 0.5 * PhDetSupFrameZSize); + G4RotationMatrix PhDetSupRotX, PhDetSupRotY; + G4ThreeVector PhDetSupFramePosLeft(PhDetSupFrameXLocation[0], PhDetSupFrameYLocation[0], PhDetSupFrameZLocation); + G4Transform3D PhDetSupFrameTransformLeft(PhDetSupRotX * PhDetSupRotY, PhDetSupFramePosLeft); + G4LogicalVolume *PhDetSupFrameLogLeft = + new G4LogicalVolume(PhDetSupFrameBox, aMaterial->getNitrogenGas(), "PhDetSupFrameLeftLog", 0, 0, 0); + G4VPhysicalVolume *PhDetSupFramePhysLeft = + new G4PVPlacement(PhDetSupFrameTransformLeft, PhDetSupPhysNameLeft, PhDetSupFrameLogLeft, + aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), false, 0); - G4Box * PhDetHpdSupFrameBox - = new G4Box( "PhDetHpdSupFrameBox", - 0.5*HpdPhDetSupFrameXSize,0.5*HpdPhDetSupFrameYSize,0.5*HpdPhDetSupFrameZSize); + G4Box *PhDetHpdSupFrameBox = new G4Box("PhDetHpdSupFrameBox", 0.5 * HpdPhDetSupFrameXSize, + 0.5 * HpdPhDetSupFrameYSize, 0.5 * HpdPhDetSupFrameZSize); + G4ThreeVector PhDetSupFramePosRight(HpdPhotonDetectorSupFrameXLocation, HpdPhotonDetectorSupFrameYLocation, + HpdPhDetSupFrameZLocation); - G4ThreeVector PhDetSupFramePosRight ( HpdPhotonDetectorSupFrameXLocation, - HpdPhotonDetectorSupFrameYLocation, HpdPhDetSupFrameZLocation); - - G4RotationMatrix PhDetHpdSupRotX,PhDetHpdSupRotY ; - - G4Transform3D PhDetSupFrameTransformRight(PhDetHpdSupRotX*PhDetHpdSupRotY,PhDetSupFramePosRight ); - - - G4LogicalVolume* PhDetSupFrameLogRight = new G4LogicalVolume(PhDetHpdSupFrameBox,aMaterial->getNitrogenGas(),"PhDetSupFrameRightLog", 0,0,0); - - - G4VPhysicalVolume* PhDetSupFramePhysRight = new G4PVPlacement(PhDetSupFrameTransformRight, - PhDetSupPhysNameRight,PhDetSupFrameLogRight, - aRTbCrystalMaster ->getRichTbUpgradeCrystalMasterPVol(),false,1); - - RichTbPhDetSupFrameLeftLVol = PhDetSupFrameLogLeft; - RichTbPhDetSupFrameRightLVol = PhDetSupFrameLogRight; - RichTbPhDetSupFrameLeftPVol = PhDetSupFramePhysLeft; - RichTbPhDetSupFrameRightPVol = PhDetSupFramePhysRight; + G4RotationMatrix PhDetHpdSupRotX, PhDetHpdSupRotY; + G4Transform3D PhDetSupFrameTransformRight(PhDetHpdSupRotX * PhDetHpdSupRotY, PhDetSupFramePosRight); + G4LogicalVolume *PhDetSupFrameLogRight = + new G4LogicalVolume(PhDetHpdSupFrameBox, aMaterial->getNitrogenGas(), "PhDetSupFrameRightLog", 0, 0, 0); + G4VPhysicalVolume *PhDetSupFramePhysRight = + new G4PVPlacement(PhDetSupFrameTransformRight, PhDetSupPhysNameRight, PhDetSupFrameLogRight, + aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), false, 1); + RichTbPhDetSupFrameLeftLVol = PhDetSupFrameLogLeft; + RichTbPhDetSupFrameRightLVol = PhDetSupFrameLogRight; + RichTbPhDetSupFrameLeftPVol = PhDetSupFramePhysLeft; + RichTbPhDetSupFrameRightPVol = PhDetSupFramePhysRight; } -void RichTbUpgradePhDetSupFrame::constructRichTbPhotoDetectorSupFrame15() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); +void RichTbUpgradePhDetSupFrame::constructRichTbPhotoDetectorSupFrame15() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); // RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - G4Box * PhDetSupFrameBox = new G4Box( "PhDetSupFrameBox", - 0.5*PhDetSupFrameXSize,0.5*PhDetSupFrameYSize,0.5*PhDetSupFrameZSize); - - G4RotationMatrix PhDetSupRotX,PhDetSupRotY ; - - G4ThreeVector PhDetSupFramePosLeft(PhDetSupFrameXLocation15[0],PhDetSupFrameYLocation15[0],PhDetSupFrameZLocation15); - G4ThreeVector PhDetSupFramePosRight(PhDetSupFrameXLocation15[1],PhDetSupFrameYLocation15[1],PhDetSupFrameZLocation15); - G4ThreeVector PhDetSupFramePosBottomLeft(PhDetSupFrameBottomXLocation[0],PhDetSupFrameBottomYLocation[0],PhDetSupFrameZLocation15); - G4ThreeVector PhDetSupFramePosBottomRight(PhDetSupFrameBottomXLocation[1],PhDetSupFrameBottomYLocation[1],PhDetSupFrameZLocation15); - - G4Transform3D PhDetSupFrameTransformLeft(PhDetSupRotX*PhDetSupRotY,PhDetSupFramePosLeft); - G4Transform3D PhDetSupFrameTransformRight(PhDetSupRotX*PhDetSupRotY,PhDetSupFramePosRight); - G4Transform3D PhDetSupFrameTransformBottomLeft(PhDetSupRotX*PhDetSupRotY,PhDetSupFramePosBottomLeft); - G4Transform3D PhDetSupFrameTransformBottomRight(PhDetSupRotX*PhDetSupRotY,PhDetSupFramePosBottomRight); - - G4LogicalVolume* PhDetSupFrameLogLeft = new G4LogicalVolume(PhDetSupFrameBox,aMaterial->getNitrogenGas(),"PhDetSupFrameLeftLog", 0,0,0); - G4LogicalVolume* PhDetSupFrameLogRight = new G4LogicalVolume(PhDetSupFrameBox,aMaterial->getNitrogenGas(),"PhDetSupFrameRightLog", 0,0,0); - G4LogicalVolume* PhDetSupFrameLogBottomLeft = new G4LogicalVolume(PhDetSupFrameBox,aMaterial->getNitrogenGas(),"PhDetSupFrameBottomLeftLog", 0,0,0); - G4LogicalVolume* PhDetSupFrameLogBottomRight = new G4LogicalVolume(PhDetSupFrameBox,aMaterial->getNitrogenGas(),"PhDetSupFrameBottomRightLog", 0,0,0); - - G4VPhysicalVolume* PhDetSupFramePhysLeft = new G4PVPlacement(PhDetSupFrameTransformLeft, - PhDetSupPhysNameLeft,PhDetSupFrameLogLeft, - aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(),false,0); - G4VPhysicalVolume* PhDetSupFramePhysRight = new G4PVPlacement(PhDetSupFrameTransformRight, - PhDetSupPhysNameRight,PhDetSupFrameLogRight, - aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(),false,1); - G4VPhysicalVolume* PhDetSupFramePhysBottomLeft = new G4PVPlacement(PhDetSupFrameTransformBottomLeft, - PhDetSupPhysNameBottomLeft,PhDetSupFrameLogBottomLeft, - aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(),false,0); - G4VPhysicalVolume* PhDetSupFramePhysBottomRight = new G4PVPlacement(PhDetSupFrameTransformBottomRight, - PhDetSupPhysNameBottomRight,PhDetSupFrameLogBottomRight, - aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(),false,1); - - RichTbPhDetSupFrameLeftLVol = PhDetSupFrameLogLeft; - RichTbPhDetSupFrameRightLVol = PhDetSupFrameLogRight; - RichTbPhDetSupFrameBottomLeftLVol = PhDetSupFrameLogBottomLeft; - RichTbPhDetSupFrameBottomRightLVol = PhDetSupFrameLogBottomRight; - RichTbPhDetSupFrameLeftPVol = PhDetSupFramePhysLeft; - RichTbPhDetSupFrameRightPVol = PhDetSupFramePhysRight; - RichTbPhDetSupFrameBottomLeftPVol = PhDetSupFramePhysBottomLeft; - RichTbPhDetSupFrameBottomRightPVol = PhDetSupFramePhysBottomRight; + G4Box *PhDetSupFrameBox = + new G4Box("PhDetSupFrameBox", 0.5 * PhDetSupFrameXSize, 0.5 * PhDetSupFrameYSize, 0.5 * PhDetSupFrameZSize); + + G4RotationMatrix PhDetSupRotX, PhDetSupRotY; + + G4ThreeVector PhDetSupFramePosLeft(PhDetSupFrameXLocation15[0], PhDetSupFrameYLocation15[0], + PhDetSupFrameZLocation15); + G4ThreeVector PhDetSupFramePosRight(PhDetSupFrameXLocation15[1], PhDetSupFrameYLocation15[1], + PhDetSupFrameZLocation15); + G4ThreeVector PhDetSupFramePosBottomLeft(PhDetSupFrameBottomXLocation[0], PhDetSupFrameBottomYLocation[0], + PhDetSupFrameZLocation15); + G4ThreeVector PhDetSupFramePosBottomRight(PhDetSupFrameBottomXLocation[1], PhDetSupFrameBottomYLocation[1], + PhDetSupFrameZLocation15); + + G4Transform3D PhDetSupFrameTransformLeft(PhDetSupRotX * PhDetSupRotY, PhDetSupFramePosLeft); + G4Transform3D PhDetSupFrameTransformRight(PhDetSupRotX * PhDetSupRotY, PhDetSupFramePosRight); + G4Transform3D PhDetSupFrameTransformBottomLeft(PhDetSupRotX * PhDetSupRotY, PhDetSupFramePosBottomLeft); + G4Transform3D PhDetSupFrameTransformBottomRight(PhDetSupRotX * PhDetSupRotY, PhDetSupFramePosBottomRight); + + G4LogicalVolume *PhDetSupFrameLogLeft = + new G4LogicalVolume(PhDetSupFrameBox, aMaterial->getNitrogenGas(), "PhDetSupFrameLeftLog", 0, 0, 0); + G4LogicalVolume *PhDetSupFrameLogRight = + new G4LogicalVolume(PhDetSupFrameBox, aMaterial->getNitrogenGas(), "PhDetSupFrameRightLog", 0, 0, 0); + G4LogicalVolume *PhDetSupFrameLogBottomLeft = + new G4LogicalVolume(PhDetSupFrameBox, aMaterial->getNitrogenGas(), "PhDetSupFrameBottomLeftLog", 0, 0, 0); + G4LogicalVolume *PhDetSupFrameLogBottomRight = + new G4LogicalVolume(PhDetSupFrameBox, aMaterial->getNitrogenGas(), "PhDetSupFrameBottomRightLog", 0, 0, 0); + + G4VPhysicalVolume *PhDetSupFramePhysLeft = + new G4PVPlacement(PhDetSupFrameTransformLeft, PhDetSupPhysNameLeft, PhDetSupFrameLogLeft, + aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), false, 0); + G4VPhysicalVolume *PhDetSupFramePhysRight = + new G4PVPlacement(PhDetSupFrameTransformRight, PhDetSupPhysNameRight, PhDetSupFrameLogRight, + aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), false, 1); + G4VPhysicalVolume *PhDetSupFramePhysBottomLeft = + new G4PVPlacement(PhDetSupFrameTransformBottomLeft, PhDetSupPhysNameBottomLeft, PhDetSupFrameLogBottomLeft, + aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), false, 0); + G4VPhysicalVolume *PhDetSupFramePhysBottomRight = + new G4PVPlacement(PhDetSupFrameTransformBottomRight, PhDetSupPhysNameBottomRight, PhDetSupFrameLogBottomRight, + aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), false, 1); + + RichTbPhDetSupFrameLeftLVol = PhDetSupFrameLogLeft; + RichTbPhDetSupFrameRightLVol = PhDetSupFrameLogRight; + RichTbPhDetSupFrameBottomLeftLVol = PhDetSupFrameLogBottomLeft; + RichTbPhDetSupFrameBottomRightLVol = PhDetSupFrameLogBottomRight; + RichTbPhDetSupFrameLeftPVol = PhDetSupFramePhysLeft; + RichTbPhDetSupFrameRightPVol = PhDetSupFramePhysRight; + RichTbPhDetSupFrameBottomLeftPVol = PhDetSupFramePhysBottomLeft; + RichTbPhDetSupFrameBottomRightPVol = PhDetSupFramePhysBottomRight; } - - diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeRadiator.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeRadiator.cc index 05f5953acf4cee7dd9a0420a6f591669a18872c7..a5ab6eba3c216e81349afe085e9a112ef771f8e7 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeRadiator.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeRadiator.cc @@ -1,30 +1,28 @@ // $Id: $ // Include files - - // local -#include "RichTbGeometryParameters.hh" -#include "RichTbMiscNames.hh" -#include "RichTbMaterial.hh" -#include "RichTbUpgradeVessel.hh" -#include "RichTbUpgradeCrystal.hh" #include "RichTbUpgradeRadiator.hh" -#include "RichTbUpgradeCrystalMaster.hh" -#include "RichTbHall.hh" +#include "Geant4/G4Box.hh" +#include "Geant4/G4LogicalVolume.hh" +#include "Geant4/G4Orb.hh" +#include "Geant4/G4PVPlacement.hh" #include "Geant4/G4RotationMatrix.hh" +#include "Geant4/G4Sphere.hh" +#include "Geant4/G4SubtractionSolid.hh" #include "Geant4/G4ThreeVector.hh" #include "Geant4/G4Transform3D.hh" -#include "Geant4/G4SubtractionSolid.hh" -#include "Geant4/G4UnionSolid.hh" -#include "Geant4/G4Box.hh" -#include "Geant4/G4Orb.hh" #include "Geant4/G4Tubs.hh" -#include "Geant4/G4Sphere.hh" -#include "Geant4/G4LogicalVolume.hh" +#include "Geant4/G4UnionSolid.hh" #include "Geant4/G4VPhysicalVolume.hh" -#include "Geant4/G4PVPlacement.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbHall.hh" +#include "RichTbMaterial.hh" +#include "RichTbMiscNames.hh" #include "RichTbRunConfig.hh" +#include "RichTbUpgradeCrystal.hh" +#include "RichTbUpgradeCrystalMaster.hh" +#include "RichTbUpgradeVessel.hh" //----------------------------------------------------------------------------- // Implementation file for class : RichTbVessel @@ -37,231 +35,185 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbUpgradeRadiator::RichTbUpgradeRadiator(RichTbUpgradeCrystalMaster* rTbCrystalMaster ) { +RichTbUpgradeRadiator::RichTbUpgradeRadiator(RichTbUpgradeCrystalMaster *rTbCrystalMaster) { - aRTbCrystalMaster = rTbCrystalMaster; + aRTbCrystalMaster = rTbCrystalMaster; - RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - G4int aRadiatorConfiguration = aConfig ->getRadiatorConfiguration(); + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); + G4int aRadiatorConfiguration = aConfig->getRadiatorConfiguration(); - if(aRadiatorConfiguration == 3) constructRichTbUpgradeRadiator15(); - else constructRichTbUpgradeRadiator(); - -} -RichTbUpgradeRadiator::~RichTbUpgradeRadiator( ) -{ + if (aRadiatorConfiguration == 3) + constructRichTbUpgradeRadiator15(); + else + constructRichTbUpgradeRadiator(); } +RichTbUpgradeRadiator::~RichTbUpgradeRadiator() {} -void RichTbUpgradeRadiator::constructRichTbUpgradeRadiator() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - // RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - - - - G4Box * Box1 - = new G4Box("Box1", 0.5*Box1XSize, - 0.5*Box1YSize, 0.5*Box1ZSize); - - G4Box * Box2 - = new G4Box("Box2", 0.5*Box2XSize, - 0.5*Box2YSize, 0.5*Box2ZSize); - - G4ThreeVector Box2Pos(Box2XLocation, - Box2YLocation, - Box2ZLocation); - - G4RotationMatrix Box2RotX,Box2RotY; - - G4Transform3D Box2Transform(Box2RotX * Box2RotY, Box2Pos); +void RichTbUpgradeRadiator::constructRichTbUpgradeRadiator() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + // RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - G4SubtractionSolid* SubBoxA = - new G4SubtractionSolid("SubBoxA", Box1 , - Box2, Box2Transform); + G4Box *Box1 = new G4Box("Box1", 0.5 * Box1XSize, 0.5 * Box1YSize, 0.5 * Box1ZSize); + G4Box *Box2 = new G4Box("Box2", 0.5 * Box2XSize, 0.5 * Box2YSize, 0.5 * Box2ZSize); - G4Box * RichTbUpgradeDarkCoverSubBox - = new G4Box("RichTbUpgradeDarkCoverSubBox", 0.5*RichTbUpgradeDarkCoverXSize, - 0.5*RichTbUpgradeDarkCoverYSize, 0.5*RichTbUpgradeDarkCoverZSize); + G4ThreeVector Box2Pos(Box2XLocation, Box2YLocation, Box2ZLocation); - G4ThreeVector DarkCoverSubPos(RichTbUpgradeDarkCoverXLocation, - RichTbUpgradeDarkCoverYLocation, - RichTbUpgradeDarkCoverZLocation); + G4RotationMatrix Box2RotX, Box2RotY; - G4RotationMatrix DarkCoverSubRotX, DarkCoverSubRotY; + G4Transform3D Box2Transform(Box2RotX * Box2RotY, Box2Pos); - G4Transform3D DarkCoverSubTransform(DarkCoverSubRotX * DarkCoverSubRotY, DarkCoverSubPos); + G4SubtractionSolid *SubBoxA = new G4SubtractionSolid("SubBoxA", Box1, Box2, Box2Transform); + G4Box *RichTbUpgradeDarkCoverSubBox = new G4Box("RichTbUpgradeDarkCoverSubBox", 0.5 * RichTbUpgradeDarkCoverXSize, + 0.5 * RichTbUpgradeDarkCoverYSize, 0.5 * RichTbUpgradeDarkCoverZSize); + G4ThreeVector DarkCoverSubPos(RichTbUpgradeDarkCoverXLocation, RichTbUpgradeDarkCoverYLocation, + RichTbUpgradeDarkCoverZLocation); - G4SubtractionSolid* BigBox = - new G4SubtractionSolid("BigBox", SubBoxA , - RichTbUpgradeDarkCoverSubBox, DarkCoverSubTransform); + G4RotationMatrix DarkCoverSubRotX, DarkCoverSubRotY; + G4Transform3D DarkCoverSubTransform(DarkCoverSubRotX * DarkCoverSubRotY, DarkCoverSubPos); - G4Orb* Sphere = new G4Orb("Sphere", SphereRadius); + G4SubtractionSolid *BigBox = + new G4SubtractionSolid("BigBox", SubBoxA, RichTbUpgradeDarkCoverSubBox, DarkCoverSubTransform); - G4ThreeVector BigBoxPos(BigBoxXLocation, - BigBoxYLocation, - BigBoxZLocation); + G4Orb *Sphere = new G4Orb("Sphere", SphereRadius); - G4RotationMatrix BigBoxRotX,BigBoxRotY; + G4ThreeVector BigBoxPos(BigBoxXLocation, BigBoxYLocation, BigBoxZLocation); - G4Transform3D BigBoxTransform(BigBoxRotX * BigBoxRotY, BigBoxPos); + G4RotationMatrix BigBoxRotX, BigBoxRotY; - G4SubtractionSolid* RichTbUpgradeRadiator = - new G4SubtractionSolid("Radiator", Sphere , - BigBox, BigBoxTransform); + G4Transform3D BigBoxTransform(BigBoxRotX * BigBoxRotY, BigBoxPos); - G4ThreeVector RadiatorPos(RichTbUpgradeRadiatorXLocation, - RichTbUpgradeRadiatorYLocation, - RichTbUpgradeRadiatorZLocation); + G4SubtractionSolid *RichTbUpgradeRadiator = new G4SubtractionSolid("Radiator", Sphere, BigBox, BigBoxTransform); - G4RotationMatrix RadiatorRotX,RadiatorRotY; + G4ThreeVector RadiatorPos(RichTbUpgradeRadiatorXLocation, RichTbUpgradeRadiatorYLocation, + RichTbUpgradeRadiatorZLocation); + G4RotationMatrix RadiatorRotX, RadiatorRotY; - // RadiatorRotY.rotateY(acos(-1)); + // RadiatorRotY.rotateY(acos(-1)); - G4Transform3D RadiatorTransform( RadiatorRotX * RadiatorRotY, RadiatorPos); + G4Transform3D RadiatorTransform(RadiatorRotX * RadiatorRotY, RadiatorPos); + G4LogicalVolume *RadiatorLog; - G4LogicalVolume* RadiatorLog; - - - //crystal material - RadiatorLog = - new G4LogicalVolume(RichTbUpgradeRadiator, - aMaterial->getCrystalMaterial(), "RadiatorLog",0,0,0); - - //crystal location - G4VPhysicalVolume* RadiatorPhys = - new G4PVPlacement(RadiatorTransform, RadiatorPhysName, RadiatorLog , - aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), - false,0); - - RichTbUpgradeRadiatorLVol = RadiatorLog; - RichTbUpgradeRadiatorPVol = RadiatorPhys; + // crystal material + RadiatorLog = new G4LogicalVolume(RichTbUpgradeRadiator, aMaterial->getCrystalMaterial(), "RadiatorLog", 0, 0, 0); + // crystal location + G4VPhysicalVolume *RadiatorPhys = new G4PVPlacement(RadiatorTransform, RadiatorPhysName, RadiatorLog, + aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), false, 0); + RichTbUpgradeRadiatorLVol = RadiatorLog; + RichTbUpgradeRadiatorPVol = RadiatorPhys; } -void RichTbUpgradeRadiator::constructRichTbUpgradeRadiator15() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - // RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - - G4Box * Box1 = new G4Box("Box1", 0.5*Box1XSize, 0.5*Box1YSize, 0.5*Box1ZSize); - - // G4Box * Box2 = new G4Box("Box2", 0.5*Box2XSize15, 0.5*Box2YSize15, 0.5*Box2ZSize15); - G4Tubs * Cyl1 = new G4Tubs("Cyl1", cylRmin, cylRmax, cylHalfLength, cylSPhi, cylDPhi); - - // G4ThreeVector Box2Pos(Box2XLocation, Box2YLocation, Box2ZLocation); - G4ThreeVector Cyl1Pos(Cyl1XLocation, Cyl1YLocation, Cyl1ZLocation); +void RichTbUpgradeRadiator::constructRichTbUpgradeRadiator15() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + // RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - // G4RotationMatrix Box2RotX,Box2RotY; - G4RotationMatrix Cyl1RotX, Cyl1RotY; + G4Box *Box1 = new G4Box("Box1", 0.5 * Box1XSize, 0.5 * Box1YSize, 0.5 * Box1ZSize); - // G4Transform3D Box2Transform(Box2RotX * Box2RotY, Box2Pos); - G4Transform3D Cyl1Transform(Cyl1RotX * Cyl1RotY, Cyl1Pos); + // G4Box * Box2 = new G4Box("Box2", 0.5*Box2XSize15, 0.5*Box2YSize15, 0.5*Box2ZSize15); + G4Tubs *Cyl1 = new G4Tubs("Cyl1", cylRmin, cylRmax, cylHalfLength, cylSPhi, cylDPhi); - G4SubtractionSolid* SubBoxA = new G4SubtractionSolid("SubBoxA", Box1, Cyl1, Cyl1Transform); + // G4ThreeVector Box2Pos(Box2XLocation, Box2YLocation, Box2ZLocation); + G4ThreeVector Cyl1Pos(Cyl1XLocation, Cyl1YLocation, Cyl1ZLocation); -// G4Box * RichTbUpgradeDarkCoverSubBox = new G4Box("RichTbUpgradeDarkCoverSubBox", -// 0.5*RichTbUpgradeDarkCoverXSize15, -// 0.5*RichTbUpgradeDarkCoverYSize15, -// 0.5*RichTbUpgradeDarkCoverZSize15); - G4Tubs * RichTbUpgradeDarkCoverSubTubs = new G4Tubs("Cyl2", cylDarkRmin, cylDarkRmax, cylDarkHalfLength, cylSPhi, cylDPhi); + // G4RotationMatrix Box2RotX,Box2RotY; + G4RotationMatrix Cyl1RotX, Cyl1RotY; + // G4Transform3D Box2Transform(Box2RotX * Box2RotY, Box2Pos); + G4Transform3D Cyl1Transform(Cyl1RotX * Cyl1RotY, Cyl1Pos); - G4ThreeVector DarkCoverSubPos(RichTbUpgradeDarkCoverXLocation15, - RichTbUpgradeDarkCoverYLocation15, - RichTbUpgradeDarkCoverZLocation15); + G4SubtractionSolid *SubBoxA = new G4SubtractionSolid("SubBoxA", Box1, Cyl1, Cyl1Transform); - G4RotationMatrix DarkCoverSubRotX, DarkCoverSubRotY; + // G4Box * RichTbUpgradeDarkCoverSubBox = new G4Box("RichTbUpgradeDarkCoverSubBox", + // 0.5*RichTbUpgradeDarkCoverXSize15, + // 0.5*RichTbUpgradeDarkCoverYSize15, + // 0.5*RichTbUpgradeDarkCoverZSize15); + G4Tubs *RichTbUpgradeDarkCoverSubTubs = + new G4Tubs("Cyl2", cylDarkRmin, cylDarkRmax, cylDarkHalfLength, cylSPhi, cylDPhi); - G4Transform3D DarkCoverSubTransform(DarkCoverSubRotX * DarkCoverSubRotY, DarkCoverSubPos); + G4ThreeVector DarkCoverSubPos(RichTbUpgradeDarkCoverXLocation15, RichTbUpgradeDarkCoverYLocation15, + RichTbUpgradeDarkCoverZLocation15); - G4SubtractionSolid* BigBox = new G4SubtractionSolid("BigBox", SubBoxA , - RichTbUpgradeDarkCoverSubTubs, DarkCoverSubTransform); + G4RotationMatrix DarkCoverSubRotX, DarkCoverSubRotY; + G4Transform3D DarkCoverSubTransform(DarkCoverSubRotX * DarkCoverSubRotY, DarkCoverSubPos); + G4SubtractionSolid *BigBox = + new G4SubtractionSolid("BigBox", SubBoxA, RichTbUpgradeDarkCoverSubTubs, DarkCoverSubTransform); - //mirror subvolume - G4double MirrPhiSize = 2*CLHEP::pi* CLHEP::rad; + // mirror subvolume + G4double MirrPhiSize = 2 * CLHEP::pi * CLHEP::rad; - // G4double MirrThetaStart = 0.0*CLHEP::rad; - G4double MirrThetaStart = MirrorMinThetaExtent15; - G4double MirrThetaSize = MirrorMaxThetaExtent15-MirrorMinThetaExtent15; + // G4double MirrThetaStart = 0.0*CLHEP::rad; + G4double MirrThetaStart = MirrorMinThetaExtent15; + G4double MirrThetaSize = MirrorMaxThetaExtent15 - MirrorMinThetaExtent15; - G4double MirrPhiStart = 0.0*CLHEP::rad; + G4double MirrPhiStart = 0.0 * CLHEP::rad; - G4Sphere* MirrorFull = new G4Sphere("MirrorFull",MirrorInnerRadius15, - MirrorOuterRadius15,MirrPhiStart, - MirrPhiSize,MirrThetaStart, - MirrThetaSize); + G4Sphere *MirrorFull = new G4Sphere("MirrorFull", MirrorInnerRadius15, MirrorOuterRadius15, MirrPhiStart, MirrPhiSize, + MirrThetaStart, MirrThetaSize); - G4RotationMatrix MirrorRotationX, MirrorRotationY; - MirrorRotationY.rotateY(180*CLHEP::degree); + G4RotationMatrix MirrorRotationX, MirrorRotationY; + MirrorRotationY.rotateY(180 * CLHEP::degree); - G4ThreeVector MirrorPos(MirrorPosX15, MirrorPosY15, MirrorVolPosZ15); + G4ThreeVector MirrorPos(MirrorPosX15, MirrorPosY15, MirrorVolPosZ15); - G4Transform3D MirrorTransform(MirrorRotationX * MirrorRotationY, - MirrorPos); + G4Transform3D MirrorTransform(MirrorRotationX * MirrorRotationY, MirrorPos); -// G4SubtractionSolid* BigBox2 = new G4SubtractionSolid("BigBox2", BigBox , -// MirrorFull, MirrorTransform); - //end mirror subvolume + // G4SubtractionSolid* BigBox2 = new G4SubtractionSolid("BigBox2", BigBox , + // MirrorFull, MirrorTransform); + // end mirror subvolume + G4Orb *Sphere = new G4Orb("Sphere", SphereRadius15); + G4UnionSolid *SpherePlusMirror = new G4UnionSolid("SpherePlusMirror", Sphere, MirrorFull, MirrorTransform); - G4Orb* Sphere = new G4Orb("Sphere", SphereRadius15); + G4ThreeVector BigBoxPos(BigBoxXLocation, BigBoxYLocation, BigBoxZLocation); - G4UnionSolid * SpherePlusMirror = new G4UnionSolid("SpherePlusMirror", Sphere, MirrorFull, MirrorTransform); + G4RotationMatrix BigBoxRotX, BigBoxRotY; - G4ThreeVector BigBoxPos(BigBoxXLocation, BigBoxYLocation, BigBoxZLocation); + G4Transform3D BigBoxTransform(BigBoxRotX * BigBoxRotY, BigBoxPos); - G4RotationMatrix BigBoxRotX,BigBoxRotY; + G4SubtractionSolid *RichTbUpgradeRadiator = + new G4SubtractionSolid("Radiator", SpherePlusMirror, BigBox, BigBoxTransform); - G4Transform3D BigBoxTransform(BigBoxRotX * BigBoxRotY, BigBoxPos); + G4ThreeVector RadiatorPos(RichTbUpgradeRadiatorXLocation15, RichTbUpgradeRadiatorYLocation15, + RichTbUpgradeRadiatorZLocation15); - G4SubtractionSolid* RichTbUpgradeRadiator = new G4SubtractionSolid("Radiator", SpherePlusMirror, - BigBox, BigBoxTransform); + G4RotationMatrix RadiatorRotX, RadiatorRotY; - G4ThreeVector RadiatorPos(RichTbUpgradeRadiatorXLocation15, - RichTbUpgradeRadiatorYLocation15, - RichTbUpgradeRadiatorZLocation15); + // RadiatorRotY.rotateY(acos(-1)); - G4RotationMatrix RadiatorRotX,RadiatorRotY; + G4Transform3D RadiatorTransform(RadiatorRotX * RadiatorRotY, RadiatorPos); - // RadiatorRotY.rotateY(acos(-1)); + G4LogicalVolume *RadiatorLog; - G4Transform3D RadiatorTransform( RadiatorRotX * RadiatorRotY, RadiatorPos); + // crystal material + RadiatorLog = new G4LogicalVolume(RichTbUpgradeRadiator, aMaterial->getCrystalMaterial(), "RadiatorLog", 0, 0, 0); - G4LogicalVolume* RadiatorLog; - - //crystal material - RadiatorLog = new G4LogicalVolume(RichTbUpgradeRadiator, aMaterial->getCrystalMaterial(), "RadiatorLog",0,0,0); - - //crystal location - G4VPhysicalVolume* RadiatorPhys = new G4PVPlacement(RadiatorTransform, - RadiatorPhysName, RadiatorLog, - aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), - false,0); - - RichTbUpgradeRadiatorLVol = RadiatorLog; - RichTbUpgradeRadiatorPVol = RadiatorPhys; -// -// G4Transform3D * testTrans; -// G4Box * testbox = new G4Box("testbox", 0.5*10, 0.5*10, 0.5*10); -// G4LogicalVolume * testL = new G4LogicalVolume(testbox, aMaterial->getCrystalMaterial(), "testL",0,0,0); -// G4VPhysicalVolume * testP = new G4VPhysicalVolume(testTrans, "testP", testL, aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(),false,0); -// -// testLvol = testL; -// testPvol = testP; + // crystal location + G4VPhysicalVolume *RadiatorPhys = new G4PVPlacement(RadiatorTransform, RadiatorPhysName, RadiatorLog, + aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(), false, 0); + RichTbUpgradeRadiatorLVol = RadiatorLog; + RichTbUpgradeRadiatorPVol = RadiatorPhys; + // + // G4Transform3D * testTrans; + // G4Box * testbox = new G4Box("testbox", 0.5*10, 0.5*10, 0.5*10); + // G4LogicalVolume * testL = new G4LogicalVolume(testbox, aMaterial->getCrystalMaterial(), "testL",0,0,0); + // G4VPhysicalVolume * testP = new G4VPhysicalVolume(testTrans, "testP", testL, + //aRTbCrystalMaster->getRichTbUpgradeCrystalMasterPVol(),false,0); + // + // testLvol = testL; + // testPvol = testP; } void RichTbUpgradeRadiator::constructRichTbUpgradeRadiatorEnvelope() {} - //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeVessel.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeVessel.cc index 538925a4ce4c9089f279d0f44810154ae87f93da..eb0de1d25327e75a7b6d65335561975848cb3fcc 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeVessel.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcgy/RichTbUpgradeVessel.cc @@ -1,22 +1,20 @@ // $Id: $ -// Include files - - +// Include files // local -#include "RichTbGeometryParameters.hh" -#include "RichTbMiscNames.hh" -#include "RichTbMaterial.hh" #include "RichTbUpgradeVessel.hh" -#include "RichTbHall.hh" +#include "Geant4/G4Box.hh" +#include "Geant4/G4LogicalVolume.hh" +#include "Geant4/G4PVPlacement.hh" #include "Geant4/G4RotationMatrix.hh" +#include "Geant4/G4SubtractionSolid.hh" #include "Geant4/G4ThreeVector.hh" #include "Geant4/G4Transform3D.hh" -#include "Geant4/G4SubtractionSolid.hh" -#include "Geant4/G4Box.hh" -#include "Geant4/G4LogicalVolume.hh" #include "Geant4/G4VPhysicalVolume.hh" -#include "Geant4/G4PVPlacement.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbHall.hh" +#include "RichTbMaterial.hh" +#include "RichTbMiscNames.hh" #include "RichTbRunConfig.hh" //----------------------------------------------------------------------------- @@ -29,91 +27,71 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbUpgradeVessel::RichTbUpgradeVessel(RichTbHall* rTbHall ) { +RichTbUpgradeVessel::RichTbUpgradeVessel(RichTbHall *rTbHall) { aRTbHall = rTbHall; - + constructRichTbGasVessel(); - -} -RichTbUpgradeVessel::~RichTbUpgradeVessel( ) -{ } -void RichTbUpgradeVessel::constructRichTbGasVessel() -{ - RichTbMaterial* aMaterial = RichTbMaterial::getRichTbMaterialInstance(); - RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - - G4Box * RichTbVesselBox - = new G4Box("RichTbVesselBox", 0.5*RichTbVesselXSize, - 0.5*RichTbVesselYSize, 0.5*RichTbVesselZSize); - - //volume substraction +RichTbUpgradeVessel::~RichTbUpgradeVessel() {} +void RichTbUpgradeVessel::constructRichTbGasVessel() { + RichTbMaterial *aMaterial = RichTbMaterial::getRichTbMaterialInstance(); + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); + + G4Box *RichTbVesselBox = + new G4Box("RichTbVesselBox", 0.5 * RichTbVesselXSize, 0.5 * RichTbVesselYSize, 0.5 * RichTbVesselZSize); + + // volume substraction /* - G4Box* RichTbVesselUpsSubBox - = new G4Box("RichTbVesselUpsSubBox", + G4Box* RichTbVesselUpsSubBox + = new G4Box("RichTbVesselUpsSubBox", 0.5*RichTbVesselUpsExternalPartXSize, 0.5*RichTbVesselUpsExternalPartYLargeSize, 0.5*RichTbVesselUpsExternalPartZLargeSize); - + G4ThreeVector VesselUpsSubPos(RichTbVesselUpsExternalPartXShift , RichTbVesselUpsExternalPartYShift, RichTbVesselUpsExternalPartZShift); */ - G4ThreeVector VesselPos(RichTbVesselXLocation, - RichTbVesselYLocation, - RichTbVesselZLocation); - - G4RotationMatrix VesselUpsSubRot, VesselRotX,VesselRotY; + G4ThreeVector VesselPos(RichTbVesselXLocation, RichTbVesselYLocation, RichTbVesselZLocation); + + G4RotationMatrix VesselUpsSubRot, VesselRotX, VesselRotY; - G4int aSpeicalStudyVesselRotFlag = - aConfig ->getSpecialStudyVesselRotation(); + G4int aSpeicalStudyVesselRotFlag = aConfig->getSpecialStudyVesselRotation(); - if( aSpeicalStudyVesselRotFlag != 1 ) { - - VesselRotX.rotateX(RichTbVesselXRotation); - VesselRotY.rotateY(RichTbVesselYRotation); + if (aSpeicalStudyVesselRotFlag != 1) { + VesselRotX.rotateX(RichTbVesselXRotation); + VesselRotY.rotateY(RichTbVesselYRotation); } - + // // G4cout<<" Vessel XRot Yrot "<<RichTbVesselXRotation<<" " // <<RichTbVesselYRotation<<G4endl; - - //G4Transform3D VesselUpsSubTransform(VesselUpsSubRot,VesselUpsSubPos); - G4Transform3D VesselTransform( VesselRotX * VesselRotY, VesselPos); - - /* G4SubtractionSolid* VesselUpsSub = + // G4Transform3D VesselUpsSubTransform(VesselUpsSubRot,VesselUpsSubPos); + + G4Transform3D VesselTransform(VesselRotX * VesselRotY, VesselPos); + + /* G4SubtractionSolid* VesselUpsSub = new G4SubtractionSolid("VesselUpsSub", RichTbVesselBoxOverall , RichTbVesselUpsSubBox,VesselUpsSubTransform); - + */ - G4LogicalVolume* VesselLog; - - - //air in the vessel - VesselLog = - new G4LogicalVolume(RichTbVesselBox, - aMaterial->getNitrogenGas(), "VesselLog",0,0,0); - - //location of the vessel - G4VPhysicalVolume* VesselPhys = - new G4PVPlacement(VesselTransform,VesselPhysName, VesselLog , - aRTbHall->getRichTbHallPhysicalVolume(), - false,0); - - RichTbGasVesselLVol = VesselLog; - RichTbGasVesselPVol = VesselPhys; - - -} -void RichTbUpgradeVessel::constructRichTbUpgradeVesselEnvelope() -{ - -} + G4LogicalVolume *VesselLog; + + // air in the vessel + VesselLog = new G4LogicalVolume(RichTbVesselBox, aMaterial->getNitrogenGas(), "VesselLog", 0, 0, 0); + // location of the vessel + G4VPhysicalVolume *VesselPhys = + new G4PVPlacement(VesselTransform, VesselPhysName, VesselLog, aRTbHall->getRichTbHallPhysicalVolume(), false, 0); + + RichTbGasVesselLVol = VesselLog; + RichTbGasVesselPVol = VesselPhys; +} +void RichTbUpgradeVessel::constructRichTbUpgradeVesselEnvelope() {} //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcmain/RichTbSim.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcmain/RichTbSim.cc index 8c0defe3c9a0164a0267f7c616262ff126081398..f7da41eb50dc9cf4eaf87727c2912f4cfc882a7c 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcmain/RichTbSim.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcmain/RichTbSim.cc @@ -1,179 +1,171 @@ // Rich Test Beam Simulation Main program // ---------------------------------------------------------------- -#include "RichTbRunAction.hh" +#include "Geant4/G4RunManager.hh" +#include "Geant4/G4UImanager.hh" +#include "Geant4/G4UIterminal.hh" +#include "Geant4/G4VPhysicalVolume.hh" #include "RichTbEventAction.hh" -#include "RichTbUpgradeDetectorConstruction.hh" +#include "RichTbIOData.hh" +#include "RichTbPhysicsList.hh" #include "RichTbPrimaryGeneratorAction.hh" +#include "RichTbRunAction.hh" +#include "RichTbRunConfig.hh" #include "RichTbStackingAction.hh" #include "RichTbSteppingActionBase.hh" #include "RichTbTrackingAction.hh" -#include "RichTbPhysicsList.hh" -#include "Geant4/G4VPhysicalVolume.hh" -#include "Geant4/G4RunManager.hh" +#include "RichTbUpgradeDetectorConstruction.hh" #include "RichTbVisManager.hh" -#include "RichTbRunConfig.hh" -#include "RichTbIOData.hh" -#include "Geant4/G4UImanager.hh" -#include "Geant4/G4UIterminal.hh" #ifdef G4UI_USE_XM #include "Geant4/G4UIXm.hh" #endif #include "Geant4/Randomize.hh" -#include "RichTbVisManager.hh" #include "RichTbAnalysisManager.hh" - +#include "RichTbVisManager.hh" #include "Geant4/G4ios.hh" #include <cstdlib> #include <iostream> -int main(int argc, char **argv) -{ +int main(int argc, char **argv) { - // Seed the random number generator manually - // ------------------------------------------ + // Seed the random number generator manually + // ------------------------------------------ // G4long myseed = 345354; - G4long myseed = 755365; - // HepRandom::setTheSeed(myseed); - - // Run manager - // G4RunManager *runManager = new G4RunManager; - //Job and Run options. - - RichTbRunConfig *rConfig = RichTbRunConfig::getRunConfigInstance(); - myseed = rConfig -> getRandomSeedInput(); - G4cout<<"Current random number seed "<<myseed<<G4endl; - - CLHEP::HepRandom::setTheSeed(myseed); - - // Run manager - G4RunManager *runManager = new G4RunManager; - - // Datafile streams for input and output - RichTbIOData *rIOData = RichTbIOData::getRichTbIODataInstance(); - - //Setup the analysis stuff. - - RichTbAnalysisManager *analysisManager = - RichTbAnalysisManager::getInstance(); - - if(rIOData) G4cout<<" IO Data initialized "<<G4endl; - if(analysisManager) G4cout<<" Analysis manager initialized "<<G4endl; - + G4long myseed = 755365; + // HepRandom::setTheSeed(myseed); + + // Run manager + // G4RunManager *runManager = new G4RunManager; + // Job and Run options. + + RichTbRunConfig *rConfig = RichTbRunConfig::getRunConfigInstance(); + myseed = rConfig->getRandomSeedInput(); + G4cout << "Current random number seed " << myseed << G4endl; + + CLHEP::HepRandom::setTheSeed(myseed); + + // Run manager + G4RunManager *runManager = new G4RunManager; + + // Datafile streams for input and output + RichTbIOData *rIOData = RichTbIOData::getRichTbIODataInstance(); + + // Setup the analysis stuff. + + RichTbAnalysisManager *analysisManager = RichTbAnalysisManager::getInstance(); + + if (rIOData) + G4cout << " IO Data initialized " << G4endl; + if (analysisManager) + G4cout << " Analysis manager initialized " << G4endl; + + //#ifdef G4VIS_USE + // visualization manager + RichTbVisManager *visManager = RichTbVisManager::getRichTbVisManagerInstance(); + // visManager->SetVerboseLevel(0); + + visManager->Initialise(); + // #endif + + // UserInitialization classes - mandatory + RichTbDetectorConstruction *RichTbDet = new RichTbDetectorConstruction(); + runManager->SetUserInitialization(RichTbDet); + RichTbPhysicsList *RichTbPhy = new RichTbPhysicsList(); + runManager->SetUserInitialization(RichTbPhy); + + // UserAction classes - optional + + runManager->SetUserAction(new RichTbRunAction()); + RichTbPrimaryGeneratorAction *PrimaryGenAction = new RichTbPrimaryGeneratorAction(); + runManager->SetUserAction(PrimaryGenAction); + RichTbEventAction *eventAction = new RichTbEventAction(); + runManager->SetUserAction(eventAction); + runManager->SetUserAction(new RichTbStackingAction); + RichTbSteppingActionBase *StepActionBase = new RichTbSteppingActionBase(); + runManager->SetUserAction(StepActionBase); + + runManager->SetUserAction(new RichTbTrackingAction); + + G4UImanager *UI = G4UImanager::GetUIpointer(); + + G4UIsession *session = 0; + // UI->ApplyCommand("/run/verbose 2"); + // UI->ApplyCommand("/control/verbose 2"); + + // Initialize G4 kernel + runManager->Initialize(); + // Test for running in batch mode + bool batchmode = false; + G4int numEvInBatch = 1; + + if (rConfig->getBatchModeFlag() > 0) { + batchmode = true; + numEvInBatch = rConfig->getNumEventInBatchMode(); + } + + if (batchmode) { + runManager->BeamOn(numEvInBatch); + // runManager->BeamOn(200); + } else { + // ALL GUI stuff commented off for now. + // get the pointer to the User Interface manager + // G4UImanager* UI = G4UImanager::GetUIpointer(); + // G4UIsession* session=0; + // User interactions + // Define (G)UI for interactive mode + if (argc == 1) { + // #ifdef G4UI_USE_XM + // session = new G4UIXm(argc,argv); + //#else + // G4UIterminal is a (dumb) terminal. + session = new G4UIterminal; + //#endif + } //#ifdef G4VIS_USE // visualization manager - RichTbVisManager * visManager = - RichTbVisManager::getRichTbVisManagerInstance(); - // visManager->SetVerboseLevel(0); - - visManager->Initialise(); - // #endif - - // UserInitialization classes - mandatory - RichTbDetectorConstruction* RichTbDet = new RichTbDetectorConstruction(); - runManager->SetUserInitialization(RichTbDet); - RichTbPhysicsList* RichTbPhy = new RichTbPhysicsList(); - runManager->SetUserInitialization(RichTbPhy); - - // UserAction classes - optional - - runManager->SetUserAction(new RichTbRunAction()); - RichTbPrimaryGeneratorAction *PrimaryGenAction = - new RichTbPrimaryGeneratorAction(); - runManager->SetUserAction(PrimaryGenAction); - RichTbEventAction *eventAction = - new RichTbEventAction(); - runManager->SetUserAction(eventAction); - runManager->SetUserAction(new RichTbStackingAction); - RichTbSteppingActionBase *StepActionBase = - new RichTbSteppingActionBase(); - runManager->SetUserAction(StepActionBase); - - runManager->SetUserAction(new RichTbTrackingAction); - - G4UImanager *UI = G4UImanager::GetUIpointer(); - - G4UIsession *session = 0; - // UI->ApplyCommand("/run/verbose 2"); - // UI->ApplyCommand("/control/verbose 2"); - - //Initialize G4 kernel - runManager->Initialize(); - // Test for running in batch mode - bool batchmode = false; - G4int numEvInBatch = 1; - - if( rConfig -> getBatchModeFlag() > 0 ) { - batchmode=true; - numEvInBatch= rConfig ->getNumEventInBatchMode(); - } - - - if (batchmode) { - runManager->BeamOn( numEvInBatch ); - // runManager->BeamOn(200); - } else { - //ALL GUI stuff commented off for now. - // get the pointer to the User Interface manager - // G4UImanager* UI = G4UImanager::GetUIpointer(); - // G4UIsession* session=0; - // User interactions - // Define (G)UI for interactive mode - if (argc == 1) { - // #ifdef G4UI_USE_XM - //session = new G4UIXm(argc,argv); - //#else - // G4UIterminal is a (dumb) terminal. - session = new G4UIterminal; - //#endif - } - //#ifdef G4VIS_USE - // visualization manager - // G4VisManager* visManager = new RichTbVisManager(); - // RichTbVisManager* visManager = new RichTbVisManager(); - //visManager->SetVerboseLevel(0); - //visManager->Initialize(); - //G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); - // std::cout << " PVVisManager " << pVVisManager << std::endl; - - ///#endif - - if (session) { // Interactive mode + // G4VisManager* visManager = new RichTbVisManager(); + // RichTbVisManager* visManager = new RichTbVisManager(); + // visManager->SetVerboseLevel(0); + // visManager->Initialize(); + // G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); + // std::cout << " PVVisManager " << pVVisManager << std::endl; + + ///#endif + + if (session) { // Interactive mode #ifdef G4UI_USE_XM - // Customize the G4UIXm menubar with a macro file : - UI->ApplyCommand("/control/execute /afs/cern.ch/user/s/seaso/mycmt/RichTb/v1/macro/gui.mac"); + // Customize the G4UIXm menubar with a macro file : + UI->ApplyCommand("/control/execute /afs/cern.ch/user/s/seaso/mycmt/RichTb/v1/macro/gui.mac"); #endif - UI->ApplyCommand("/run/verbose 0"); - UI->ApplyCommand("/event/verbose 0"); - UI->ApplyCommand("/tracking/verbose 2"); - UI->ApplyCommand("/particle/process/verbose 0"); - - //runManager->BeamOn(1); - - session->SessionStart(); - delete session; - } else { // Batch mode - G4UImanager *UI = G4UImanager::GetUIpointer(); - G4String command = "/control/execute "; - G4String fileName = argv[1]; - UI->ApplyCommand(command + fileName); - } + UI->ApplyCommand("/run/verbose 0"); + UI->ApplyCommand("/event/verbose 0"); + UI->ApplyCommand("/tracking/verbose 2"); + UI->ApplyCommand("/particle/process/verbose 0"); + + // runManager->BeamOn(1); + + session->SessionStart(); + delete session; + } else { // Batch mode + G4UImanager *UI = G4UImanager::GetUIpointer(); + G4String command = "/control/execute "; + G4String fileName = argv[1]; + UI->ApplyCommand(command + fileName); } + } - //#ifdef G4VIS_USE - delete visManager; - // #endif - - G4cout << "\nVisManager deleted..\n" << G4endl; - + //#ifdef G4VIS_USE + delete visManager; + // #endif - // delete analysisManager; + G4cout << "\nVisManager deleted..\n" << G4endl; + // delete analysisManager; - delete runManager; + delete runManager; - G4cout << "\nRunManager deleted..\n" << G4endl; + G4cout << "\nRunManager deleted..\n" << G4endl; - return 0; + return 0; } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbBeamProperty.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbBeamProperty.cc index e9d14e77e75b2eac1af2c3898f1b700c1c78ceec..94b02b5581f15579c0b37b4df76793d7e7457962 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbBeamProperty.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbBeamProperty.cc @@ -1,16 +1,14 @@ // $Id: $ -// Include files - - +// Include files // local #include "RichTbBeamProperty.hh" -#include "RichTbGeometryParameters.hh" +#include "Geant4/G4OpticalPhoton.hh" #include "Geant4/G4ParticleDefinition.hh" #include "Geant4/G4PionMinus.hh" -#include "Geant4/G4OpticalPhoton.hh" #include "Geant4/G4PionPlus.hh" #include "Geant4/G4Proton.hh" +#include "RichTbGeometryParameters.hh" //----------------------------------------------------------------------------- // Implementation file for class : RichTbBeamProperty @@ -20,19 +18,15 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbBeamProperty* RichTbBeamProperty::RichTbBeamPropertyInstance=0; +RichTbBeamProperty *RichTbBeamProperty::RichTbBeamPropertyInstance = 0; + +RichTbBeamProperty::RichTbBeamProperty() { -RichTbBeamProperty::RichTbBeamProperty( ) { - - ResetBeamProperty(); - mNominalBeamPosition = G4ThreeVector(RichTbNominalBeamXPos, - RichTbNominalBeamYPos, - RichTbNominalBeamZPos); - - mNominalBeamDirectionCos= G4ThreeVector(RichTbNominalBeamDirCosX, - RichTbNominalBeamDirCosY, - RichTbNominalBeamDirCosZ); - + ResetBeamProperty(); + mNominalBeamPosition = G4ThreeVector(RichTbNominalBeamXPos, RichTbNominalBeamYPos, RichTbNominalBeamZPos); + + mNominalBeamDirectionCos = + G4ThreeVector(RichTbNominalBeamDirCosX, RichTbNominalBeamDirCosY, RichTbNominalBeamDirCosZ); } //============================================================================= // Destructor @@ -40,37 +34,26 @@ RichTbBeamProperty::RichTbBeamProperty( ) { RichTbBeamProperty::~RichTbBeamProperty() {} //============================================================================= - RichTbBeamProperty* RichTbBeamProperty::getRichTbBeamPropertyInstance() -{ - if( RichTbBeamPropertyInstance == 0 ) { - RichTbBeamPropertyInstance= new RichTbBeamProperty( ); - +RichTbBeamProperty *RichTbBeamProperty::getRichTbBeamPropertyInstance() { + if (RichTbBeamPropertyInstance == 0) { + RichTbBeamPropertyInstance = new RichTbBeamProperty(); } return RichTbBeamPropertyInstance; - } -void RichTbBeamProperty:: ResetBeamProperty() -{ - mBeamPosition = G4ThreeVector(0.0,0.0,0.0); - mBeamDirection = G4ThreeVector(0.0,0.0,1.0); +void RichTbBeamProperty::ResetBeamProperty() { + mBeamPosition = G4ThreeVector(0.0, 0.0, 0.0); + mBeamDirection = G4ThreeVector(0.0, 0.0, 1.0); mBeamPartDef = G4PionMinus::PionMinusDefinition(); - mBeamPartName= "pi-"; - mBeamPosUpstrAgel= G4ThreeVector(0.0,0.0,0.0); - mBeamDirUpstrAgel= G4ThreeVector(0.0,0.0,1.0); - mAgelNormal = G4ThreeVector(0.0,0.0,1.0); - + mBeamPartName = "pi-"; + mBeamPosUpstrAgel = G4ThreeVector(0.0, 0.0, 0.0); + mBeamDirUpstrAgel = G4ThreeVector(0.0, 0.0, 1.0); + mAgelNormal = G4ThreeVector(0.0, 0.0, 1.0); } -void RichTbBeamProperty::PrintBeamProperty() -{ - G4cout<<"BeamPos XYZ "<< mBeamPosition.x() - <<" "<< mBeamPosition.y()<<" " - << mBeamPosition.z()<<G4endl; - G4cout<<"BeamDirection XYZ AgelNormal XYZ "<< mBeamDirection.x() - << " "<<mBeamDirection.y()<<" " - <<mBeamDirection.z()<<" " - <<mAgelNormal.x()<<" "<<mAgelNormal.y() - <<" "<<mAgelNormal.z()<< G4endl; - G4cout<<"Beam Particle Name is "<<mBeamPartName<<G4endl; - - +void RichTbBeamProperty::PrintBeamProperty() { + G4cout << "BeamPos XYZ " << mBeamPosition.x() << " " << mBeamPosition.y() << " " << mBeamPosition.z() + << G4endl; + G4cout << "BeamDirection XYZ AgelNormal XYZ " << mBeamDirection.x() << " " << mBeamDirection.y() << " " + << mBeamDirection.z() << " " << mAgelNormal.x() << " " << mAgelNormal.y() << " " << mAgelNormal.z() + << G4endl; + G4cout << "Beam Particle Name is " << mBeamPartName << G4endl; } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbHit.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbHit.cc index e2f776430ce32d4bedc818523de84e8d4a5b4810..14049d661a1221c6c2e0394a8bbb941f5f1e385b 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbHit.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbHit.cc @@ -1,16 +1,14 @@ // $Id: $ -// Include files - - +// Include files // local #include "RichTbHit.hh" -#include "Geant4/G4VVisManager.hh" #include "Geant4/G4Circle.hh" #include "Geant4/G4Colour.hh" -#include "Geant4/G4VisAttributes.hh" -#include "Geant4/G4Transform3D.hh" #include "Geant4/G4LogicalVolume.hh" +#include "Geant4/G4Transform3D.hh" +#include "Geant4/G4VVisManager.hh" +#include "Geant4/G4VisAttributes.hh" #include "RichTbVisManager.hh" G4Allocator<RichTbHit> RichTbHitAllocator; @@ -23,165 +21,138 @@ G4Allocator<RichTbHit> RichTbHitAllocator; //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbHit::RichTbHit( ) { - -} +RichTbHit::RichTbHit() {} //============================================================================= // Destructor //============================================================================= RichTbHit::~RichTbHit() {} -RichTbHit::RichTbHit(const RichTbHit &right):G4VHit(right) -{ +RichTbHit::RichTbHit(const RichTbHit &right) : G4VHit(right) { edep = right.edep; pos = right.pos; CurPMTNum = right.CurPMTNum; - CurPixelNum=right.CurPixelNum; - - mLocalPos=right.mLocalPos; - mPeOrigin=right.mPeOrigin; - mPhotonOrigin=right.mPhotonOrigin; - mRayleighScatFlag=right.mRayleighScatFlag; - mPhotonIncidenceOnPMTQW=right. mPhotonIncidenceOnPMTQW; - mCkvCosThetaProd=right.mCkvCosThetaProd; - mCkvPhiProd=right.mCkvPhiProd; - mCkvEnergyProd=right.mCkvEnergyProd; - mPhotonMultIncidenceQW=right.mPhotonMultIncidenceQW; + CurPixelNum = right.CurPixelNum; + + mLocalPos = right.mLocalPos; + mPeOrigin = right.mPeOrigin; + mPhotonOrigin = right.mPhotonOrigin; + mRayleighScatFlag = right.mRayleighScatFlag; + mPhotonIncidenceOnPMTQW = right.mPhotonIncidenceOnPMTQW; + mCkvCosThetaProd = right.mCkvCosThetaProd; + mCkvPhiProd = right.mCkvPhiProd; + mCkvEnergyProd = right.mCkvEnergyProd; + mPhotonMultIncidenceQW = right.mPhotonMultIncidenceQW; mPeOriginInPhSupport = right.mPeOriginInPhSupport; mPhEmissionDir = right.mPhEmissionDir; mPixelLocalCenter = right.mPixelLocalCenter; mPixelGlobalCenter = right.mPixelGlobalCenter; - mTIRRadiatorCoord = right.mTIRRadiatorCoord; - mMIRRadiatorCoord = right.mMIRRadiatorCoord; - mRFRRadiatorCoord = right.mRFRRadiatorCoord; + mTIRRadiatorCoord = right.mTIRRadiatorCoord; + mMIRRadiatorCoord = right.mMIRRadiatorCoord; + mRFRRadiatorCoord = right.mRFRRadiatorCoord; mMultipleReflFlag = right.mMultipleReflFlag; - mChTrackTotMom = right.mChTrackTotMom; + mChTrackTotMom = right.mChTrackTotMom; mChTrackThreeMom = right.mChTrackThreeMom; mHitInPixelGapFlag = right.mHitInPixelGapFlag; - } -const RichTbHit& RichTbHit::operator=(const RichTbHit &right) -{ +const RichTbHit &RichTbHit::operator=(const RichTbHit &right) { edep = right.edep; pos = right.pos; CurPMTNum = right.CurPMTNum; - CurPixelNum=right.CurPixelNum; - - mLocalPos=right.mLocalPos; - mPeOrigin=right.mPeOrigin; - mPhotonOrigin=right.mPhotonOrigin; - mRayleighScatFlag=right.mRayleighScatFlag; - mPhotonIncidenceOnPMTQW=right. mPhotonIncidenceOnPMTQW; - mCkvCosThetaProd=right.mCkvCosThetaProd; - mCkvPhiProd=right.mCkvPhiProd; - mCkvEnergyProd=right.mCkvEnergyProd; - mPhotonMultIncidenceQW=right.mPhotonMultIncidenceQW; + CurPixelNum = right.CurPixelNum; + + mLocalPos = right.mLocalPos; + mPeOrigin = right.mPeOrigin; + mPhotonOrigin = right.mPhotonOrigin; + mRayleighScatFlag = right.mRayleighScatFlag; + mPhotonIncidenceOnPMTQW = right.mPhotonIncidenceOnPMTQW; + mCkvCosThetaProd = right.mCkvCosThetaProd; + mCkvPhiProd = right.mCkvPhiProd; + mCkvEnergyProd = right.mCkvEnergyProd; + mPhotonMultIncidenceQW = right.mPhotonMultIncidenceQW; mPeOriginInPhSupport = right.mPeOriginInPhSupport; mPhEmissionDir = right.mPhEmissionDir; mPixelLocalCenter = right.mPixelLocalCenter; mPixelGlobalCenter = right.mPixelGlobalCenter; - mTIRRadiatorCoord = right.mTIRRadiatorCoord; - mMIRRadiatorCoord = right.mMIRRadiatorCoord; - mRFRRadiatorCoord = right.mRFRRadiatorCoord; + mTIRRadiatorCoord = right.mTIRRadiatorCoord; + mMIRRadiatorCoord = right.mMIRRadiatorCoord; + mRFRRadiatorCoord = right.mRFRRadiatorCoord; mMultipleReflFlag = right.mMultipleReflFlag; - mChTrackTotMom = right.mChTrackTotMom; + mChTrackTotMom = right.mChTrackTotMom; mChTrackThreeMom = right.mChTrackThreeMom; mHitInPixelGapFlag = right.mHitInPixelGapFlag; - - return *this; - -} -int RichTbHit::operator==(const RichTbHit &right) const -{ - return 0; } +int RichTbHit::operator==(const RichTbHit & /* right */) const { return 0; } -void RichTbHit::Draw() -{ +void RichTbHit::Draw() { // The folowing does not work anymore .. SE 26-04-01 - G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); - - if(pVVisManager) - { - - // G4Circle circle(pos); - // circle.SetScreenSize(0.04); - // circle.SetFillStyle(G4Circle::filled); - // G4Colour colour(1.0,0.0,0.0); - // G4VisAttributes attribs(colour); - // circle.SetVisAttributes(attribs); - //pVVisManager->Draw(circle); + G4VVisManager *pVVisManager = G4VVisManager::GetConcreteInstance(); + + if (pVVisManager) { + + // G4Circle circle(pos); + // circle.SetScreenSize(0.04); + // circle.SetFillStyle(G4Circle::filled); + // G4Colour colour(1.0,0.0,0.0); + // G4VisAttributes attribs(colour); + // circle.SetVisAttributes(attribs); + // pVVisManager->Draw(circle); } } -void RichTbHit::DrawWithVisM(RichTbVisManager* pVisManager) -{ - - G4VisManager* pVVisManager = pVisManager; - if(pVVisManager) - { - - // G4Circle circle(pos); - // circle.SetScreenSize(0.04); - // circle.SetFillStyle(G4Circle::filled); - // G4Colour colour(1.0,0.0,0.0); - // G4VisAttributes attribs(colour); - // circle.SetVisAttributes(attribs); - // const G4Circle aCircle= circle; - // const G4Transform3D aTransform; - - // pVVisManager->Draw(aCircle, aTransform); +void RichTbHit::DrawWithVisM(RichTbVisManager *pVisManager) { + + G4VisManager *pVVisManager = pVisManager; + if (pVVisManager) { + + // G4Circle circle(pos); + // circle.SetScreenSize(0.04); + // circle.SetFillStyle(G4Circle::filled); + // G4Colour colour(1.0,0.0,0.0); + // G4VisAttributes attribs(colour); + // circle.SetVisAttributes(attribs); + // const G4Circle aCircle= circle; + // const G4Transform3D aTransform; + + // pVVisManager->Draw(aCircle, aTransform); } } -void RichTbHit::Print() -{ +void RichTbHit::Print() { // To print the info in the G4hit class. - G4cout<<" RichTbHit: Now Printing the info for a Hit "<<G4endl; - G4cout<<"RichTbHit: PMT Pix edep "<< CurPMTNum <<" "<< CurPixelNum - <<" "<< edep<<G4endl; - G4cout<<"RichTbHit:XYZ GlobalPos " - << pos.x()<<" "<<pos.y()<<" "<<pos.z() <<" LocalPos " - <<mLocalPos.x()<<" " <<mLocalPos.y()<<" "<<mLocalPos.z()<<G4endl; - G4cout<<"RichTbHit:XYZ PeOrigin "<<mPeOrigin.x() <<" " - <<mPeOrigin.y()<<" "<<mPeOrigin.z()<<" QWIncidence " - << mPhotonIncidenceOnPMTQW.x()<<" " - << mPhotonIncidenceOnPMTQW.y()<<" " - << mPhotonIncidenceOnPMTQW.z()<<G4endl; - G4cout<<" PeOrigin in Ph Support XYZ "<< - mPeOriginInPhSupport.x()<<" "<<mPeOriginInPhSupport.y() - <<" "<<mPeOriginInPhSupport.z()<<G4endl; - - - G4cout<<"RichTbHit: NumPMTQWIncidence CosCkv Phi PhotEnergy " - << mPhotonMultIncidenceQW<<" "<<mCkvCosThetaProd - <<" "<< mCkvPhiProd<<" "<<mCkvEnergyProd<<G4endl; - - G4cout<<" Global Photon dir XYZ at its origin " <<mPhEmissionDir.x() - <<" "<<mPhEmissionDir.y()<<" "<<mPhEmissionDir.z()<<G4endl; - - G4cout<<" RichTbHit Local Global pixel center "<< mPixelLocalCenter <<" " - << mPixelGlobalCenter << G4endl; - - G4cout<<"RichTbHit: End of Printing the info for a Hit "<<G4endl; - - G4cout<<" RichTbHit TIR MIR RFR coord "<<mTIRRadiatorCoord<<" " - <<mMIRRadiatorCoord<<" "<<mRFRRadiatorCoord<<G4endl; - - G4cout<<" RichTbHit: Multrefl flag "<< mMultipleReflFlag <<G4endl; - G4cout<< "RichTbHit: Ch Track tot MOm ThreeMom " << mChTrackTotMom - <<" "<< mChTrackThreeMom <<G4endl; - + G4cout << " RichTbHit: Now Printing the info for a Hit " << G4endl; + G4cout << "RichTbHit: PMT Pix edep " << CurPMTNum << " " << CurPixelNum << " " << edep << G4endl; + G4cout << "RichTbHit:XYZ GlobalPos " << pos.x() << " " << pos.y() << " " << pos.z() << " LocalPos " + << mLocalPos.x() << " " << mLocalPos.y() << " " << mLocalPos.z() << G4endl; + G4cout << "RichTbHit:XYZ PeOrigin " << mPeOrigin.x() << " " << mPeOrigin.y() << " " << mPeOrigin.z() + << " QWIncidence " << mPhotonIncidenceOnPMTQW.x() << " " << mPhotonIncidenceOnPMTQW.y() << " " + << mPhotonIncidenceOnPMTQW.z() << G4endl; + G4cout << " PeOrigin in Ph Support XYZ " << mPeOriginInPhSupport.x() << " " << mPeOriginInPhSupport.y() << " " + << mPeOriginInPhSupport.z() << G4endl; + + G4cout << "RichTbHit: NumPMTQWIncidence CosCkv Phi PhotEnergy " << mPhotonMultIncidenceQW << " " + << mCkvCosThetaProd << " " << mCkvPhiProd << " " << mCkvEnergyProd << G4endl; + + G4cout << " Global Photon dir XYZ at its origin " << mPhEmissionDir.x() << " " << mPhEmissionDir.y() << " " + << mPhEmissionDir.z() << G4endl; + + G4cout << " RichTbHit Local Global pixel center " << mPixelLocalCenter << " " << mPixelGlobalCenter << G4endl; + + G4cout << "RichTbHit: End of Printing the info for a Hit " << G4endl; + + G4cout << " RichTbHit TIR MIR RFR coord " << mTIRRadiatorCoord << " " << mMIRRadiatorCoord << " " + << mRFRRadiatorCoord << G4endl; + + G4cout << " RichTbHit: Multrefl flag " << mMultipleReflFlag << G4endl; + G4cout << "RichTbHit: Ch Track tot MOm ThreeMom " << mChTrackTotMom << " " << mChTrackThreeMom << G4endl; } // This is a forward declarations of an instantiated G4Allocator<Type> object. -// It has been added in order to make code portable for the GNU g++ -// (release 2.7.2) compiler. +// It has been added in order to make code portable for the GNU g++ +// (release 2.7.2) compiler. // Whenever a new Type is instantiated via G4Allocator, it has to be forward -// declared to make object code (compiled with GNU g++) link successfully. -// +// declared to make object code (compiled with GNU g++) link successfully. +// #ifdef GNU_GCC - template class G4Allocator<RichTbHit>; +template class G4Allocator<RichTbHit>; #endif - //============================================================================= diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbIOData.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbIOData.cc index 274ea17b424ff22253e3f1ad99dbce5315ab0357..3c4cfa036ed6f5584242da8887045c3c41ec7bf4 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbIOData.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbIOData.cc @@ -1,55 +1,45 @@ #include "RichTbIOData.hh" #include "Geant4/G4HCofThisEvent.hh" -#include "Geant4/G4VHitsCollection.hh" #include "Geant4/G4SDManager.hh" -#include "Geant4/G4ios.hh" #include "Geant4/G4ThreeVector.hh" +#include "Geant4/G4VHitsCollection.hh" +#include "Geant4/G4ios.hh" +#include "RichTbBeamProperty.hh" #include "RichTbHit.hh" -#include <fstream> #include "RichTbMiscNames.hh" -#include "RichTbBeamProperty.hh" +#include <fstream> // CHANGED JDICKENS (02/06/05) -#include "RichTbUpgradeMirror.hh" #include "RichTbGeometryParameters.hh" +#include "RichTbUpgradeMirror.hh" // END OF CHANGE +RichTbIOData *RichTbIOData::RichTbIODataInstance = 0; -RichTbIOData* RichTbIOData::RichTbIODataInstance=0; - -RichTbIOData::RichTbIOData( ) -: OutputDataFS(((RichTbRunConfig::getRunConfigInstance()) - ->getOutputFileName()).c_str()), - m_IsFirstEvent(true) { +RichTbIOData::RichTbIOData() + : OutputDataFS(((RichTbRunConfig::getRunConfigInstance())->getOutputFileName()).c_str()), m_IsFirstEvent(true) { - RichTbRunConfig* RConfig = RichTbRunConfig::getRunConfigInstance(); + RichTbRunConfig *RConfig = RichTbRunConfig::getRunConfigInstance(); // OutputDataFS((RConfig->getOutputFileName()).c_str()); aOutFileString = RConfig->getOutputFileName(); - // const char* aOutFilechar = aOutFileString.c_str(); - - // std::ofstream OutputDataFS(aOutFileString.c_str()); + // const char* aOutFilechar = aOutFileString.c_str(); + // std::ofstream OutputDataFS(aOutFileString.c_str()); } +RichTbIOData::~RichTbIOData() {} -RichTbIOData::~RichTbIOData() -{ -} - - -void RichTbIOData::WriteOutEventHeaderData(const G4Event * evt) -{ - RichTbRunConfig* RConfig = RichTbRunConfig::getRunConfigInstance(); - G4int curVerboseOutputLevel= RConfig->VerboseOutputFileFlag(); - RichTbBeamProperty* aBeamProperty= - RichTbBeamProperty::getRichTbBeamPropertyInstance(); - G4ThreeVector aBeamPos = aBeamProperty->getBeamPosition(); - G4ThreeVector aBeamDir = aBeamProperty-> getBeamDirection(); +void RichTbIOData::WriteOutEventHeaderData(const G4Event *evt) { + RichTbRunConfig *RConfig = RichTbRunConfig::getRunConfigInstance(); + G4int curVerboseOutputLevel = RConfig->VerboseOutputFileFlag(); + RichTbBeamProperty *aBeamProperty = RichTbBeamProperty::getRichTbBeamPropertyInstance(); + G4ThreeVector aBeamPos = aBeamProperty->getBeamPosition(); + G4ThreeVector aBeamDir = aBeamProperty->getBeamDirection(); G4int aRadConf = RConfig->getRadiatorConfiguration(); - // aBeamProperty-> PrintBeamProperty(); + // aBeamProperty-> PrintBeamProperty(); // CHANGED JDICKENS (02/06/05) /* @@ -58,30 +48,28 @@ void RichTbIOData::WriteOutEventHeaderData(const G4Event * evt) */ // END OF CHANGE - G4SDManager * SDman = G4SDManager::GetSDMpointer(); + G4SDManager *SDman = G4SDManager::GetSDMpointer(); G4String colNam; - G4int RichTbCID = SDman->GetCollectionID(colNam=RichTbHColname); - if(RichTbCID<0) return; - G4HCofThisEvent * HCE = evt->GetHCofThisEvent(); - RichTbHitsCollection* RHC = NULL; - if(HCE) - { - RHC = (RichTbHitsCollection*)(HCE->GetHC(RichTbCID)); + G4int RichTbCID = SDman->GetCollectionID(colNam = RichTbHColname); + if (RichTbCID < 0) + return; + G4HCofThisEvent *HCE = evt->GetHCofThisEvent(); + RichTbHitsCollection *RHC = NULL; + if (HCE) { + RHC = (RichTbHitsCollection *)(HCE->GetHC(RichTbCID)); } - if(RHC) - { + if (RHC) { G4int n_hit = RHC->entries(); // G4cout << " " << n_hit << "Hits being written out "<<G4endl; - if( m_IsFirstEvent ) { + if (m_IsFirstEvent) { // now write the overall header word. // This is , for now , the verbose level. - OutputDataFS<< curVerboseOutputLevel<< std::endl; - - //write radiator configuration (BLAGO 01/07/15) - OutputDataFS<< aRadConf<< std::endl; + OutputDataFS << curVerboseOutputLevel << std::endl; + // write radiator configuration (BLAGO 01/07/15) + OutputDataFS << aRadConf << std::endl; // CHANGED TO WRITE OUT MIRROR CoC (JDICKENS 02/06/05) /* @@ -95,187 +83,121 @@ void RichTbIOData::WriteOutEventHeaderData(const G4Event * evt) G4double MirrorCoCZ = MirrorPivotZInGlobalArray[MirrorCode] - MirrorInnerRadius * MirrorDirCosZArray[MirrorCode]; OutputDataFS << MirrorCoCX << " " - << MirrorCoCY << " " - << MirrorCoCZ << " " - << MirrorInnerRadius << std::endl; + << MirrorCoCY << " " + << MirrorCoCZ << " " + << MirrorInnerRadius << std::endl; */ // END OF CHANGE - m_IsFirstEvent=false; - + m_IsFirstEvent = false; } - if( curVerboseOutputLevel < 1 ) { - - OutputDataFS<<n_hit<< std::endl; + if (curVerboseOutputLevel < 1) { - } else if ( curVerboseOutputLevel < 3 ) { - OutputDataFS<<n_hit<< " " - << aBeamDir.x()<<" "<<aBeamDir.y() - <<" "<<aBeamDir.z()<<" " - <<std::endl; - } else if ( curVerboseOutputLevel < 5 ) { + OutputDataFS << n_hit << std::endl; - OutputDataFS<<n_hit<< " " - << aBeamPos.x()<<" "<<aBeamPos.y() - << " "<< aBeamPos.z()<<" " - << aBeamDir.x()<<" "<<aBeamDir.y() - <<" "<<aBeamDir.z()<<" " - << std::endl; + } else if (curVerboseOutputLevel < 3) { + OutputDataFS << n_hit << " " << aBeamDir.x() << " " << aBeamDir.y() << " " << aBeamDir.z() << " " + << std::endl; + } else if (curVerboseOutputLevel < 5) { + OutputDataFS << n_hit << " " << aBeamPos.x() << " " << aBeamPos.y() << " " << aBeamPos.z() << " " + << aBeamDir.x() << " " << aBeamDir.y() << " " << aBeamDir.z() << " " << std::endl; } - - - } - - - - } +void RichTbIOData::WriteOutHitData(const G4Event *evt) { + RichTbRunConfig *RConfig = RichTbRunConfig::getRunConfigInstance(); + G4int curVerboseOutputLevel = RConfig->VerboseOutputFileFlag(); -void RichTbIOData::WriteOutHitData(const G4Event * evt) -{ - RichTbRunConfig* RConfig = RichTbRunConfig::getRunConfigInstance(); - G4int curVerboseOutputLevel= RConfig->VerboseOutputFileFlag(); - - - G4SDManager * SDman = G4SDManager::GetSDMpointer(); + G4SDManager *SDman = G4SDManager::GetSDMpointer(); G4String colNam; - G4int RichTbCID = SDman->GetCollectionID(colNam=RichTbHColname); - if(RichTbCID<0) return; - G4HCofThisEvent * HCE = evt->GetHCofThisEvent(); - RichTbHitsCollection* RHC = NULL; - if(HCE) - { - RHC = (RichTbHitsCollection*)(HCE->GetHC(RichTbCID)); + G4int RichTbCID = SDman->GetCollectionID(colNam = RichTbHColname); + if (RichTbCID < 0) + return; + G4HCofThisEvent *HCE = evt->GetHCofThisEvent(); + RichTbHitsCollection *RHC = NULL; + if (HCE) { + RHC = (RichTbHitsCollection *)(HCE->GetHC(RichTbCID)); } - if(RHC) - { + if (RHC) { G4int n_hit = RHC->entries(); // G4cout << " " << n_hit << "Hits being written out "<<G4endl; - for (G4int ih=0; ih<n_hit; ih++ ) { - RichTbHit* aHit = (*RHC)[ih]; - G4int aHitPMTNum = aHit -> GetCurPMTNum(); - G4int aHitPixelNum = aHit -> GetCurPixNum(); - G4ThreeVector aHitPos = aHit -> GetPos(); - G4double aEdep = aHit ->GetEdep() ; - G4ThreeVector aHitLocalPos = aHit ->GetLocalPos(); - G4ThreeVector aHitPeOrigin = aHit -> GetPeOrigin(); + for (G4int ih = 0; ih < n_hit; ih++) { + RichTbHit *aHit = (*RHC)[ih]; + G4int aHitPMTNum = aHit->GetCurPMTNum(); + G4int aHitPixelNum = aHit->GetCurPixNum(); + G4ThreeVector aHitPos = aHit->GetPos(); + G4double aEdep = aHit->GetEdep(); + G4ThreeVector aHitLocalPos = aHit->GetLocalPos(); + G4ThreeVector aHitPeOrigin = aHit->GetPeOrigin(); G4ThreeVector aHitPhOrigin = aHit->GetPhotonOrigin(); - G4ThreeVector aHitPhOnQW = aHit -> GetPhotonIncidenceOnPMTQW(); - G4double aHitCkvCosTh = aHit ->GetCkvCosThetaProd(); - G4double aHitCkvPhi = aHit ->GetCkvPhiProd(); - G4double aHitCkvPhEner = aHit -> GetCkvEnergyProd() ; - G4int aHitRayleighFlag = aHit ->GetRayleighScatFlag(); - G4int aHitMultPMTQWFlag = aHit -> GetPhotonMultIncidenceQW() ; - G4ThreeVector aPeOriginInPhSupFrame =aHit -> GetPeOriginInPhSupport(); - G4ThreeVector aPhEmisDir = aHit -> GetPhEmissionDir(); - G4ThreeVector aPixelLocalCenter = aHit -> getPixelLocalCenter(); - G4ThreeVector aPixelGlobalCenter = aHit -> getPixelGlobalCenter() ; - G4ThreeVector aTIRCoord= aHit -> getTIRRadiatorCoord(); - G4ThreeVector aMIRCoord= aHit -> getMIRRadiatorCoord(); - G4ThreeVector aRFRCoord= aHit -> getRFRRadiatorCoord(); - G4int aMultRefl = aHit ->getMultipleReflFlag(); - G4double aChTkTotMom =aHit ->getChTrackTotMom(); - G4ThreeVector aChTrackThreeMom = aHit ->getChTrackThreeMom (); - - - - if( curVerboseOutputLevel < 1 ) { - OutputDataFS<<" "<< aHitPMTNum<<" "<<aHitPixelNum - <<" "<<aHitPos.x()<<" "<<aHitPos.y() - <<" "<<aHitPos.z()<<" "<< aEdep <<std::endl; - - - }else if ( curVerboseOutputLevel < 2 ) { - - OutputDataFS<<" "<< aHitPMTNum<<" "<<aHitPixelNum - <<" "<<aHitPos.x()<<" "<<aHitPos.y() - <<" "<<aHitPos.z()<<" "<< aEdep - <<" "<<aHitPeOrigin.x()<<" "<<aHitPeOrigin.y() - <<" "<<aHitPeOrigin.z()<<" "<<aHitPhOnQW.x() - <<" "<<aHitPhOnQW.y() <<" "<<aHitPhOnQW.z() - <<" "<<aHitCkvCosTh <<" "<<aHitCkvPhEner - <<" "<<aHitRayleighFlag <<std::endl; - } else if ( curVerboseOutputLevel < 3 ) { - - OutputDataFS<<" "<< aHitPMTNum<<" "<<aHitPixelNum - <<" "<<aHitPos.x()<<" "<<aHitPos.y() - <<" "<<aHitPos.z()<<" "<< aEdep - <<" "<<aHitPeOrigin.x()<<" "<<aHitPeOrigin.y() - <<" "<<aHitPeOrigin.z()<<" "<<aHitPhOnQW.x() - <<" "<<aHitPhOnQW.y() <<" "<<aHitPhOnQW.z() - <<" "<<aHitCkvCosTh <<" "<<aHitCkvPhEner - <<" "<<aHitRayleighFlag - <<" "<<aPeOriginInPhSupFrame.x() - <<" "<<aPeOriginInPhSupFrame.y() - <<" "<<aPeOriginInPhSupFrame.z() - <<" "<<aHitPhOrigin.x() - <<" "<<aHitPhOrigin.y() - <<" "<<aHitPhOrigin.z() - <<" "<<aPhEmisDir.x() - <<" "<<aPhEmisDir.y() - <<" "<<aPhEmisDir.z() - <<" "<<aPixelLocalCenter.x() - <<" "<<aPixelLocalCenter.y() - <<" "<<aPixelLocalCenter.z() - <<" "<<aPixelGlobalCenter.x() - <<" "<<aPixelGlobalCenter.y() - <<" "<<aPixelGlobalCenter.z() - <<" "<< aMultRefl - <<" "<< aTIRCoord.x() - <<" "<< aTIRCoord.y() - <<" "<< aTIRCoord.z() - <<" "<< aMIRCoord.x() - <<" "<< aMIRCoord.y() - <<" "<< aMIRCoord.z() - <<" "<< aRFRCoord.x() - <<" "<< aRFRCoord.y() - <<" "<< aRFRCoord.z() - <<" "<< aChTkTotMom - <<" "<< aChTrackThreeMom.x() - <<" "<< aChTrackThreeMom.y() - <<" "<< aChTrackThreeMom.z() - <<std::endl; - - } else if (curVerboseOutputLevel < 5 ) { - - - OutputDataFS<<" "<< aHitPMTNum<<" "<<aHitPixelNum - <<" "<<aHitPos.x()<<" "<<aHitPos.y() - <<" "<<aHitPos.z()<<" "<< aEdep - <<" "<<aHitLocalPos.x()<<" "<<aHitLocalPos.y() - <<" "<<aHitLocalPos.z()<<" "<<aHitPeOrigin.x() - <<" "<<aHitPeOrigin.y()<<" "<<aHitPeOrigin.z() - <<" "<< aHitPhOnQW.x()<<" "<<aHitPhOnQW.y() - <<" "<< aHitPhOnQW.z()<<" "<<aHitCkvCosTh - <<" "<< aHitCkvPhi<<" "<<aHitCkvPhEner - <<" "<< aHitRayleighFlag<<" "<<aHitMultPMTQWFlag - <<" "<< aHitPhOrigin.x()<<" "<< aHitPhOrigin.y() - <<" "<<aHitPhOrigin.z() - <<std::endl; + G4ThreeVector aHitPhOnQW = aHit->GetPhotonIncidenceOnPMTQW(); + G4double aHitCkvCosTh = aHit->GetCkvCosThetaProd(); + G4double aHitCkvPhi = aHit->GetCkvPhiProd(); + G4double aHitCkvPhEner = aHit->GetCkvEnergyProd(); + G4int aHitRayleighFlag = aHit->GetRayleighScatFlag(); + G4int aHitMultPMTQWFlag = aHit->GetPhotonMultIncidenceQW(); + G4ThreeVector aPeOriginInPhSupFrame = aHit->GetPeOriginInPhSupport(); + G4ThreeVector aPhEmisDir = aHit->GetPhEmissionDir(); + G4ThreeVector aPixelLocalCenter = aHit->getPixelLocalCenter(); + G4ThreeVector aPixelGlobalCenter = aHit->getPixelGlobalCenter(); + G4ThreeVector aTIRCoord = aHit->getTIRRadiatorCoord(); + G4ThreeVector aMIRCoord = aHit->getMIRRadiatorCoord(); + G4ThreeVector aRFRCoord = aHit->getRFRRadiatorCoord(); + G4int aMultRefl = aHit->getMultipleReflFlag(); + G4double aChTkTotMom = aHit->getChTrackTotMom(); + G4ThreeVector aChTrackThreeMom = aHit->getChTrackThreeMom(); + + if (curVerboseOutputLevel < 1) { + OutputDataFS << " " << aHitPMTNum << " " << aHitPixelNum << " " << aHitPos.x() << " " << aHitPos.y() + << " " << aHitPos.z() << " " << aEdep << std::endl; + + } else if (curVerboseOutputLevel < 2) { + + OutputDataFS << " " << aHitPMTNum << " " << aHitPixelNum << " " << aHitPos.x() << " " << aHitPos.y() + << " " << aHitPos.z() << " " << aEdep << " " << aHitPeOrigin.x() << " " << aHitPeOrigin.y() + << " " << aHitPeOrigin.z() << " " << aHitPhOnQW.x() << " " << aHitPhOnQW.y() << " " + << aHitPhOnQW.z() << " " << aHitCkvCosTh << " " << aHitCkvPhEner << " " << aHitRayleighFlag + << std::endl; + } else if (curVerboseOutputLevel < 3) { + + OutputDataFS << " " << aHitPMTNum << " " << aHitPixelNum << " " << aHitPos.x() << " " << aHitPos.y() + << " " << aHitPos.z() << " " << aEdep << " " << aHitPeOrigin.x() << " " << aHitPeOrigin.y() + << " " << aHitPeOrigin.z() << " " << aHitPhOnQW.x() << " " << aHitPhOnQW.y() << " " + << aHitPhOnQW.z() << " " << aHitCkvCosTh << " " << aHitCkvPhEner << " " << aHitRayleighFlag + << " " << aPeOriginInPhSupFrame.x() << " " << aPeOriginInPhSupFrame.y() << " " + << aPeOriginInPhSupFrame.z() << " " << aHitPhOrigin.x() << " " << aHitPhOrigin.y() << " " + << aHitPhOrigin.z() << " " << aPhEmisDir.x() << " " << aPhEmisDir.y() << " " + << aPhEmisDir.z() << " " << aPixelLocalCenter.x() << " " << aPixelLocalCenter.y() << " " + << aPixelLocalCenter.z() << " " << aPixelGlobalCenter.x() << " " << aPixelGlobalCenter.y() + << " " << aPixelGlobalCenter.z() << " " << aMultRefl << " " << aTIRCoord.x() << " " + << aTIRCoord.y() << " " << aTIRCoord.z() << " " << aMIRCoord.x() << " " << aMIRCoord.y() + << " " << aMIRCoord.z() << " " << aRFRCoord.x() << " " << aRFRCoord.y() << " " + << aRFRCoord.z() << " " << aChTkTotMom << " " << aChTrackThreeMom.x() << " " + << aChTrackThreeMom.y() << " " << aChTrackThreeMom.z() << std::endl; + + } else if (curVerboseOutputLevel < 5) { + + OutputDataFS << " " << aHitPMTNum << " " << aHitPixelNum << " " << aHitPos.x() << " " << aHitPos.y() + << " " << aHitPos.z() << " " << aEdep << " " << aHitLocalPos.x() << " " << aHitLocalPos.y() + << " " << aHitLocalPos.z() << " " << aHitPeOrigin.x() << " " << aHitPeOrigin.y() << " " + << aHitPeOrigin.z() << " " << aHitPhOnQW.x() << " " << aHitPhOnQW.y() << " " + << aHitPhOnQW.z() << " " << aHitCkvCosTh << " " << aHitCkvPhi << " " << aHitCkvPhEner + << " " << aHitRayleighFlag << " " << aHitMultPMTQWFlag << " " << aHitPhOrigin.x() << " " + << aHitPhOrigin.y() << " " << aHitPhOrigin.z() << std::endl; } - } - - } - - } -RichTbIOData* RichTbIOData::getRichTbIODataInstance() -{ - if( RichTbIODataInstance == 0) { +RichTbIOData *RichTbIOData::getRichTbIODataInstance() { + if (RichTbIODataInstance == 0) { RichTbIODataInstance = new RichTbIOData(); - } return RichTbIODataInstance; - - } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbPmtPixelEfficiency.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbPmtPixelEfficiency.cc index 7e7b8890ffb09c7fd8628ba40548ecd1c2ab4ac6..363964b57fe18a611a5c2ab7cbcacb54806113ca 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbPmtPixelEfficiency.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbPmtPixelEfficiency.cc @@ -1,19 +1,17 @@ // Include files - -#include <iostream> -#include "Geant4/globals.hh" #include "Geant4/Randomize.hh" +#include "Geant4/globals.hh" #include <cstdlib> #include <fstream> +#include <iostream> #include <sstream> // local -#include "RichTbPmtPixelEfficiency.hh" #include "RichTbGeometryParameters.hh" +#include "RichTbPmtPixelEfficiency.hh" #include "RichTbRunConfig.hh" - //----------------------------------------------------------------------------- // Implementation file for class : RichTbPmtPixelEfficiency // @@ -24,254 +22,226 @@ //============================================================================= // Standard constructor, initializes variables -RichTbPmtPixelEfficiency* RichTbPmtPixelEfficiency::RichTbPmtPixelEfficiencyInstance=0; - +RichTbPmtPixelEfficiency *RichTbPmtPixelEfficiency::RichTbPmtPixelEfficiencyInstance = 0; //============================================================================= -RichTbPmtPixelEfficiency::RichTbPmtPixelEfficiency( ): - mPmtPixelEff (8,std::vector<G4double> (64)), - mPmtPixelLabel(8,std::vector<G4String> (64)) { - - PmtPixelEffInitialize(); - +RichTbPmtPixelEfficiency::RichTbPmtPixelEfficiency() + : mPmtPixelEff(8, std::vector<G4double>(64)), mPmtPixelLabel(8, std::vector<G4String>(64)) { + PmtPixelEffInitialize(); } void RichTbPmtPixelEfficiency::PmtPixelEffInitialize() { - // The following line does not work. - // mPmtPixelEff.resize(RichTbTotNumPmt, std::vector<G4double> (NumPixelTotInPmt, 1.0) ); - RichTbRunConfig* aConfig = RichTbRunConfig:: getRunConfigInstance(); - G4int aRadiatorConfiguration = aConfig ->getRadiatorConfiguration(); - - if(aRadiatorConfiguration == 3) RichTbTotNumPmtFinal = RichTbTotNumPmt15; - else RichTbTotNumPmtFinal = RichTbTotNumPmt; - - mPmtPixelEff.resize(RichTbTotNumPmtFinal); - mPmtPixelLabel.resize(RichTbTotNumPmtFinal); - - std::vector<G4double> aEffInit (NumPixelTotInPmt, 1.0); - std::vector<G4String> aLabelnit (NumPixelTotInPmt, "JU00"); - - for (G4int ipmt =0; ipmt <RichTbTotNumPmtFinal ; ++ipmt){ - mPmtPixelEff [ipmt]= aEffInit; - mPmtPixelLabel[ipmt]= aLabelnit; - } - - std::vector <G4String> aPL(RichTbTotNumPmtFinal,"JA"); - aPL[1]="JA"; - aPL[1]="JA"; - aPL[2]="JB"; - aPL[3]="JB"; - aPL[4]="SA"; - aPL[5]="SA"; - aPL[6]="SB"; - aPL[7]="SB"; - if(RichTbTotNumPmtFinal==RichTbTotNumPmt15) { - aPL[8]="JAB"; - aPL[9]="JAB"; - aPL[10]="JBB"; - aPL[11]="JBB"; - aPL[12]="SAB"; - aPL[13]="SAB"; - aPL[14]="SBB"; - aPL[15]="SBB"; - } - - for (G4int ipm =0; ipm <RichTbTotNumPmtFinal ; ++ipm) { - for ( G4int ipx =0 ; ipx <NumPixelTotInPmt; ++ipx ) { - mPmtPixelLabel[ipm] [ipx] = aPL[ipm] + std::to_string(ipx+1); - } - } - - ReadPixelEfficiency(); - FillPixelEfficiency(); - + // The following line does not work. + // mPmtPixelEff.resize(RichTbTotNumPmt, std::vector<G4double> (NumPixelTotInPmt, 1.0) ); + RichTbRunConfig *aConfig = RichTbRunConfig::getRunConfigInstance(); + G4int aRadiatorConfiguration = aConfig->getRadiatorConfiguration(); + + if (aRadiatorConfiguration == 3) + RichTbTotNumPmtFinal = RichTbTotNumPmt15; + else + RichTbTotNumPmtFinal = RichTbTotNumPmt; + + mPmtPixelEff.resize(RichTbTotNumPmtFinal); + mPmtPixelLabel.resize(RichTbTotNumPmtFinal); + + std::vector<G4double> aEffInit(NumPixelTotInPmt, 1.0); + std::vector<G4String> aLabelnit(NumPixelTotInPmt, "JU00"); + + for (G4int ipmt = 0; ipmt < RichTbTotNumPmtFinal; ++ipmt) { + mPmtPixelEff[ipmt] = aEffInit; + mPmtPixelLabel[ipmt] = aLabelnit; + } + + std::vector<G4String> aPL(RichTbTotNumPmtFinal, "JA"); + aPL[1] = "JA"; + aPL[1] = "JA"; + aPL[2] = "JB"; + aPL[3] = "JB"; + aPL[4] = "SA"; + aPL[5] = "SA"; + aPL[6] = "SB"; + aPL[7] = "SB"; + if (RichTbTotNumPmtFinal == RichTbTotNumPmt15) { + aPL[8] = "JAB"; + aPL[9] = "JAB"; + aPL[10] = "JBB"; + aPL[11] = "JBB"; + aPL[12] = "SAB"; + aPL[13] = "SAB"; + aPL[14] = "SBB"; + aPL[15] = "SBB"; + } + + for (G4int ipm = 0; ipm < RichTbTotNumPmtFinal; ++ipm) { + for (G4int ipx = 0; ipx < NumPixelTotInPmt; ++ipx) { + mPmtPixelLabel[ipm][ipx] = aPL[ipm] + std::to_string(ipx + 1); + } + } + + ReadPixelEfficiency(); + FillPixelEfficiency(); } -G4bool RichTbPmtPixelEfficiency::PmtPixelEffOK (G4int aPmtNum, G4int aPixelNum) { - RichTbRunConfig* aRunConfig = RichTbRunConfig::getRunConfigInstance(); - G4bool aEffFlag = true; - if(aRunConfig ->ApplyPixelEff() ) { - G4double curEff = getPixelEff (aPmtNum,aPixelNum); - G4double RandPx = G4UniformRand(); - if ( RandPx > curEff )aEffFlag = false; - // G4cout<<" PmtPixelEfficiency CurEff randpx flag "<< curEff <<" "<< RandPx <<" "<<aEffFlag<<G4endl; - - - } - return aEffFlag; - +G4bool RichTbPmtPixelEfficiency::PmtPixelEffOK(G4int aPmtNum, G4int aPixelNum) { + RichTbRunConfig *aRunConfig = RichTbRunConfig::getRunConfigInstance(); + G4bool aEffFlag = true; + if (aRunConfig->ApplyPixelEff()) { + G4double curEff = getPixelEff(aPmtNum, aPixelNum); + G4double RandPx = G4UniformRand(); + if (RandPx > curEff) + aEffFlag = false; + // G4cout<<" PmtPixelEfficiency CurEff randpx flag "<< curEff <<" "<< RandPx <<" "<<aEffFlag<<G4endl; + } + return aEffFlag; } - void RichTbPmtPixelEfficiency::FillPixelEfficiency() { - RichTbRunConfig* aRunConfig = RichTbRunConfig::getRunConfigInstance(); - G4int aEffFlag = aRunConfig-> MapmtPixelEfficiencyFlag (); - if(aEffFlag != 0 ){ - for (G4int ipm =0; ipm <RichTbTotNumPmtFinal ; ++ipm) { - for ( G4int ipx =0 ; ipx <NumPixelTotInPmt; ++ipx ) { - G4double aEff = mPmtAnodeEffMap.find( mPmtPixelLabel[ipm][ipx] )->second ; - mPmtPixelEff [ipm] [ipx]= aEff; - // G4cout<<" Pmt Pixel Label eff "<< ipm <<" "<<ipx <<" " - // << mPmtPixelLabel[ipm][ipx] <<" "<<aEff<<G4endl; - - - } - - } - - } - + RichTbRunConfig *aRunConfig = RichTbRunConfig::getRunConfigInstance(); + G4int aEffFlag = aRunConfig->MapmtPixelEfficiencyFlag(); + if (aEffFlag != 0) { + for (G4int ipm = 0; ipm < RichTbTotNumPmtFinal; ++ipm) { + for (G4int ipx = 0; ipx < NumPixelTotInPmt; ++ipx) { + G4double aEff = mPmtAnodeEffMap.find(mPmtPixelLabel[ipm][ipx])->second; + mPmtPixelEff[ipm][ipx] = aEff; + // G4cout<<" Pmt Pixel Label eff "<< ipm <<" "<<ipx <<" " + // << mPmtPixelLabel[ipm][ipx] <<" "<<aEff<<G4endl; + } + } + } } - - - - void RichTbPmtPixelEfficiency::ReadPixelEfficiency() { - RichTbRunConfig* aRunConfig = RichTbRunConfig::getRunConfigInstance(); - G4int aEffFlag = aRunConfig-> MapmtPixelEfficiencyFlag (); - G4int aRadiatorConfiguration = aRunConfig->getRadiatorConfiguration(); - G4String aJuraFileName; - G4String aSaleveFileName; - G4String aJuraFileNameUpgr; - G4String aSaleveFileNameUpgr; - G4String aJuraTop100; - G4String aJuraBottom100; - G4String aSaleveTop100; - G4String aSaleveBottom100; - - - if(aEffFlag != 0 ){ - - if( aEffFlag == 1 ) { // read the optimized effiency - - aJuraFileName = aRunConfig->MapmtPixelOptEffFileNameJura(); - aSaleveFileName = aRunConfig->MapmtPixelOptEffFileNameSaleve() ; - - - }else if ( aEffFlag == 2 ) { // read the thrshold7 efficiency - - aJuraFileName = aRunConfig->MapmtPixelThr7EffFileNameJura() ; - aSaleveFileName = aRunConfig->MapmtPixelThr7EffFileNameSaleve() ; - - } - - aJuraFileNameUpgr = aRunConfig->MapmtPixelOptEffFileNameJuraUpgr(); - aSaleveFileNameUpgr = aRunConfig->MapmtPixelOptEffFileNameSaleveUpgr(); - - aJuraTop100 = aRunConfig->MapmtPixelEffFileNameJuraTop100(); - aJuraBottom100 = aRunConfig->MapmtPixelEffFileNameJuraBottom100(); - aSaleveTop100 = aRunConfig->MapmtPixelEffFileNameSaleveTop100(); - aSaleveBottom100 = aRunConfig->MapmtPixelEffFileNameSaleveBottom100(); - - G4cout<<" Now reading Pmt pixel efficiency files " - << aJuraFileName <<"\n" - << aSaleveFileName<<"\n" - << aJuraFileNameUpgr<<"\n" - << aSaleveFileNameUpgr<<"\n" - << aJuraTop100<<"\n" - << aJuraBottom100<<"\n" - << aSaleveTop100<<"\n" - << aSaleveBottom100<<G4endl; - - mPmtAnodeEffMap.clear(); - - -// ReadAndCopyPixelEffFromFile(aJuraFileName); -// ReadAndCopyPixelEffFromFile(aSaleveFileName); - ReadAndCopyPixelEffFromFile(aJuraTop100); - ReadAndCopyPixelEffFromFile(aSaleveTop100); - if(aRadiatorConfiguration==3) {//testbeam 2015 upgrade dummy refls - // ReadAndCopyPixelEffFromFile(aJuraFileNameUpgr); - // ReadAndCopyPixelEffFromFile(aSaleveFileNameUpgr); - ReadAndCopyPixelEffFromFile(aJuraBottom100); - ReadAndCopyPixelEffFromFile(aSaleveBottom100); - } - } - + RichTbRunConfig *aRunConfig = RichTbRunConfig::getRunConfigInstance(); + G4int aEffFlag = aRunConfig->MapmtPixelEfficiencyFlag(); + G4int aRadiatorConfiguration = aRunConfig->getRadiatorConfiguration(); + G4String aJuraFileName; + G4String aSaleveFileName; + G4String aJuraFileNameUpgr; + G4String aSaleveFileNameUpgr; + G4String aJuraTop100; + G4String aJuraBottom100; + G4String aSaleveTop100; + G4String aSaleveBottom100; + + if (aEffFlag != 0) { + + if (aEffFlag == 1) { // read the optimized effiency + + aJuraFileName = aRunConfig->MapmtPixelOptEffFileNameJura(); + aSaleveFileName = aRunConfig->MapmtPixelOptEffFileNameSaleve(); + + } else if (aEffFlag == 2) { // read the thrshold7 efficiency + + aJuraFileName = aRunConfig->MapmtPixelThr7EffFileNameJura(); + aSaleveFileName = aRunConfig->MapmtPixelThr7EffFileNameSaleve(); + } + + aJuraFileNameUpgr = aRunConfig->MapmtPixelOptEffFileNameJuraUpgr(); + aSaleveFileNameUpgr = aRunConfig->MapmtPixelOptEffFileNameSaleveUpgr(); + + aJuraTop100 = aRunConfig->MapmtPixelEffFileNameJuraTop100(); + aJuraBottom100 = aRunConfig->MapmtPixelEffFileNameJuraBottom100(); + aSaleveTop100 = aRunConfig->MapmtPixelEffFileNameSaleveTop100(); + aSaleveBottom100 = aRunConfig->MapmtPixelEffFileNameSaleveBottom100(); + + G4cout << " Now reading Pmt pixel efficiency files " << aJuraFileName << "\n" + << aSaleveFileName << "\n" + << aJuraFileNameUpgr << "\n" + << aSaleveFileNameUpgr << "\n" + << aJuraTop100 << "\n" + << aJuraBottom100 << "\n" + << aSaleveTop100 << "\n" + << aSaleveBottom100 << G4endl; + + mPmtAnodeEffMap.clear(); + + // ReadAndCopyPixelEffFromFile(aJuraFileName); + // ReadAndCopyPixelEffFromFile(aSaleveFileName); + ReadAndCopyPixelEffFromFile(aJuraTop100); + ReadAndCopyPixelEffFromFile(aSaleveTop100); + if (aRadiatorConfiguration == 3) { // testbeam 2015 upgrade dummy refls + // ReadAndCopyPixelEffFromFile(aJuraFileNameUpgr); + // ReadAndCopyPixelEffFromFile(aSaleveFileNameUpgr); + ReadAndCopyPixelEffFromFile(aJuraBottom100); + ReadAndCopyPixelEffFromFile(aSaleveBottom100); + } + } } - -void RichTbPmtPixelEfficiency::ReadAndCopyPixelEffFromFile(G4String aInpFileName ) { - - const char* aFileName_char = aInpFileName.c_str(); - std::ifstream aInpFileStr (aFileName_char); - if( !aInpFileStr ) { - G4cout<<" Unable to read from "<<aInpFileName <<G4endl; - - }else { - - - - G4String aAnodeName="AnodeName"; - G4String ClaroNumberS = "0"; - G4String ClaroChanNumS = "0"; - G4String aPmtEffS = "1.0"; - G4double aPmtEff =1.0; - G4int NumItemsPerLine=4; - G4String HeaderName_PixelName,HeaderName_ClaroNum,HeaderName_ClaroChanNum, HeaderName_Eff; - - G4int curLineNum=-1; - std::vector<G4String>line_record; - - while (aInpFileStr ) { - std::string aLine; - if(!std::getline (aInpFileStr , aLine) ) break; - curLineNum++; - std::istringstream ss(aLine); - line_record.clear(); - line_record.reserve(NumItemsPerLine); - - while (ss) { - std::string aWord; - if(!std::getline(ss,aWord,','))break; - line_record.push_back(aWord); - } - - if(curLineNum == 0 ) { - HeaderName_PixelName=line_record[0]; - HeaderName_ClaroNum=line_record[1]; - HeaderName_ClaroChanNum= line_record[2]; - HeaderName_Eff =line_record[3]; - - // G4cout<<"FileHeader "<<HeaderName_PixelName <<" "<<HeaderName_ClaroNum<<" " - // << HeaderName_ClaroChanNum<<" "<<HeaderName_Eff<<G4endl; - - - }else { - aAnodeName = line_record[0]; - ClaroNumberS = line_record[1]; - ClaroChanNumS = line_record[2]; - aPmtEffS = line_record[3]; - aPmtEff = atof( aPmtEffS.c_str()); - - // G4cout<<" Reading Anode name claronum clarochan eff "<< aAnodeName<<" " - // <<ClaroNumberS<<" "<<ClaroChanNumS<<" "<<aPmtEff<<G4endl; - - mPmtAnodeEffMap.insert(std::make_pair(aAnodeName,aPmtEff)); - - } - } - } +void RichTbPmtPixelEfficiency::ReadAndCopyPixelEffFromFile(G4String aInpFileName) { + + const char *aFileName_char = aInpFileName.c_str(); + std::ifstream aInpFileStr(aFileName_char); + if (!aInpFileStr) { + G4cout << " Unable to read from " << aInpFileName << G4endl; + + } else { + + G4String aAnodeName = "AnodeName"; + G4String ClaroNumberS = "0"; + G4String ClaroChanNumS = "0"; + G4String aPmtEffS = "1.0"; + G4double aPmtEff = 1.0; + G4int NumItemsPerLine = 4; + G4String HeaderName_PixelName, HeaderName_ClaroNum, HeaderName_ClaroChanNum, HeaderName_Eff; + + G4int curLineNum = -1; + std::vector<G4String> line_record; + + while (aInpFileStr) { + std::string aLine; + if (!std::getline(aInpFileStr, aLine)) + break; + curLineNum++; + std::istringstream ss(aLine); + line_record.clear(); + line_record.reserve(NumItemsPerLine); + + while (ss) { + std::string aWord; + if (!std::getline(ss, aWord, ',')) + break; + line_record.push_back(aWord); + } + + if (curLineNum == 0) { + HeaderName_PixelName = line_record[0]; + HeaderName_ClaroNum = line_record[1]; + HeaderName_ClaroChanNum = line_record[2]; + HeaderName_Eff = line_record[3]; + + // G4cout<<"FileHeader "<<HeaderName_PixelName <<" "<<HeaderName_ClaroNum<<" " + // << HeaderName_ClaroChanNum<<" "<<HeaderName_Eff<<G4endl; + + } else { + aAnodeName = line_record[0]; + ClaroNumberS = line_record[1]; + ClaroChanNumS = line_record[2]; + aPmtEffS = line_record[3]; + aPmtEff = atof(aPmtEffS.c_str()); + + // G4cout<<" Reading Anode name claronum clarochan eff "<< aAnodeName<<" " + // <<ClaroNumberS<<" "<<ClaroChanNumS<<" "<<aPmtEff<<G4endl; + + mPmtAnodeEffMap.insert(std::make_pair(aAnodeName, aPmtEff)); + } + } + } } - - - //============================================================================= // Destructor //============================================================================= -RichTbPmtPixelEfficiency::~RichTbPmtPixelEfficiency() { ;} +RichTbPmtPixelEfficiency::~RichTbPmtPixelEfficiency() { ; } //============================================================================= -RichTbPmtPixelEfficiency* RichTbPmtPixelEfficiency::getRichTbPmtPixelEfficiencyInstance() { - if(RichTbPmtPixelEfficiencyInstance == 0 ) { - RichTbPmtPixelEfficiencyInstance = new RichTbPmtPixelEfficiency(); - } - - return RichTbPmtPixelEfficiencyInstance; +RichTbPmtPixelEfficiency *RichTbPmtPixelEfficiency::getRichTbPmtPixelEfficiencyInstance() { + if (RichTbPmtPixelEfficiencyInstance == 0) { + RichTbPmtPixelEfficiencyInstance = new RichTbPmtPixelEfficiency(); + } + return RichTbPmtPixelEfficiencyInstance; } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbRunAction.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbRunAction.cc index 2ff01dbe7eb450c7425468a1daf902ed72c0ab50..9f7bbbc95e7ea7b1293ebe26db7b69807caf7b99 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbRunAction.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbRunAction.cc @@ -11,71 +11,57 @@ #include "RichTbRunAction.hh" -#include "Geant4/G4ios.hh" #include "Geant4/G4Run.hh" #include "Geant4/G4UImanager.hh" +#include "Geant4/G4ios.hh" #include "RichTbAnalysisManager.hh" -#include "RichTbCounter.hh" #include "RichTbBeamProperty.hh" +#include "RichTbCounter.hh" -RichTbRunAction::RichTbRunAction() -{ +RichTbRunAction::RichTbRunAction() { - timer = new G4Timer; - ranalysisManager = RichTbAnalysisManager::getInstance(); + timer = new G4Timer; + ranalysisManager = RichTbAnalysisManager::getInstance(); - ranalysisManager->BeginOfRunAnalysis(); + ranalysisManager->BeginOfRunAnalysis(); // now for the counters - RichTbCounter* aRichCounter = - RichTbCounter::getRichTbCounterInstance(); - + // RichTbCounter *aRichCounter = RichTbCounter::getRichTbCounterInstance(); } +RichTbRunAction::~RichTbRunAction() { delete timer; } -RichTbRunAction::~RichTbRunAction() -{ - delete timer; -} - +void RichTbRunAction::BeginOfRunAction(const G4Run *aRun) { + G4UImanager *UI = G4UImanager::GetUIpointer(); + // UI->ApplyCommand("/run/verbose 2"); + // UI->ApplyCommand("/event/verbose 2"); + UI->ApplyCommand("/run/verbose 1"); + UI->ApplyCommand("/event/verbose 0"); + // UI->ApplyCommand("/tracking/verbose 0"); + // UI->ApplyCommand("/tracking/verbose 4"); + UI->ApplyCommand("/tracking/verbose 0"); + UI->ApplyCommand("/particle/process/verbose 0"); + UI->ApplyCommand("/control/verbose 0"); -void RichTbRunAction::BeginOfRunAction(const G4Run * aRun) -{ - G4UImanager *UI = G4UImanager::GetUIpointer(); - // UI->ApplyCommand("/run/verbose 2"); - // UI->ApplyCommand("/event/verbose 2"); - UI->ApplyCommand("/run/verbose 1"); - UI->ApplyCommand("/event/verbose 0"); - // UI->ApplyCommand("/tracking/verbose 0"); - // UI->ApplyCommand("/tracking/verbose 4"); - UI->ApplyCommand("/tracking/verbose 0"); - UI->ApplyCommand("/particle/process/verbose 0"); - UI->ApplyCommand("/control/verbose 0"); + G4cout << "### Run " << aRun->GetRunID() << " start." << G4endl; - G4cout << "### Run " << aRun->GetRunID() << " start." << G4endl; + timer->Start(); - timer->Start(); + // ranalysisManager = RichTbAnalysisManager::getInstance(); - // ranalysisManager = RichTbAnalysisManager::getInstance(); + // ranalysisManager->BeginOfRunAnalysis(); + // initialise the beam property. - // ranalysisManager->BeginOfRunAnalysis(); - // initialise the beam property. - - RichTbBeamProperty* aBeamProperty= - RichTbBeamProperty::getRichTbBeamPropertyInstance(); - + // RichTbBeamProperty *aBeamProperty = RichTbBeamProperty::getRichTbBeamPropertyInstance(); } +void RichTbRunAction::EndOfRunAction(const G4Run *aRun) { -void RichTbRunAction::EndOfRunAction(const G4Run * aRun) -{ - - ranalysisManager = RichTbAnalysisManager::getInstance(); + ranalysisManager = RichTbAnalysisManager::getInstance(); - ranalysisManager->EndOfRunAnalysis(); + ranalysisManager->EndOfRunAnalysis(); - timer->Stop(); - G4cout << "number of event = " << aRun->GetNumberOfEvent() - << " " << *timer << G4endl; + timer->Stop(); + G4cout << "number of event = " << aRun->GetNumberOfEvent() << " " << *timer << G4endl; } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbRunConfig.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbRunConfig.cc index ff523407868146a66c961f021e275d33906bba65..c306b0f31e6f522017b031c3e55226be3c5a3ea1 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbRunConfig.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbRunConfig.cc @@ -1,477 +1,423 @@ -#include <iostream> -#include <fstream> #include "RichTbRunConfig.hh" -#include "RichTbMaterialParameters.hh" #include "Geant4/globals.hh" #include "RichTbGeometryParameters.hh" +#include "RichTbMaterialParameters.hh" +#include <fstream> +#include <iostream> RichTbRunConfig *RichTbRunConfig::RunConfigInstance = 0; RichTbRunConfig::RichTbRunConfig() -: mDemagConstShiftAtAnodeX(6), mDemagConstShiftAtAnodeY(6), - mPMTAdditionalLocalRotationZ(6),mPMTAlignmentLocalShiftX(6), - mPMTAlignmentLocalShiftY(6), - mPhSupFrameAdditionalShift(std::vector<G4double>(3)) { + : mDemagConstShiftAtAnodeX(6), mDemagConstShiftAtAnodeY(6), mPMTAdditionalLocalRotationZ(6), + mPMTAlignmentLocalShiftX(6), mPMTAlignmentLocalShiftY(6), mPhSupFrameAdditionalShift(std::vector<G4double>(3)) { // in the above 3 is a dummy value. - // Now open the Run Configuration file. - const std::string G4RICHTBSIMHROOT = std::string(std::getenv("G4RICHTBSIMHTESTROOT")) + "/"; - const std::string RunConfigFile = G4RICHTBSIMHROOT + "options/RunConfig.dat"; - G4cout<<" Run Configuration Input is from "<< RunConfigFile<<G4endl; - - std::ifstream finpconf( RunConfigFile); - - G4double NitrogenPressureInAtmos=1.0; - G4double NitrogenTemperatureInKelvin = 293.0*0; - G4double c4f10PressureInAtmos=1.0; - G4double c4f10TemperatureInKelvin = 293.0*0; - - G4double MirrorAdditionalTiltX = 0.0; - G4double MirrorAdditionalTiltY = 0.0; - - - G4double aDemagConstShiftAtAnodeXPMT0 = 0.0; - G4double aDemagConstShiftAtAnodeXPMT1 = 0.0; - G4double aDemagConstShiftAtAnodeXPMT2 = 0.0; - G4double aDemagConstShiftAtAnodeXPMT3 = 0.0; - G4double aDemagConstShiftAtAnodeXPMT4 = 0.0; - G4double aDemagConstShiftAtAnodeXPMT5 = 0.0; - - G4double aDemagConstShiftAtAnodeYPMT0 = 0.0; - G4double aDemagConstShiftAtAnodeYPMT1 = 0.0; - G4double aDemagConstShiftAtAnodeYPMT2 = 0.0; - G4double aDemagConstShiftAtAnodeYPMT3 = 0.0; - G4double aDemagConstShiftAtAnodeYPMT4 = 0.0; - G4double aDemagConstShiftAtAnodeYPMT5 = 0.0; - - G4double aPMT0AdditionalLocalRotationZ =0.0; - G4double aPMT1AdditionalLocalRotationZ =0.0; - G4double aPMT2AdditionalLocalRotationZ =0.0; - G4double aPMT3AdditionalLocalRotationZ =0.0; - G4double aPMT4AdditionalLocalRotationZ =0.0; - G4double aPMT5AdditionalLocalRotationZ =0.0; - - G4double aPMT0AlignmentShiftX=0.0*CLHEP::mm; - G4double aPMT1AlignmentShiftX=0.0*CLHEP::mm; - G4double aPMT2AlignmentShiftX=0.0*CLHEP::mm; - G4double aPMT3AlignmentShiftX=0.0*CLHEP::mm; - G4double aPMT4AlignmentShiftX=0.0*CLHEP::mm; - G4double aPMT5AlignmentShiftX=0.0*CLHEP::mm; - - G4double aPMT0AlignmentShiftY=0.0*CLHEP::mm; - G4double aPMT1AlignmentShiftY=0.0*CLHEP::mm; - G4double aPMT2AlignmentShiftY=0.0*CLHEP::mm; - G4double aPMT3AlignmentShiftY=0.0*CLHEP::mm; - G4double aPMT4AlignmentShiftY=0.0*CLHEP::mm; - G4double aPMT5AlignmentShiftY=0.0*CLHEP::mm; - - G4double aPhSupFrameAdditionalShiftX=0.0; - G4double aPhSupFrameAdditionalShiftY=0.0; - G4double aPhSupFrameAdditionalShiftZ=0.0; - - - if(!finpconf) { - G4cout<<" Unable to open the Run Configuration file. " - <<" Please check the directory and file names "<<G4endl; - - - }else { - - //while(! (finpconf.eof())) { - - G4cout<<"Now reading the Run Configuration "<<G4endl; - - //line 1 - finpconf>>RichTbHall_visib; - finpconf>>RichTbUpgradeVessel_visib; - finpconf>>RichTbCrystal_visib; - finpconf>>RichTbCrystalCover_visib; - finpconf>>RichTbPhDFrame_visib; - finpconf>>RichTbEC_visib; - finpconf>>RichTbPMTMaster_visib; - finpconf>>RichTbPMTSMaster_visib; - finpconf>>RichTbPMTEnvelope_visib; - finpconf>>RichTbPMTQuartzW_visib; - finpconf>>RichTbPMTPhCathode_visib; - finpconf>>RichTbPMTAnode_visib; - finpconf>>RichTbPMTFrontRing_visib; - finpconf>>RichTbLens_visib; - finpconf>>RichTbUpgradeRadiator_visib; - finpconf>> RichTbUpgradeMirror_visib; - finpconf>> RichTbUpgradeDarkCover_visib; - finpconf>> RichTbUpgradeUpsDarkCover_visib; - finpconf>> RichTbUpgradeSideDarkCover_visib; - finpconf>> RichTbUpgradeDnsDarkCover_visib; - - finpconf>> RichTbHpdQW_visib; - finpconf>> RichTbHpdPHC_visib; - finpconf>> RichTbHpdSID_visib; - finpconf>> RichTbHpdENV_visib; - finpconf>> RichTbHpdENVCAP_visib; - finpconf>> RichTbHpdSM_visib; - finpconf>> RichTbHpdMas_visib; - finpconf>> RichTbHpdSiPix_visib; - - - RichTbPhDetSupFrame_visib=RichTbPhDFrame_visib; - - - // finpconf>> RichTbPhDetSupFrame_visib; - // finpconf>> RichTbGasQuWin_visib; - // finpconf>> RichTbPMTMaster_visib; - // finpconf>> RichTbPMTSMaster_visib; - // finpconf>> RichTbPMTEnvelope_visib; - // finpconf>> RichTbPMTEndCap_visib; - // finpconf>> RichTbPMTQuartzW_visib; - // finpconf>> RichTbPMTPhCathode_visib; - - //line 2 - finpconf>> GasTypeCode; - finpconf>> NitrogenPressureInAtmos; - finpconf>> NitrogenTemperatureInKelvin; - finpconf>> c4f10PressureInAtmos; - finpconf>> c4f10TemperatureInKelvin; - finpconf>> MirrorOrientCode; - finpconf>> MirrorAdditionalTiltX; - finpconf>> MirrorAdditionalTiltY; - - //line 3 - finpconf>> mNonOptimalPMTCondition; - finpconf>> mNonOptimalPMTAbsEff; - finpconf>> mHpdpeBackScaProb; - finpconf>> mRandomSeedInput; - - //line 4 - finpconf>> RichTbNumPartEvent; - finpconf>> RichTbParticleTypeCode; - finpconf>> RichTbParticleStartPosCode; - finpconf>> RichTbParticleDirectionCode; - finpconf>> RichTbParticleEnergyCode; - - finpconf>> RichTbParticleMomentum; - finpconf>> PosBeamFraction; - finpconf>> mBeamDirX; - finpconf>> mBeamDirY; - finpconf>> mBeamDivergenceX; - finpconf>> mBeamDivergenceY; - finpconf>> mBeamXPosShift; - finpconf>> mBeamYPosShift; - finpconf>> mBeamSpecialXPos; - finpconf>> mBeamSpecialYPos; - finpconf>> mBeamSpecialZPos; - finpconf>> mBeamSpecialXRange; - finpconf>> mConstPhotWlenBeam; - finpconf>> mPhotWlenMinBeam; - finpconf>> mPhotWlenMaxBeam; - - finpconf>> PMTPEMomInit; - - finpconf>> WriteOutputFile; - finpconf>> HitCreationOption; - - finpconf>> ECXShift; //starting point is 70.6 CLHEP::mm - - //line 5 - finpconf>> MirrorReflFileName; - MirrorReflFileName = G4RICHTBSIMHROOT + MirrorReflFileName; - //line 6 - finpconf>> OutputFileName; - //line 7 - finpconf>> OutputHistoFileName; - //line 8 - finpconf>> OutputNtupleFileName; - - //line 9 - finpconf>> mBatchModeFlag; - finpconf>> mNumEventInBatchMode; - finpconf>> mVerboseInfoFlag ; - finpconf>> mVerboseOutputFileFlag ; - finpconf>> mSpecialStudyVesselRotation; - finpconf>> mPMTSiReflFlag; - - - //line 10 - finpconf>> aDemagConstShiftAtAnodeXPMT0; - finpconf>> aDemagConstShiftAtAnodeXPMT1; - finpconf>> aDemagConstShiftAtAnodeXPMT2; - finpconf>> aDemagConstShiftAtAnodeXPMT3; - finpconf>> aDemagConstShiftAtAnodeXPMT4; - finpconf>> aDemagConstShiftAtAnodeXPMT5; - - finpconf>> aDemagConstShiftAtAnodeYPMT0; - finpconf>> aDemagConstShiftAtAnodeYPMT1; - finpconf>> aDemagConstShiftAtAnodeYPMT2; - finpconf>> aDemagConstShiftAtAnodeYPMT3; - finpconf>> aDemagConstShiftAtAnodeYPMT4; - finpconf>> aDemagConstShiftAtAnodeYPMT5; - - finpconf>> aPMT0AdditionalLocalRotationZ; - finpconf>> aPMT1AdditionalLocalRotationZ; - finpconf>> aPMT2AdditionalLocalRotationZ; - finpconf>> aPMT3AdditionalLocalRotationZ; - finpconf>> aPMT4AdditionalLocalRotationZ; - finpconf>> aPMT5AdditionalLocalRotationZ; - - //line 11 - finpconf>> aPMT0AlignmentShiftX; - finpconf>> aPMT1AlignmentShiftX; - finpconf>> aPMT2AlignmentShiftX; - finpconf>> aPMT3AlignmentShiftX; - finpconf>> aPMT4AlignmentShiftX; - finpconf>> aPMT5AlignmentShiftX; - - finpconf>> aPMT0AlignmentShiftY; - finpconf>> aPMT1AlignmentShiftY; - finpconf>> aPMT2AlignmentShiftY; - finpconf>> aPMT3AlignmentShiftY; - finpconf>> aPMT4AlignmentShiftY; - finpconf>> aPMT5AlignmentShiftY; - - //line 12 - finpconf>> aPhSupFrameAdditionalShiftX; - finpconf>> aPhSupFrameAdditionalShiftY; - finpconf>> aPhSupFrameAdditionalShiftZ; - - finpconf>> mPhSupFrameAdditionalVertTilt; - finpconf>> mPhSupFrameAdditionalZRot; - - //line 13 - finpconf>> mSpecialStudyCrystalRotation; - finpconf>> mSpecialStudyCrystalRotationX; - finpconf>> mSpecialStudyCrystalRotationY; - - //line 14 - finpconf>> mSpecialStudyMasterRotation; - finpconf>> mSpecialStudyMasterRotationX; - finpconf>> mSpecialStudyMasterRotationY; - - //line 15 - finpconf>> mRadiatorConfiguration; - //line 16 - finpconf>> mMapmtDetectionEfficiency; - finpconf>> mMapmtPixelEfficiencyFlag; - //line 17 - finpconf>> mMapmtPixelOptEffFileNameJura; - mMapmtPixelOptEffFileNameJura = G4RICHTBSIMHROOT + mMapmtPixelOptEffFileNameJura; - //line 18 - finpconf>> mMapmtPixelThr7EffFileNameJura; - mMapmtPixelThr7EffFileNameJura = G4RICHTBSIMHROOT + mMapmtPixelThr7EffFileNameJura; - //line 19 - finpconf>> mMapmtPixelOptEffFileNameSaleve; - mMapmtPixelOptEffFileNameSaleve = G4RICHTBSIMHROOT + mMapmtPixelOptEffFileNameSaleve; - //line 20 - finpconf>> mMapmtPixelThr7EffFileNameSaleve; - mMapmtPixelThr7EffFileNameSaleve = G4RICHTBSIMHROOT + mMapmtPixelThr7EffFileNameSaleve; - //line 21 - finpconf>> mMapmtPixelOptEffFileNameJuraUpgradeDummy; - mMapmtPixelOptEffFileNameJuraUpgradeDummy = G4RICHTBSIMHROOT + mMapmtPixelOptEffFileNameJuraUpgradeDummy; - //line 22 - finpconf>> mMapmtPixelOptEffFileNameSaleveUpgradeDummy; - mMapmtPixelOptEffFileNameSaleveUpgradeDummy = G4RICHTBSIMHROOT + mMapmtPixelOptEffFileNameSaleveUpgradeDummy; - //line 23 - finpconf>> mMapmtPixelEffFileNameJuraTop100; - mMapmtPixelEffFileNameJuraTop100 = G4RICHTBSIMHROOT + mMapmtPixelEffFileNameJuraTop100; - //line 24 - finpconf>> mMapmtPixelEffFileNameSaleveTop100; - mMapmtPixelEffFileNameSaleveTop100 = G4RICHTBSIMHROOT + mMapmtPixelEffFileNameSaleveTop100; - //line 25 - finpconf>> mMapmtPixelEffFileNameJuraBottom100; - mMapmtPixelEffFileNameJuraBottom100 = G4RICHTBSIMHROOT + mMapmtPixelEffFileNameJuraBottom100; - //line 26 - finpconf>> mMapmtPixelEffFileNameSaleveBottom100; - mMapmtPixelEffFileNameSaleveBottom100 = G4RICHTBSIMHROOT + mMapmtPixelEffFileNameSaleveBottom100; - - - G4cout<<"End of reading the Run Configuration "<<G4endl; - - - //} - - - } - - mDemagConstShiftAtAnodeX.clear(); - mDemagConstShiftAtAnodeY.clear(); - mPMTAdditionalLocalRotationZ.clear(); - mPMTAlignmentLocalShiftX.clear(); - mPMTAlignmentLocalShiftY.clear(); - - mDemagConstShiftAtAnodeX.push_back(aDemagConstShiftAtAnodeXPMT0*CLHEP::mm); - mDemagConstShiftAtAnodeX.push_back(aDemagConstShiftAtAnodeXPMT1*CLHEP::mm); - mDemagConstShiftAtAnodeX.push_back(aDemagConstShiftAtAnodeXPMT2*CLHEP::mm); - mDemagConstShiftAtAnodeX.push_back(aDemagConstShiftAtAnodeXPMT3*CLHEP::mm); - mDemagConstShiftAtAnodeX.push_back(aDemagConstShiftAtAnodeXPMT4*CLHEP::mm); - mDemagConstShiftAtAnodeX.push_back(aDemagConstShiftAtAnodeXPMT5*CLHEP::mm); - mDemagConstShiftAtAnodeY.push_back(aDemagConstShiftAtAnodeYPMT0*CLHEP::mm); - mDemagConstShiftAtAnodeY.push_back(aDemagConstShiftAtAnodeYPMT1*CLHEP::mm); - mDemagConstShiftAtAnodeY.push_back(aDemagConstShiftAtAnodeYPMT2*CLHEP::mm); - mDemagConstShiftAtAnodeY.push_back(aDemagConstShiftAtAnodeYPMT3*CLHEP::mm); - mDemagConstShiftAtAnodeY.push_back(aDemagConstShiftAtAnodeYPMT4*CLHEP::mm); - mDemagConstShiftAtAnodeY.push_back(aDemagConstShiftAtAnodeYPMT5*CLHEP::mm); - mPMTAdditionalLocalRotationZ.push_back(aPMT0AdditionalLocalRotationZ* CLHEP::rad); - mPMTAdditionalLocalRotationZ.push_back(aPMT1AdditionalLocalRotationZ* CLHEP::rad); - mPMTAdditionalLocalRotationZ.push_back(aPMT2AdditionalLocalRotationZ* CLHEP::rad); - mPMTAdditionalLocalRotationZ.push_back(aPMT3AdditionalLocalRotationZ* CLHEP::rad); - mPMTAdditionalLocalRotationZ.push_back(aPMT4AdditionalLocalRotationZ* CLHEP::rad); - mPMTAdditionalLocalRotationZ.push_back(aPMT5AdditionalLocalRotationZ* CLHEP::rad); - - mPMTAlignmentLocalShiftX.push_back(aPMT0AlignmentShiftX*CLHEP::mm); - mPMTAlignmentLocalShiftX.push_back(aPMT1AlignmentShiftX*CLHEP::mm); - mPMTAlignmentLocalShiftX.push_back(aPMT2AlignmentShiftX*CLHEP::mm); - mPMTAlignmentLocalShiftX.push_back(aPMT3AlignmentShiftX*CLHEP::mm); - mPMTAlignmentLocalShiftX.push_back(aPMT4AlignmentShiftX*CLHEP::mm); - mPMTAlignmentLocalShiftX.push_back(aPMT5AlignmentShiftX*CLHEP::mm); - - mPMTAlignmentLocalShiftY.push_back( aPMT0AlignmentShiftY*CLHEP::mm); - mPMTAlignmentLocalShiftY.push_back( aPMT1AlignmentShiftY*CLHEP::mm); - mPMTAlignmentLocalShiftY.push_back( aPMT2AlignmentShiftY*CLHEP::mm); - mPMTAlignmentLocalShiftY.push_back( aPMT3AlignmentShiftY*CLHEP::mm); - mPMTAlignmentLocalShiftY.push_back( aPMT4AlignmentShiftY*CLHEP::mm); - mPMTAlignmentLocalShiftY.push_back( aPMT5AlignmentShiftY*CLHEP::mm); - - - - - mPhSupFrameAdditionalShift.clear(); - mPhSupFrameAdditionalShift.push_back( aPhSupFrameAdditionalShiftX); - mPhSupFrameAdditionalShift.push_back( aPhSupFrameAdditionalShiftY); - mPhSupFrameAdditionalShift.push_back( aPhSupFrameAdditionalShiftZ); - - G4cout<<"Current Run Configuration is as follows "<<G4endl; - G4cout<<" Graphics Visibility : Hall Vessel Crystal " - << RichTbHall_visib<<" "<<RichTbUpgradeVessel_visib<<" " - << RichTbCrystal_visib<<" " - <<" " <<G4endl; - G4cout<<" Graphics Visibility : PhDetSupFrame EC PMTMaster PMTSMaster " - << " PMTEnvelope PMTEndCap PMTQuartzW PMTPhCathode " - << RichTbPhDetSupFrame_visib<<" " - << RichTbEC_visib<<" "<< RichTbPMTMaster_visib<<" " - <<RichTbPMTSMaster_visib<<" "<<RichTbPMTEnvelope_visib<<" " - <<RichTbPMTEndCap_visib<<" "<<RichTbPMTQuartzW_visib<<" " - <<RichTbPMTPhCathode_visib<<" "<<G4endl; - G4cout<<"Nitrogen Pressure Temp "<<NitrogenPressureInAtmos<<" " - <<NitrogenTemperatureInKelvin<<G4endl; - G4cout<<"c4f10 Pressure Temp "<<c4f10PressureInAtmos<<" " - <<c4f10TemperatureInKelvin<<G4endl; - G4cout<<" Mirror Orientation code Additional Tilt wrt XAxis YAxis " - << MirrorOrientCode<<" " - << MirrorAdditionalTiltX <<" "<<MirrorAdditionalTiltY <<G4endl; - - - G4cout<<" NonOptimal PMT Condition NonOptimal PMT absolute Efficiency " - << mNonOptimalPMTCondition<<" "<<mNonOptimalPMTAbsEff<<G4endl; - - - G4cout<<" ParticleGun Generation: Num of Particles generated per event " - << RichTbNumPartEvent<<G4endl; - G4cout<<" ParticleGun : Code for ParticleType StartPos Direction Energy " - << "and Value for MomValue PosBeamFraction: " - << RichTbParticleTypeCode<<" " - << RichTbParticleStartPosCode<<" " - << RichTbParticleDirectionCode<<" " - <<RichTbParticleEnergyCode<<" " - <<RichTbParticleMomentum<<" " - <<PosBeamFraction<<G4endl; - G4cout<<" ParticleGun : BeamDirXY BeamDivXY BeamPosShift XY " - << mBeamDirX <<" "<< mBeamDirY<<" " - << mBeamDivergenceX<<" "<<mBeamDivergenceY - << " "<<mBeamXPosShift<<" "<< mBeamYPosShift <<G4endl; - - G4cout<<" Special studies Beam XYZ BeamXRange phot wlen wlenmin wlenmax " - <<mBeamSpecialXPos<<" "<< mBeamSpecialYPos<<" " - <<mBeamSpecialZPos<<" " - <<mBeamSpecialXRange<<" " - <<mConstPhotWlenBeam<<" " - << mPhotWlenMinBeam<<" " - << mPhotWlenMaxBeam<< G4endl; - - G4cout<<"Activate beamshiftntuple "<<mActivateBeamShiftNtuple<<G4endl; - - G4cout<<" PMTPEMomInit "<< PMTPEMomInit<<G4endl; - G4cout<<"Flag to WriteOut HitCreationOption " - <<WriteOutputFile<<" "<< HitCreationOption<<" " - << G4endl; - G4cout<<" Mirror refl file name "<<MirrorReflFileName<<G4endl; - - G4cout<<" Event Output FileName "<<OutputFileName<<G4endl; - G4cout<<"Histo Output file Name "<< OutputHistoFileName<<G4endl; - G4cout<<"Ntuple Output file Name "<< OutputNtupleFileName<<G4endl; - - G4cout<<"BatchMode NumEvInBatchMode VerboseInfo " - <<" VerboseOutput studyvesselRot " - << mBatchModeFlag<<" "<< mNumEventInBatchMode - << " " <<mVerboseInfoFlag<<" " - << mVerboseOutputFileFlag<<" " - << mSpecialStudyVesselRotation<< G4endl; - - // G4cout<< " Mapmt Pixel gap "<< mMapmtPixelGap<<G4endl; - G4cout<< "Pmt pixel efficiency flag "<< mMapmtPixelEfficiencyFlag <<G4endl; - - /* - for(G4int ihp=0; ihp< NumPMTs; ihp++) { - G4cout<<"PMT Demag Const shiftX in PMT "<<ihp <<" "<< - mDemagConstShiftAtAnodeX[ihp]<<G4endl; - G4cout<<"PMT Demag Const ShiftY in PMT "<<ihp<<" "<< - mDemagConstShiftAtAnodeY[ihp]<<G4endl; - - G4cout<<"PMT Additional RotZ wrt its Axis "<<ihp<<" "<< - mPMTAdditionalLocalRotationZ[ihp]<<G4endl; - - G4cout<<"PMT Additional Xshift in phdetsupframe "<<ihp<<" "<< - mPMTAlignmentLocalShiftX[ihp]<<G4endl; - - G4cout<<"PMT additionl Y shift in phdet supframe "<<ihp<<" "<< - mPMTAlignmentLocalShiftY[ihp]<<G4endl; - } - */ - G4cout<<" PhDet Frame Additional Shift XYZ " - << mPhSupFrameAdditionalShift[0]<<" " - << mPhSupFrameAdditionalShift[1]<<" " - << mPhSupFrameAdditionalShift[2]<<" " - <<G4endl; - - G4cout<<" PhDet Frame Additional VertTilt Zrot " - << mPhSupFrameAdditionalVertTilt<<" " - << mPhSupFrameAdditionalZRot<<G4endl; - - - NitrogenPressure = NitrogenPressureInAtmos* CLHEP::atmosphere; - NitrogenTemperature = NitrogenTemperatureInKelvin*CLHEP::kelvin; - - NominalNitrogenPressure = 1.0*CLHEP::atmosphere; - NominalNitrogenTemperature = 293.0*CLHEP::kelvin; - - c4f10Pressure = c4f10PressureInAtmos* CLHEP::atmosphere; - c4f10Temperature = c4f10TemperatureInKelvin*CLHEP::kelvin; - - Nominalc4f10Pressure = 1.0*CLHEP::atmosphere; - Nominalc4f10Temperature = 293.0*CLHEP::kelvin; - - MirrorAddTiltX= MirrorAdditionalTiltX* CLHEP::rad; - MirrorAddTiltY = MirrorAdditionalTiltY* CLHEP::rad; - - -} - - -RichTbRunConfig::~RichTbRunConfig() -{ - ; + const std::string G4RICHTBSIMHROOT = std::string(std::getenv("G4RICHTBSIMHTESTROOT")) + "/"; + const std::string RunConfigFile = G4RICHTBSIMHROOT + "options/RunConfig.dat"; + G4cout << " Run Configuration Input is from " << RunConfigFile << G4endl; + + std::ifstream finpconf(RunConfigFile); + + G4double NitrogenPressureInAtmos = 1.0; + G4double NitrogenTemperatureInKelvin = 293.0 * 0; + G4double c4f10PressureInAtmos = 1.0; + G4double c4f10TemperatureInKelvin = 293.0 * 0; + + G4double MirrorAdditionalTiltX = 0.0; + G4double MirrorAdditionalTiltY = 0.0; + + G4double aDemagConstShiftAtAnodeXPMT0 = 0.0; + G4double aDemagConstShiftAtAnodeXPMT1 = 0.0; + G4double aDemagConstShiftAtAnodeXPMT2 = 0.0; + G4double aDemagConstShiftAtAnodeXPMT3 = 0.0; + G4double aDemagConstShiftAtAnodeXPMT4 = 0.0; + G4double aDemagConstShiftAtAnodeXPMT5 = 0.0; + + G4double aDemagConstShiftAtAnodeYPMT0 = 0.0; + G4double aDemagConstShiftAtAnodeYPMT1 = 0.0; + G4double aDemagConstShiftAtAnodeYPMT2 = 0.0; + G4double aDemagConstShiftAtAnodeYPMT3 = 0.0; + G4double aDemagConstShiftAtAnodeYPMT4 = 0.0; + G4double aDemagConstShiftAtAnodeYPMT5 = 0.0; + + G4double aPMT0AdditionalLocalRotationZ = 0.0; + G4double aPMT1AdditionalLocalRotationZ = 0.0; + G4double aPMT2AdditionalLocalRotationZ = 0.0; + G4double aPMT3AdditionalLocalRotationZ = 0.0; + G4double aPMT4AdditionalLocalRotationZ = 0.0; + G4double aPMT5AdditionalLocalRotationZ = 0.0; + + G4double aPMT0AlignmentShiftX = 0.0 * CLHEP::mm; + G4double aPMT1AlignmentShiftX = 0.0 * CLHEP::mm; + G4double aPMT2AlignmentShiftX = 0.0 * CLHEP::mm; + G4double aPMT3AlignmentShiftX = 0.0 * CLHEP::mm; + G4double aPMT4AlignmentShiftX = 0.0 * CLHEP::mm; + G4double aPMT5AlignmentShiftX = 0.0 * CLHEP::mm; + + G4double aPMT0AlignmentShiftY = 0.0 * CLHEP::mm; + G4double aPMT1AlignmentShiftY = 0.0 * CLHEP::mm; + G4double aPMT2AlignmentShiftY = 0.0 * CLHEP::mm; + G4double aPMT3AlignmentShiftY = 0.0 * CLHEP::mm; + G4double aPMT4AlignmentShiftY = 0.0 * CLHEP::mm; + G4double aPMT5AlignmentShiftY = 0.0 * CLHEP::mm; + + G4double aPhSupFrameAdditionalShiftX = 0.0; + G4double aPhSupFrameAdditionalShiftY = 0.0; + G4double aPhSupFrameAdditionalShiftZ = 0.0; + + if (!finpconf) { + G4cout << " Unable to open the Run Configuration file. " + << " Please check the directory and file names " << G4endl; + + } else { + + // while(! (finpconf.eof())) { + + G4cout << "Now reading the Run Configuration " << G4endl; + + // line 1 + finpconf >> RichTbHall_visib; + finpconf >> RichTbUpgradeVessel_visib; + finpconf >> RichTbCrystal_visib; + finpconf >> RichTbCrystalCover_visib; + finpconf >> RichTbPhDFrame_visib; + finpconf >> RichTbEC_visib; + finpconf >> RichTbPMTMaster_visib; + finpconf >> RichTbPMTSMaster_visib; + finpconf >> RichTbPMTEnvelope_visib; + finpconf >> RichTbPMTQuartzW_visib; + finpconf >> RichTbPMTPhCathode_visib; + finpconf >> RichTbPMTAnode_visib; + finpconf >> RichTbPMTFrontRing_visib; + finpconf >> RichTbLens_visib; + finpconf >> RichTbUpgradeRadiator_visib; + finpconf >> RichTbUpgradeMirror_visib; + finpconf >> RichTbUpgradeDarkCover_visib; + finpconf >> RichTbUpgradeUpsDarkCover_visib; + finpconf >> RichTbUpgradeSideDarkCover_visib; + finpconf >> RichTbUpgradeDnsDarkCover_visib; + + finpconf >> RichTbHpdQW_visib; + finpconf >> RichTbHpdPHC_visib; + finpconf >> RichTbHpdSID_visib; + finpconf >> RichTbHpdENV_visib; + finpconf >> RichTbHpdENVCAP_visib; + finpconf >> RichTbHpdSM_visib; + finpconf >> RichTbHpdMas_visib; + finpconf >> RichTbHpdSiPix_visib; + + RichTbPhDetSupFrame_visib = RichTbPhDFrame_visib; + + // finpconf>> RichTbPhDetSupFrame_visib; + // finpconf>> RichTbGasQuWin_visib; + // finpconf>> RichTbPMTMaster_visib; + // finpconf>> RichTbPMTSMaster_visib; + // finpconf>> RichTbPMTEnvelope_visib; + // finpconf>> RichTbPMTEndCap_visib; + // finpconf>> RichTbPMTQuartzW_visib; + // finpconf>> RichTbPMTPhCathode_visib; + + // line 2 + finpconf >> GasTypeCode; + finpconf >> NitrogenPressureInAtmos; + finpconf >> NitrogenTemperatureInKelvin; + finpconf >> c4f10PressureInAtmos; + finpconf >> c4f10TemperatureInKelvin; + finpconf >> MirrorOrientCode; + finpconf >> MirrorAdditionalTiltX; + finpconf >> MirrorAdditionalTiltY; + + // line 3 + finpconf >> mNonOptimalPMTCondition; + finpconf >> mNonOptimalPMTAbsEff; + finpconf >> mHpdpeBackScaProb; + finpconf >> mRandomSeedInput; + + // line 4 + finpconf >> RichTbNumPartEvent; + finpconf >> RichTbParticleTypeCode; + finpconf >> RichTbParticleStartPosCode; + finpconf >> RichTbParticleDirectionCode; + finpconf >> RichTbParticleEnergyCode; + + finpconf >> RichTbParticleMomentum; + finpconf >> PosBeamFraction; + finpconf >> mBeamDirX; + finpconf >> mBeamDirY; + finpconf >> mBeamDivergenceX; + finpconf >> mBeamDivergenceY; + finpconf >> mBeamXPosShift; + finpconf >> mBeamYPosShift; + finpconf >> mBeamSpecialXPos; + finpconf >> mBeamSpecialYPos; + finpconf >> mBeamSpecialZPos; + finpconf >> mBeamSpecialXRange; + finpconf >> mConstPhotWlenBeam; + finpconf >> mPhotWlenMinBeam; + finpconf >> mPhotWlenMaxBeam; + + finpconf >> PMTPEMomInit; + + finpconf >> WriteOutputFile; + finpconf >> HitCreationOption; + + finpconf >> ECXShift; // starting point is 70.6 CLHEP::mm + + // line 5 + finpconf >> MirrorReflFileName; + MirrorReflFileName = G4RICHTBSIMHROOT + MirrorReflFileName; + // line 6 + finpconf >> OutputFileName; + // line 7 + finpconf >> OutputHistoFileName; + // line 8 + finpconf >> OutputNtupleFileName; + + // line 9 + finpconf >> mBatchModeFlag; + finpconf >> mNumEventInBatchMode; + finpconf >> mVerboseInfoFlag; + finpconf >> mVerboseOutputFileFlag; + finpconf >> mSpecialStudyVesselRotation; + finpconf >> mPMTSiReflFlag; + + // line 10 + finpconf >> aDemagConstShiftAtAnodeXPMT0; + finpconf >> aDemagConstShiftAtAnodeXPMT1; + finpconf >> aDemagConstShiftAtAnodeXPMT2; + finpconf >> aDemagConstShiftAtAnodeXPMT3; + finpconf >> aDemagConstShiftAtAnodeXPMT4; + finpconf >> aDemagConstShiftAtAnodeXPMT5; + + finpconf >> aDemagConstShiftAtAnodeYPMT0; + finpconf >> aDemagConstShiftAtAnodeYPMT1; + finpconf >> aDemagConstShiftAtAnodeYPMT2; + finpconf >> aDemagConstShiftAtAnodeYPMT3; + finpconf >> aDemagConstShiftAtAnodeYPMT4; + finpconf >> aDemagConstShiftAtAnodeYPMT5; + + finpconf >> aPMT0AdditionalLocalRotationZ; + finpconf >> aPMT1AdditionalLocalRotationZ; + finpconf >> aPMT2AdditionalLocalRotationZ; + finpconf >> aPMT3AdditionalLocalRotationZ; + finpconf >> aPMT4AdditionalLocalRotationZ; + finpconf >> aPMT5AdditionalLocalRotationZ; + + // line 11 + finpconf >> aPMT0AlignmentShiftX; + finpconf >> aPMT1AlignmentShiftX; + finpconf >> aPMT2AlignmentShiftX; + finpconf >> aPMT3AlignmentShiftX; + finpconf >> aPMT4AlignmentShiftX; + finpconf >> aPMT5AlignmentShiftX; + + finpconf >> aPMT0AlignmentShiftY; + finpconf >> aPMT1AlignmentShiftY; + finpconf >> aPMT2AlignmentShiftY; + finpconf >> aPMT3AlignmentShiftY; + finpconf >> aPMT4AlignmentShiftY; + finpconf >> aPMT5AlignmentShiftY; + + // line 12 + finpconf >> aPhSupFrameAdditionalShiftX; + finpconf >> aPhSupFrameAdditionalShiftY; + finpconf >> aPhSupFrameAdditionalShiftZ; + + finpconf >> mPhSupFrameAdditionalVertTilt; + finpconf >> mPhSupFrameAdditionalZRot; + + // line 13 + finpconf >> mSpecialStudyCrystalRotation; + finpconf >> mSpecialStudyCrystalRotationX; + finpconf >> mSpecialStudyCrystalRotationY; + + // line 14 + finpconf >> mSpecialStudyMasterRotation; + finpconf >> mSpecialStudyMasterRotationX; + finpconf >> mSpecialStudyMasterRotationY; + + // line 15 + finpconf >> mRadiatorConfiguration; + // line 16 + finpconf >> mMapmtDetectionEfficiency; + finpconf >> mMapmtPixelEfficiencyFlag; + // line 17 + finpconf >> mMapmtPixelOptEffFileNameJura; + mMapmtPixelOptEffFileNameJura = G4RICHTBSIMHROOT + mMapmtPixelOptEffFileNameJura; + // line 18 + finpconf >> mMapmtPixelThr7EffFileNameJura; + mMapmtPixelThr7EffFileNameJura = G4RICHTBSIMHROOT + mMapmtPixelThr7EffFileNameJura; + // line 19 + finpconf >> mMapmtPixelOptEffFileNameSaleve; + mMapmtPixelOptEffFileNameSaleve = G4RICHTBSIMHROOT + mMapmtPixelOptEffFileNameSaleve; + // line 20 + finpconf >> mMapmtPixelThr7EffFileNameSaleve; + mMapmtPixelThr7EffFileNameSaleve = G4RICHTBSIMHROOT + mMapmtPixelThr7EffFileNameSaleve; + // line 21 + finpconf >> mMapmtPixelOptEffFileNameJuraUpgradeDummy; + mMapmtPixelOptEffFileNameJuraUpgradeDummy = G4RICHTBSIMHROOT + mMapmtPixelOptEffFileNameJuraUpgradeDummy; + // line 22 + finpconf >> mMapmtPixelOptEffFileNameSaleveUpgradeDummy; + mMapmtPixelOptEffFileNameSaleveUpgradeDummy = G4RICHTBSIMHROOT + mMapmtPixelOptEffFileNameSaleveUpgradeDummy; + // line 23 + finpconf >> mMapmtPixelEffFileNameJuraTop100; + mMapmtPixelEffFileNameJuraTop100 = G4RICHTBSIMHROOT + mMapmtPixelEffFileNameJuraTop100; + // line 24 + finpconf >> mMapmtPixelEffFileNameSaleveTop100; + mMapmtPixelEffFileNameSaleveTop100 = G4RICHTBSIMHROOT + mMapmtPixelEffFileNameSaleveTop100; + // line 25 + finpconf >> mMapmtPixelEffFileNameJuraBottom100; + mMapmtPixelEffFileNameJuraBottom100 = G4RICHTBSIMHROOT + mMapmtPixelEffFileNameJuraBottom100; + // line 26 + finpconf >> mMapmtPixelEffFileNameSaleveBottom100; + mMapmtPixelEffFileNameSaleveBottom100 = G4RICHTBSIMHROOT + mMapmtPixelEffFileNameSaleveBottom100; + + G4cout << "End of reading the Run Configuration " << G4endl; + + //} + } + + mDemagConstShiftAtAnodeX.clear(); + mDemagConstShiftAtAnodeY.clear(); + mPMTAdditionalLocalRotationZ.clear(); + mPMTAlignmentLocalShiftX.clear(); + mPMTAlignmentLocalShiftY.clear(); + + mDemagConstShiftAtAnodeX.push_back(aDemagConstShiftAtAnodeXPMT0 * CLHEP::mm); + mDemagConstShiftAtAnodeX.push_back(aDemagConstShiftAtAnodeXPMT1 * CLHEP::mm); + mDemagConstShiftAtAnodeX.push_back(aDemagConstShiftAtAnodeXPMT2 * CLHEP::mm); + mDemagConstShiftAtAnodeX.push_back(aDemagConstShiftAtAnodeXPMT3 * CLHEP::mm); + mDemagConstShiftAtAnodeX.push_back(aDemagConstShiftAtAnodeXPMT4 * CLHEP::mm); + mDemagConstShiftAtAnodeX.push_back(aDemagConstShiftAtAnodeXPMT5 * CLHEP::mm); + mDemagConstShiftAtAnodeY.push_back(aDemagConstShiftAtAnodeYPMT0 * CLHEP::mm); + mDemagConstShiftAtAnodeY.push_back(aDemagConstShiftAtAnodeYPMT1 * CLHEP::mm); + mDemagConstShiftAtAnodeY.push_back(aDemagConstShiftAtAnodeYPMT2 * CLHEP::mm); + mDemagConstShiftAtAnodeY.push_back(aDemagConstShiftAtAnodeYPMT3 * CLHEP::mm); + mDemagConstShiftAtAnodeY.push_back(aDemagConstShiftAtAnodeYPMT4 * CLHEP::mm); + mDemagConstShiftAtAnodeY.push_back(aDemagConstShiftAtAnodeYPMT5 * CLHEP::mm); + mPMTAdditionalLocalRotationZ.push_back(aPMT0AdditionalLocalRotationZ * CLHEP::rad); + mPMTAdditionalLocalRotationZ.push_back(aPMT1AdditionalLocalRotationZ * CLHEP::rad); + mPMTAdditionalLocalRotationZ.push_back(aPMT2AdditionalLocalRotationZ * CLHEP::rad); + mPMTAdditionalLocalRotationZ.push_back(aPMT3AdditionalLocalRotationZ * CLHEP::rad); + mPMTAdditionalLocalRotationZ.push_back(aPMT4AdditionalLocalRotationZ * CLHEP::rad); + mPMTAdditionalLocalRotationZ.push_back(aPMT5AdditionalLocalRotationZ * CLHEP::rad); + + mPMTAlignmentLocalShiftX.push_back(aPMT0AlignmentShiftX * CLHEP::mm); + mPMTAlignmentLocalShiftX.push_back(aPMT1AlignmentShiftX * CLHEP::mm); + mPMTAlignmentLocalShiftX.push_back(aPMT2AlignmentShiftX * CLHEP::mm); + mPMTAlignmentLocalShiftX.push_back(aPMT3AlignmentShiftX * CLHEP::mm); + mPMTAlignmentLocalShiftX.push_back(aPMT4AlignmentShiftX * CLHEP::mm); + mPMTAlignmentLocalShiftX.push_back(aPMT5AlignmentShiftX * CLHEP::mm); + + mPMTAlignmentLocalShiftY.push_back(aPMT0AlignmentShiftY * CLHEP::mm); + mPMTAlignmentLocalShiftY.push_back(aPMT1AlignmentShiftY * CLHEP::mm); + mPMTAlignmentLocalShiftY.push_back(aPMT2AlignmentShiftY * CLHEP::mm); + mPMTAlignmentLocalShiftY.push_back(aPMT3AlignmentShiftY * CLHEP::mm); + mPMTAlignmentLocalShiftY.push_back(aPMT4AlignmentShiftY * CLHEP::mm); + mPMTAlignmentLocalShiftY.push_back(aPMT5AlignmentShiftY * CLHEP::mm); + + mPhSupFrameAdditionalShift.clear(); + mPhSupFrameAdditionalShift.push_back(aPhSupFrameAdditionalShiftX); + mPhSupFrameAdditionalShift.push_back(aPhSupFrameAdditionalShiftY); + mPhSupFrameAdditionalShift.push_back(aPhSupFrameAdditionalShiftZ); + + G4cout << "Current Run Configuration is as follows " << G4endl; + G4cout << " Graphics Visibility : Hall Vessel Crystal " << RichTbHall_visib << " " << RichTbUpgradeVessel_visib + << " " << RichTbCrystal_visib << " " + << " " << G4endl; + G4cout << " Graphics Visibility : PhDetSupFrame EC PMTMaster PMTSMaster " + << " PMTEnvelope PMTEndCap PMTQuartzW PMTPhCathode " << RichTbPhDetSupFrame_visib << " " << RichTbEC_visib + << " " << RichTbPMTMaster_visib << " " << RichTbPMTSMaster_visib << " " << RichTbPMTEnvelope_visib + << " " << RichTbPMTEndCap_visib << " " << RichTbPMTQuartzW_visib << " " << RichTbPMTPhCathode_visib + << " " << G4endl; + G4cout << "Nitrogen Pressure Temp " << NitrogenPressureInAtmos << " " << NitrogenTemperatureInKelvin << G4endl; + G4cout << "c4f10 Pressure Temp " << c4f10PressureInAtmos << " " << c4f10TemperatureInKelvin << G4endl; + G4cout << " Mirror Orientation code Additional Tilt wrt XAxis YAxis " << MirrorOrientCode << " " + << MirrorAdditionalTiltX << " " << MirrorAdditionalTiltY << G4endl; + + G4cout << " NonOptimal PMT Condition NonOptimal PMT absolute Efficiency " << mNonOptimalPMTCondition << " " + << mNonOptimalPMTAbsEff << G4endl; + + G4cout << " ParticleGun Generation: Num of Particles generated per event " << RichTbNumPartEvent << G4endl; + G4cout << " ParticleGun : Code for ParticleType StartPos Direction Energy " + << "and Value for MomValue PosBeamFraction: " << RichTbParticleTypeCode << " " + << RichTbParticleStartPosCode << " " << RichTbParticleDirectionCode << " " << RichTbParticleEnergyCode + << " " << RichTbParticleMomentum << " " << PosBeamFraction << G4endl; + G4cout << " ParticleGun : BeamDirXY BeamDivXY BeamPosShift XY " << mBeamDirX << " " << mBeamDirY << " " + << mBeamDivergenceX << " " << mBeamDivergenceY << " " << mBeamXPosShift << " " << mBeamYPosShift + << G4endl; + + G4cout << " Special studies Beam XYZ BeamXRange phot wlen wlenmin wlenmax " << mBeamSpecialXPos << " " + << mBeamSpecialYPos << " " << mBeamSpecialZPos << " " << mBeamSpecialXRange << " " << mConstPhotWlenBeam + << " " << mPhotWlenMinBeam << " " << mPhotWlenMaxBeam << G4endl; + + G4cout << "Activate beamshiftntuple " << mActivateBeamShiftNtuple << G4endl; + + G4cout << " PMTPEMomInit " << PMTPEMomInit << G4endl; + G4cout << "Flag to WriteOut HitCreationOption " << WriteOutputFile << " " << HitCreationOption << " " + << G4endl; + G4cout << " Mirror refl file name " << MirrorReflFileName << G4endl; + + G4cout << " Event Output FileName " << OutputFileName << G4endl; + G4cout << "Histo Output file Name " << OutputHistoFileName << G4endl; + G4cout << "Ntuple Output file Name " << OutputNtupleFileName << G4endl; + + G4cout << "BatchMode NumEvInBatchMode VerboseInfo " + << " VerboseOutput studyvesselRot " << mBatchModeFlag << " " << mNumEventInBatchMode << " " + << mVerboseInfoFlag << " " << mVerboseOutputFileFlag << " " << mSpecialStudyVesselRotation << G4endl; + + // G4cout<< " Mapmt Pixel gap "<< mMapmtPixelGap<<G4endl; + G4cout << "Pmt pixel efficiency flag " << mMapmtPixelEfficiencyFlag << G4endl; + + /* + for(G4int ihp=0; ihp< NumPMTs; ihp++) { + G4cout<<"PMT Demag Const shiftX in PMT "<<ihp <<" "<< + mDemagConstShiftAtAnodeX[ihp]<<G4endl; + G4cout<<"PMT Demag Const ShiftY in PMT "<<ihp<<" "<< + mDemagConstShiftAtAnodeY[ihp]<<G4endl; + + G4cout<<"PMT Additional RotZ wrt its Axis "<<ihp<<" "<< + mPMTAdditionalLocalRotationZ[ihp]<<G4endl; + + G4cout<<"PMT Additional Xshift in phdetsupframe "<<ihp<<" "<< + mPMTAlignmentLocalShiftX[ihp]<<G4endl; + + G4cout<<"PMT additionl Y shift in phdet supframe "<<ihp<<" "<< + mPMTAlignmentLocalShiftY[ihp]<<G4endl; + } + */ + G4cout << " PhDet Frame Additional Shift XYZ " << mPhSupFrameAdditionalShift[0] << " " + << mPhSupFrameAdditionalShift[1] << " " << mPhSupFrameAdditionalShift[2] << " " << G4endl; + + G4cout << " PhDet Frame Additional VertTilt Zrot " << mPhSupFrameAdditionalVertTilt << " " + << mPhSupFrameAdditionalZRot << G4endl; + + NitrogenPressure = NitrogenPressureInAtmos * CLHEP::atmosphere; + NitrogenTemperature = NitrogenTemperatureInKelvin * CLHEP::kelvin; + + NominalNitrogenPressure = 1.0 * CLHEP::atmosphere; + NominalNitrogenTemperature = 293.0 * CLHEP::kelvin; + + c4f10Pressure = c4f10PressureInAtmos * CLHEP::atmosphere; + c4f10Temperature = c4f10TemperatureInKelvin * CLHEP::kelvin; + + Nominalc4f10Pressure = 1.0 * CLHEP::atmosphere; + Nominalc4f10Temperature = 293.0 * CLHEP::kelvin; + + MirrorAddTiltX = MirrorAdditionalTiltX * CLHEP::rad; + MirrorAddTiltY = MirrorAdditionalTiltY * CLHEP::rad; } +RichTbRunConfig::~RichTbRunConfig() { ; } -RichTbRunConfig *RichTbRunConfig::getRunConfigInstance() -{ +RichTbRunConfig *RichTbRunConfig::getRunConfigInstance() { - if (RunConfigInstance == 0) { - RunConfigInstance = new RichTbRunConfig(); - } - - return RunConfigInstance; + if (RunConfigInstance == 0) { + RunConfigInstance = new RichTbRunConfig(); + } + return RunConfigInstance; } - - diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbUpgradeHpdSD.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbUpgradeHpdSD.cc index 4ac3ac09d170e3774d50729c67fb186a309ae3e0..6da7c943a8801c9dad8c728efad97e147b6ebea0 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbUpgradeHpdSD.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbUpgradeHpdSD.cc @@ -1,25 +1,22 @@ -// Include files - - +// Include files // local #include "RichTbUpgradeHpdSD.hh" -#include "RichTbHit.hh" -#include "RichTbGeometryParameters.hh" -#include "Geant4/G4Step.hh" #include "Geant4/G4HCofThisEvent.hh" -#include "Geant4/G4Track.hh" +#include "Geant4/G4Navigator.hh" #include "Geant4/G4SDManager.hh" -#include "Geant4/G4ios.hh" +#include "Geant4/G4Step.hh" #include "Geant4/G4TouchableHistory.hh" -#include "RichTbRunConfig.hh" -#include "RichTbUserTrackInfo.hh" -#include "RichTbPhotoElectron.hh" +#include "Geant4/G4Track.hh" #include "Geant4/G4TransportationManager.hh" -#include "Geant4/G4Navigator.hh" -#include "RichTbUserTrackInfo.hh" #include "Geant4/G4VProcess.hh" +#include "Geant4/G4ios.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbHit.hh" #include "RichTbMiscNames.hh" +#include "RichTbPhotoElectron.hh" +#include "RichTbRunConfig.hh" +#include "RichTbUserTrackInfo.hh" //----------------------------------------------------------------------------- // Implementation file for class : RichTbUpgradeHpdSD @@ -30,203 +27,180 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbUpgradeHpdSD::RichTbUpgradeHpdSD(G4String DetName):G4VSensitiveDetector(DetName), - HpdSDID(std::vector<G4int>(NumHpds*NumPixelTotInSingleHpd , -1)),HCID(-1) -{ +RichTbUpgradeHpdSD::RichTbUpgradeHpdSD(G4String DetName) + : G4VSensitiveDetector(DetName), HpdSDID(std::vector<G4int>(NumHpds * NumPixelTotInSingleHpd, -1)), HCID(-1) { - // if ((int) collectionName.size() == 0) { + // if ((int) collectionName.size() == 0) { // collectionName.clear(); // collectionName.reserve(2); // collectionName.push_back(RichTbHColname); - collectionName.push_back(RichTbHColnameHpd); - // } - // G4cout<<" Collection name size in hpdsd "<< (int) collectionName.size()<<G4endl; - - RichTbHitCollIndex=0; - RichTbSDHpdName=DetName; - - + collectionName.push_back(RichTbHColnameHpd); + // } + // G4cout<<" Collection name size in hpdsd "<< (int) collectionName.size()<<G4endl; + RichTbHitCollIndex = 0; + RichTbSDHpdName = DetName; } //============================================================================= // Destructor //============================================================================= -RichTbUpgradeHpdSD::~RichTbUpgradeHpdSD() {} +RichTbUpgradeHpdSD::~RichTbUpgradeHpdSD() {} //============================================================================= -void RichTbUpgradeHpdSD::Initialize(G4HCofThisEvent* HCE ) { +void RichTbUpgradeHpdSD::Initialize(G4HCofThisEvent *HCE) { // G4cout<<" Now init RichTbUpgradeSD Hpd "<<G4endl; - RichTbHitCollectionHpd = new RichTbHitsCollection(SensitiveDetectorName,collectionName[RichTbHitCollIndex]); + RichTbHitCollectionHpd = new RichTbHitsCollection(SensitiveDetectorName, collectionName[RichTbHitCollIndex]); - // RichTbHitCollectionHpd = new RichTbHitsCollection(RichTbSDHpdName,collectionName[RichTbHitCollIndex]); - - // G4cout<<" RichTbUpgradeSD : Created RichTbHitCollection with "<< collectionName[RichTbHitCollIndex] <<G4endl; - if( HCID < 0 ){ - HCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[RichTbHitCollIndex]); - } - - HCE->AddHitsCollection( HCID, RichTbHitCollectionHpd ); + // RichTbHitCollectionHpd = new RichTbHitsCollection(RichTbSDHpdName,collectionName[RichTbHitCollIndex]); - for(G4int ipx = 0; ipx < (int) HpdSDID.size(); ipx++){ - HpdSDID[ipx]=-1; + // G4cout<<" RichTbUpgradeSD : Created RichTbHitCollection with "<< collectionName[RichTbHitCollIndex] <<G4endl; + if (HCID < 0) { + HCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[RichTbHitCollIndex]); } - - RichTbRunConfig* aRunConfig = RichTbRunConfig::getRunConfigInstance(); - CurrentHitCreationOption= aRunConfig->getHitCreationOption(); - // G4cout<<" Now end init RichTbUpgradeSD Hpd "<<G4endl; + HCE->AddHitsCollection(HCID, RichTbHitCollectionHpd); + + for (G4int ipx = 0; ipx < (int)HpdSDID.size(); ipx++) { + HpdSDID[ipx] = -1; + } + RichTbRunConfig *aRunConfig = RichTbRunConfig::getRunConfigInstance(); + CurrentHitCreationOption = aRunConfig->getHitCreationOption(); + // G4cout<<" Now end init RichTbUpgradeSD Hpd "<<G4endl; } - -void RichTbUpgradeHpdSD::EndOfEvent(G4HCofThisEvent* /* HCE */){ + +void RichTbUpgradeHpdSD::EndOfEvent(G4HCofThisEvent * /* HCE */) { // if( HCID < 0 ){ // HCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[RichTbHitCollIndex]); } - // HCE->AddHitsCollection( HCID, RichTbHitCollectionHpd ); - + // HCE->AddHitsCollection( HCID, RichTbHitCollectionHpd ); } -G4bool RichTbUpgradeHpdSD::ProcessHits(G4Step*aStep,G4TouchableHistory*ROhist) { +G4bool RichTbUpgradeHpdSD::ProcessHits(G4Step *aStep, G4TouchableHistory *ROhist) { // G4cout<<" Now in hpd SD process hits "<< ROhist <<G4endl; - - if(!ROhist) return false; + + if (!ROhist) + return false; G4double edep = aStep->GetTotalEnergyDeposit(); - if(edep < 0.0001) return false; - - G4StepPoint* pPreStepPoint = aStep->GetPreStepPoint(); - G4TouchableHistory* CurTT = - (G4TouchableHistory*)(pPreStepPoint->GetTouchable()); - CurTT -> MoveUpHistory(2); - G4String curnameVol = CurTT -> GetVolume()->GetName(); - G4int CurrentHpdNumber= CurTT -> GetVolume() -> GetCopyNo(); - // G4cout<< " RichTbUpgradeSD: Hpd Number name "<< CurrentHpdNumber <<" "<<curnameVol<<G4endl; - G4VPhysicalVolume* ROphysVol = ROhist->GetVolume(); - G4int CurrentPixelNumber = ROphysVol->GetCopyNo(); - G4int CopyId = CurrentPixelNumber + ( CurrentHpdNumber * NumPixelTotInSingleHpd ) ; - if( (CurrentHitCreationOption==0 && HpdSDID[CopyId ] == -1) || - (CurrentHitCreationOption==1 )) { - - G4ThreeVector CurGlobalPos =aStep->GetPreStepPoint()->GetPosition(); - G4Navigator* theNavigator = - G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking(); - - G4ThreeVector CurLocalPos = theNavigator->GetGlobalToLocalTransform().TransformPoint(CurGlobalPos ); - G4ThreeVector CurLocalPixelCenter = ROphysVol ->GetTranslation() ; - G4ThreeVector CurGlobalPixelCenter =theNavigator ->GetLocalToGlobalTransform().TransformPoint(CurLocalPixelCenter) ; - G4ThreeVector CurLocalPosWrtLocalPixelCenter = CurLocalPos - CurLocalPixelCenter; - G4bool CurHitInPixelGapFlag = false; - - - - G4Track* aTrack = aStep->GetTrack(); + if (edep < 0.0001) + return false; + + G4StepPoint *pPreStepPoint = aStep->GetPreStepPoint(); + G4TouchableHistory *CurTT = (G4TouchableHistory *)(pPreStepPoint->GetTouchable()); + CurTT->MoveUpHistory(2); + G4String curnameVol = CurTT->GetVolume()->GetName(); + G4int CurrentHpdNumber = CurTT->GetVolume()->GetCopyNo(); + // G4cout<< " RichTbUpgradeSD: Hpd Number name "<< CurrentHpdNumber <<" "<<curnameVol<<G4endl; + G4VPhysicalVolume *ROphysVol = ROhist->GetVolume(); + G4int CurrentPixelNumber = ROphysVol->GetCopyNo(); + G4int CopyId = CurrentPixelNumber + (CurrentHpdNumber * NumPixelTotInSingleHpd); + if ((CurrentHitCreationOption == 0 && HpdSDID[CopyId] == -1) || (CurrentHitCreationOption == 1)) { + + G4ThreeVector CurGlobalPos = aStep->GetPreStepPoint()->GetPosition(); + G4Navigator *theNavigator = G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking(); + + G4ThreeVector CurLocalPos = theNavigator->GetGlobalToLocalTransform().TransformPoint(CurGlobalPos); + G4ThreeVector CurLocalPixelCenter = ROphysVol->GetTranslation(); + G4ThreeVector CurGlobalPixelCenter = theNavigator->GetLocalToGlobalTransform().TransformPoint(CurLocalPixelCenter); + G4ThreeVector CurLocalPosWrtLocalPixelCenter = CurLocalPos - CurLocalPixelCenter; + G4bool CurHitInPixelGapFlag = false; + + G4Track *aTrack = aStep->GetTrack(); G4ThreeVector aPeOrigin; G4ThreeVector aPhOrigin; - G4double aCkvCosTh=0.0; - G4double aCkvPhi=0.0; - G4double aPhEner=0.0; + G4double aCkvCosTh = 0.0; + G4double aCkvPhi = 0.0; + G4double aPhEner = 0.0; G4ThreeVector aPeOrginInPhSup; - G4ThreeVector aPhEmisDir; - G4ThreeVector aTIRCoord ; - G4ThreeVector aMIRCoord ; - G4ThreeVector aRFRCoord ; - G4int aMultReflFlag =0; + G4ThreeVector aPhEmisDir; + G4ThreeVector aTIRCoord; + G4ThreeVector aMIRCoord; + G4ThreeVector aRFRCoord; + G4int aMultReflFlag = 0; G4double aChTrackMom = 0.0; G4ThreeVector aChTrackThreeMom; - G4int aHitInPixelGapFlag= CurHitInPixelGapFlag ? 1 : 0 ; - + G4int aHitInPixelGapFlag = CurHitInPixelGapFlag ? 1 : 0; + G4String aCreatorProcessName = "NullProcess"; - const G4VProcess* aProcess = aTrack->GetCreatorProcess(); - if(aProcess) aCreatorProcessName = aProcess->GetProcessName(); - if((aTrack->GetDefinition() == RichTbPhotoElectron::PhotoElectron()) && - (aCreatorProcessName == HpdPhotElectProc )) { - - aPeOrigin=aTrack->GetVertexPosition(); - G4VUserTrackInformation* aUserTrackinfo=aTrack->GetUserInformation(); - if( aUserTrackinfo ) - { - RichTbUserTrackInfo* aPeTrackUserInfo= (RichTbUserTrackInfo*) aUserTrackinfo ; - if(aPeTrackUserInfo && aPeTrackUserInfo->HasUserPEInfo()){ - - // G4cout<<" Now get pe user track info " <<aPeTrackUserInfo<<G4endl; - - RichTbPEInfo* aPeInfo = aPeTrackUserInfo->getRichTbPEInfo(); - - if(aPeInfo){ - aPhOrigin= aPeInfo -> PhOrigin(); - aPeOrginInPhSup=aPeInfo -> PeOriginInHpdSupFrame(); - aPhEmisDir= aPeInfo-> getPhotEmisDir(); - RichTbPhotonInfo* aPhotonInfo = aPeInfo -> MotherPhotonInfo(); - if( aPhotonInfo ){ - aCkvCosTh = aPhotonInfo->CkvCosThetaAtProd(); - aCkvPhi = aPhotonInfo->CkvPhiAtProd(); - aPhEner = aPhotonInfo->CkvPhotonEnergyAtProd() ; - aTIRCoord = aPhotonInfo-> PhotonCrystalDnsTIRCoord(); - aMIRCoord = aPhotonInfo-> PhotonSphMirrReflCoord(); - aRFRCoord = aPhotonInfo-> PhotonCrystalDnsExitCoord(); - aMultReflFlag = aPhotonInfo->PhotonRadiatorMultipleIncidenceFlag(); - aChTrackMom = aPhotonInfo-> ParentChTrackMomentum(); - aChTrackThreeMom = aPhotonInfo->ParentChTrackThreeMom(); - } - } + const G4VProcess *aProcess = aTrack->GetCreatorProcess(); + if (aProcess) + aCreatorProcessName = aProcess->GetProcessName(); + if ((aTrack->GetDefinition() == RichTbPhotoElectron::PhotoElectron()) && + (aCreatorProcessName == HpdPhotElectProc)) { + + aPeOrigin = aTrack->GetVertexPosition(); + G4VUserTrackInformation *aUserTrackinfo = aTrack->GetUserInformation(); + if (aUserTrackinfo) { + RichTbUserTrackInfo *aPeTrackUserInfo = (RichTbUserTrackInfo *)aUserTrackinfo; + if (aPeTrackUserInfo && aPeTrackUserInfo->HasUserPEInfo()) { + + // G4cout<<" Now get pe user track info " <<aPeTrackUserInfo<<G4endl; + + RichTbPEInfo *aPeInfo = aPeTrackUserInfo->getRichTbPEInfo(); + + if (aPeInfo) { + aPhOrigin = aPeInfo->PhOrigin(); + aPeOrginInPhSup = aPeInfo->PeOriginInHpdSupFrame(); + aPhEmisDir = aPeInfo->getPhotEmisDir(); + RichTbPhotonInfo *aPhotonInfo = aPeInfo->MotherPhotonInfo(); + if (aPhotonInfo) { + aCkvCosTh = aPhotonInfo->CkvCosThetaAtProd(); + aCkvPhi = aPhotonInfo->CkvPhiAtProd(); + aPhEner = aPhotonInfo->CkvPhotonEnergyAtProd(); + aTIRCoord = aPhotonInfo->PhotonCrystalDnsTIRCoord(); + aMIRCoord = aPhotonInfo->PhotonSphMirrReflCoord(); + aRFRCoord = aPhotonInfo->PhotonCrystalDnsExitCoord(); + aMultReflFlag = aPhotonInfo->PhotonRadiatorMultipleIncidenceFlag(); + aChTrackMom = aPhotonInfo->ParentChTrackMomentum(); + aChTrackThreeMom = aPhotonInfo->ParentChTrackThreeMom(); } - } - - - + } + } + } } - - - RichTbHit* newHit = new RichTbHit(); - newHit->SetEdep( edep ); - newHit->SetPos(CurGlobalPos ); - newHit->SetCurHPDNum ( CurrentHpdNumber ); - newHit->SetCurPixNum (CurrentPixelNumber ); - - newHit -> SetLocalPos( CurLocalPos); - newHit->SetPeOrigin( aPeOrigin ); - newHit->SetPhotonOrigin( aPhOrigin ); - newHit->SetCkvCosThetaProd( aCkvCosTh ); - newHit->SetCkvPhiProd( aCkvPhi ); - newHit->SetCkvEnergyProd( aPhEner ); - newHit->SetPeOriginInPhSupport( aPeOrginInPhSup ); - newHit->SetPhEmissionDir( aPhEmisDir ); - newHit->SetPixelLocalCenter(CurLocalPixelCenter); - newHit->SetPixelGlobalCenter(CurGlobalPixelCenter); - newHit->SetTIRRadiatorCoord(aTIRCoord); - newHit->SetMIRRadiatorCoord(aMIRCoord); - newHit->SetRFRRadiatorCoord(aRFRCoord); - newHit->SetMultipleReflFlag(aMultReflFlag); - newHit->SetChTrackTotMom(aChTrackMom); - newHit->SetChTrackThreeMom(aChTrackThreeMom); - newHit->SetHitInPixelGapFlag(aHitInPixelGapFlag ); - - - G4int NumHits = RichTbHitCollectionHpd->insert( newHit ); - HpdSDID[CopyId]= NumHits -1 ; - // newHit->Print(); - - int verboseLevel=0; - if( verboseLevel > 0 ) G4cout << "Num hpd Hits stored in this event "<<NumHits<<G4endl; - + RichTbHit *newHit = new RichTbHit(); + newHit->SetEdep(edep); + newHit->SetPos(CurGlobalPos); + newHit->SetCurHPDNum(CurrentHpdNumber); + newHit->SetCurPixNum(CurrentPixelNumber); + + newHit->SetLocalPos(CurLocalPos); + newHit->SetPeOrigin(aPeOrigin); + newHit->SetPhotonOrigin(aPhOrigin); + newHit->SetCkvCosThetaProd(aCkvCosTh); + newHit->SetCkvPhiProd(aCkvPhi); + newHit->SetCkvEnergyProd(aPhEner); + newHit->SetPeOriginInPhSupport(aPeOrginInPhSup); + newHit->SetPhEmissionDir(aPhEmisDir); + newHit->SetPixelLocalCenter(CurLocalPixelCenter); + newHit->SetPixelGlobalCenter(CurGlobalPixelCenter); + newHit->SetTIRRadiatorCoord(aTIRCoord); + newHit->SetMIRRadiatorCoord(aMIRCoord); + newHit->SetRFRRadiatorCoord(aRFRCoord); + newHit->SetMultipleReflFlag(aMultReflFlag); + newHit->SetChTrackTotMom(aChTrackMom); + newHit->SetChTrackThreeMom(aChTrackThreeMom); + newHit->SetHitInPixelGapFlag(aHitInPixelGapFlag); + + G4int NumHits = RichTbHitCollectionHpd->insert(newHit); + HpdSDID[CopyId] = NumHits - 1; + // newHit->Print(); + + int verboseLevel = 0; + if (verboseLevel > 0) + G4cout << "Num hpd Hits stored in this event " << NumHits << G4endl; } - - - return true; - -} - - - - + return true; +} -void RichTbUpgradeHpdSD::clear(){} +void RichTbUpgradeHpdSD::clear() {} -void RichTbUpgradeHpdSD::DrawAll(){ } +void RichTbUpgradeHpdSD::DrawAll() {} -void RichTbUpgradeHpdSD::PrintAll(){ } +void RichTbUpgradeHpdSD::PrintAll() {} diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbUpgradeSD.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbUpgradeSD.cc index 07c671525413103edf81ae6e9925955c15ad973a..1ab1093ec915212bbf9ed7ba7948b85b72d4893e 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbUpgradeSD.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcmn/RichTbUpgradeSD.cc @@ -1,44 +1,41 @@ // $Id: $ // Include files - - // local #include "RichTbUpgradeSD.hh" -#include "RichTbHit.hh" -#include "RichTbGeometryParameters.hh" -#include "Geant4/G4Step.hh" #include "Geant4/G4HCofThisEvent.hh" -#include "Geant4/G4Track.hh" +#include "Geant4/G4Navigator.hh" #include "Geant4/G4SDManager.hh" -#include "Geant4/G4ios.hh" +#include "Geant4/G4Step.hh" #include "Geant4/G4TouchableHistory.hh" -#include "RichTbRunConfig.hh" -#include "RichTbUserTrackInfo.hh" -#include "RichTbPhotoElectron.hh" +#include "Geant4/G4Track.hh" #include "Geant4/G4TransportationManager.hh" -#include "Geant4/G4Navigator.hh" -#include "RichTbUserTrackInfo.hh" #include "Geant4/G4VProcess.hh" +#include "Geant4/G4ios.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbHit.hh" #include "RichTbMiscNames.hh" +#include "RichTbPhotoElectron.hh" #include "RichTbPmtPixelEfficiency.hh" +#include "RichTbRunConfig.hh" +#include "RichTbUserTrackInfo.hh" //============================================================================= // Standard constructor, initializes variables //============================================================================= -RichTbUpgradeSD::RichTbUpgradeSD(G4String DetName ) -:G4VSensitiveDetector(DetName), - PmtSDID(std::vector<G4int>( NumPmts*NumPixelTotInPmt,-1)),HCID(-1) { -// PmtSDID(std::vector<G4int>( RichTbPMTGeometryParameters::getNumPmts()*NumPixelTotInPmt,-1)),HCID(-1) { //TESTnumPmts - - collectionName.clear(); - collectionName.reserve(1); - collectionName.push_back(RichTbHColname); - //collectionName.push_back(RichTbHColnameHpd); - RichTbHitCollIndex=0; - RichTbSensDetName= DetName; - - // G4cout<<"constructing the sensitive detector "<<G4endl; +RichTbUpgradeSD::RichTbUpgradeSD(G4String DetName) + : G4VSensitiveDetector(DetName), PmtSDID(std::vector<G4int>(NumPmts * NumPixelTotInPmt, -1)), HCID(-1) { + // PmtSDID(std::vector<G4int>( RichTbPMTGeometryParameters::getNumPmts()*NumPixelTotInPmt,-1)),HCID(-1) { + ////TESTnumPmts + + collectionName.clear(); + collectionName.reserve(1); + collectionName.push_back(RichTbHColname); + // collectionName.push_back(RichTbHColnameHpd); + RichTbHitCollIndex = 0; + RichTbSensDetName = DetName; + + // G4cout<<"constructing the sensitive detector "<<G4endl; } //============================================================================= @@ -47,255 +44,205 @@ RichTbUpgradeSD::RichTbUpgradeSD(G4String DetName ) RichTbUpgradeSD::~RichTbUpgradeSD() {} //============================================================================= -void RichTbUpgradeSD::Initialize(G4HCofThisEvent* HCE ) -{ - - // G4cout<<" Now init RichTbUpgradeSD "<<collectionName[0]<< G4endl; - +void RichTbUpgradeSD::Initialize(G4HCofThisEvent *HCE) { - RichTbHitCollection = new RichTbHitsCollection(SensitiveDetectorName,collectionName[0]); + // G4cout<<" Now init RichTbUpgradeSD "<<collectionName[0]<< G4endl; - // RichTbHitCollection = new RichTbHitsCollection(RichTbSensDetName,collectionName[0]); + RichTbHitCollection = new RichTbHitsCollection(SensitiveDetectorName, collectionName[0]); - // G4cout<<" RichTbUpgradeSD : Created RichTbHitCollection with "<< collectionName[0] <<G4endl; + // RichTbHitCollection = new RichTbHitsCollection(RichTbSensDetName,collectionName[0]); - if( HCID < 0 ){ - HCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]); - } - // G4cout<<" RichTbUpgradeSD : HCID "<<HCID<<G4endl; + // G4cout<<" RichTbUpgradeSD : Created RichTbHitCollection with "<< collectionName[0] <<G4endl; - HCE->AddHitsCollection( HCID, RichTbHitCollection ); + if (HCID < 0) { + HCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]); + } + // G4cout<<" RichTbUpgradeSD : HCID "<<HCID<<G4endl; - // G4cout<<" RichTbUpgradeSD : HCID hitcolladded "<<HCID<<G4endl; + HCE->AddHitsCollection(HCID, RichTbHitCollection); + // G4cout<<" RichTbUpgradeSD : HCID hitcolladded "<<HCID<<G4endl; - for(G4int ipx = 0; ipx < (int) PmtSDID.size(); ipx++) - { - PmtSDID[ipx]=-1; - } + for (G4int ipx = 0; ipx < (int)PmtSDID.size(); ipx++) { + PmtSDID[ipx] = -1; + } - RichTbRunConfig* aRunConfig = RichTbRunConfig::getRunConfigInstance(); - CurrentHitCreationOption= aRunConfig->getHitCreationOption(); - // CurrentPmtPixelGap = aRunConfig-> getMapmtPixelGap(); - CurrentPmtPixelGap = RichTbPmtPixelGap; - - // G4cout<<" Now end init RichTbUpgradeSD "<<G4endl; + RichTbRunConfig *aRunConfig = RichTbRunConfig::getRunConfigInstance(); + CurrentHitCreationOption = aRunConfig->getHitCreationOption(); + // CurrentPmtPixelGap = aRunConfig-> getMapmtPixelGap(); + CurrentPmtPixelGap = RichTbPmtPixelGap; + // G4cout<<" Now end init RichTbUpgradeSD "<<G4endl; } -void RichTbUpgradeSD::EndOfEvent(G4HCofThisEvent* /* HCE */){ - // if( HCID < 0 ){ - // HCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]); } - // HCE->AddHitsCollection( HCID, RichTbHitCollection ); - - +void RichTbUpgradeSD::EndOfEvent(G4HCofThisEvent * /* HCE */) { + // if( HCID < 0 ){ + // HCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]); } + // HCE->AddHitsCollection( HCID, RichTbHitCollection ); } -G4bool RichTbUpgradeSD::ProcessHits(G4Step*aStep,G4TouchableHistory*ROhist) -{ - - // G4cout<<" Now in Process Hits Pmt SD "<<G4endl; - - if(!ROhist) return false; - - - - - G4double edep = aStep->GetTotalEnergyDeposit(); - if(edep < 0.0001) return false; - G4StepPoint* pPreStepPoint = aStep->GetPreStepPoint(); - G4TouchableHistory* CurTT = (G4TouchableHistory*)(pPreStepPoint->GetTouchable()); - CurTT -> MoveUpHistory(2); - G4String curnameVol = CurTT -> GetVolume()->GetName(); - G4int CurrentPmtNumber= CurTT -> GetVolume() -> GetCopyNo(); - // G4cout<< " RichTbUpgradeSD: PMT Number name "<< CurrentPmtNumber <<" "<<curnameVol<<G4endl; - G4VPhysicalVolume* ROphysVol = ROhist->GetVolume(); - G4int CurrentPixelNumber = ROphysVol->GetCopyNo(); - G4int CopyId = CurrentPixelNumber + CurrentPmtNumber * NumPixelTotInPmt; - - // now apply pixel efficiency when the flag to activate this efficiency is set to true. - - RichTbPmtPixelEfficiency* aPixelEff = RichTbPmtPixelEfficiency::getRichTbPmtPixelEfficiencyInstance(); - if(!( aPixelEff -> PmtPixelEffOK (CurrentPmtNumber,CurrentPixelNumber )) ) return false; - - // end apply pixel eff - - if( (CurrentHitCreationOption==0 && PmtSDID[CopyId ] == -1) || - (CurrentHitCreationOption==1 )) - { - G4ThreeVector CurGlobalPos =aStep->GetPreStepPoint()->GetPosition(); - G4Navigator* theNavigator = - G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking(); - - G4ThreeVector CurLocalPos = theNavigator->GetGlobalToLocalTransform().TransformPoint(CurGlobalPos ); - // G4int CopyId = CurrentPmtNumber; - - G4ThreeVector CurLocalPixelCenter = ROphysVol ->GetTranslation() ; - G4ThreeVector CurGlobalPixelCenter =theNavigator ->GetLocalToGlobalTransform().TransformPoint(CurLocalPixelCenter) ; - - G4ThreeVector CurLocalPosWrtLocalPixelCenter = CurLocalPos - CurLocalPixelCenter; - G4bool CurHitInPixelGapFlag = false; - - if( fabs((CurLocalPosWrtLocalPixelCenter.x()) > (0.5*(PmtAnodePixelXSize-CurrentPmtPixelGap)) ) || - fabs((CurLocalPosWrtLocalPixelCenter.y()) > (0.5*(PmtAnodePixelYSize-CurrentPmtPixelGap)) ) ) CurHitInPixelGapFlag=true; - - - - /* - // test print start - G4cout<<" Sensdet pmt num pixel num copyid "<< CurrentPmtNumber <<" " - << CurrentPixelNumber <<" "<<CopyId<<G4endl; - - G4cout<<" Sensdet pixelcenter global local globalpixelcenter pos "<< CurLocalPixelCenter <<" "<<CurGlobalPos <<" " - <<CurLocalPos<<" "<<CurGlobalPixelCenter<< " "<<CurLocalPosWrtLocalPixelCenter<< G4endl; - - G4cout<<" Sensdet pixelcenter global local globalpixelcenter pos differtpixel gapflag "<< CurLocalPixelCenter <<" "<<CurGlobalPos <<" " - <<CurLocalPos<<" "<<CurGlobalPixelCenter<< " "<<CurLocalPosWrtLocalPixelCenter<<" " - << CurHitInPixelGapFlag<< G4endl; - - // test print end - */ - - G4Track* aTrack = aStep->GetTrack(); - G4ThreeVector aPeOrigin; - G4ThreeVector aPhOrigin; - G4double aCkvCosTh=0.0; - G4double aCkvPhi=0.0; - G4double aPhEner=0.0; - G4ThreeVector aPeOrginInPhSup; - G4ThreeVector aPhEmisDir; - G4ThreeVector aTIRCoord ; - G4ThreeVector aMIRCoord ; - G4ThreeVector aRFRCoord ; - G4int aMultReflFlag =0; - G4double aChTrackMom = 0.0; - G4ThreeVector aChTrackThreeMom; - G4int aHitInPixelGapFlag= CurHitInPixelGapFlag ? 1 : 0 ; - - G4String aCreatorProcessName = "NullProcess"; - - const G4VProcess* aProcess = aTrack->GetCreatorProcess(); - if(aProcess) aCreatorProcessName = aProcess->GetProcessName(); - // G4cout<<" Upgrade SD creator proc "<<aCreatorProcessName <<G4endl; - - - if((aTrack->GetDefinition() == RichTbPhotoElectron::PhotoElectron()) && - (aCreatorProcessName == PmtPhotElectProc )) { - - - aPeOrigin=aTrack->GetVertexPosition(); - //G4cout<<" Upgrade SD Now get pe origin "<< aPeOrigin <<G4endl; - - - G4VUserTrackInformation* aUserTrackinfo=aTrack->GetUserInformation(); - if( aUserTrackinfo ) - { - RichTbUserTrackInfo* aPeTrackUserInfo= (RichTbUserTrackInfo*) aUserTrackinfo ; - if(aPeTrackUserInfo && aPeTrackUserInfo->HasUserPEInfo()){ - - // G4cout<<" Now get pe user track info " <<aPeTrackUserInfo<<G4endl; - - RichTbPEInfo* aPeInfo = aPeTrackUserInfo->getRichTbPEInfo(); - - if(aPeInfo){ - aPhOrigin= aPeInfo -> PhOrigin(); - aPeOrginInPhSup=aPeInfo -> PeOriginInHpdSupFrame(); - aPhEmisDir= aPeInfo-> getPhotEmisDir(); - - RichTbPhotonInfo* aPhotonInfo = aPeInfo -> MotherPhotonInfo(); - if( aPhotonInfo ){ - aCkvCosTh = aPhotonInfo->CkvCosThetaAtProd(); - aCkvPhi = aPhotonInfo->CkvPhiAtProd(); - aPhEner = aPhotonInfo->CkvPhotonEnergyAtProd() ; - aTIRCoord = aPhotonInfo-> PhotonCrystalDnsTIRCoord(); - aMIRCoord = aPhotonInfo-> PhotonSphMirrReflCoord(); - aRFRCoord = aPhotonInfo-> PhotonCrystalDnsExitCoord(); - aMultReflFlag = aPhotonInfo->PhotonRadiatorMultipleIncidenceFlag(); - aChTrackMom = aPhotonInfo-> ParentChTrackMomentum(); - aChTrackThreeMom = aPhotonInfo->ParentChTrackThreeMom(); - - - } - - - - } - - - - } - - - - - } - - - - } - - - - - - - - - - - - - - /* - G4cout<<" Upgrade SD PeOrgin aPeOrginInPhSup CkvTh aPhOrigin phener "<< aPeOrigin <<" " - << aPeOrginInPhSup <<" "<<aCkvCosTh<<" "<< aPhOrigin<<" "<< aPhEner<<G4endl; - */ - //G4cout<<" RichTbSD : Mulrefl flag "<< aMultReflFlag <<G4endl; - - - RichTbHit* newHit = new RichTbHit(); - newHit->SetEdep( edep ); - newHit->SetPos(CurGlobalPos ); - newHit->SetCurPMTNum ( CurrentPmtNumber ); - newHit->SetCurPixNum (CurrentPixelNumber ); - - newHit -> SetLocalPos( CurLocalPos); - newHit->SetPeOrigin( aPeOrigin ); - newHit->SetPhotonOrigin( aPhOrigin ); - newHit->SetCkvCosThetaProd( aCkvCosTh ); - newHit->SetCkvPhiProd( aCkvPhi ); - newHit->SetCkvEnergyProd( aPhEner ); - newHit->SetPeOriginInPhSupport( aPeOrginInPhSup ); - newHit->SetPhEmissionDir( aPhEmisDir ); - newHit->SetPixelLocalCenter(CurLocalPixelCenter); - newHit->SetPixelGlobalCenter(CurGlobalPixelCenter); - newHit->SetTIRRadiatorCoord(aTIRCoord); - newHit->SetMIRRadiatorCoord(aMIRCoord); - newHit->SetRFRRadiatorCoord(aRFRCoord); - newHit->SetMultipleReflFlag(aMultReflFlag); - newHit->SetChTrackTotMom(aChTrackMom); - newHit->SetChTrackThreeMom(aChTrackThreeMom); - newHit->SetHitInPixelGapFlag(aHitInPixelGapFlag ); - - - G4int NumHits = RichTbHitCollection->insert( newHit ); - - PmtSDID[CopyId]= NumHits -1 ; - int verboseLevel=0; - if( verboseLevel > 0 ) G4cout << "NumHits from pmt stored in this event "<<NumHits<<G4endl; - } - - - - - - - - return true; +G4bool RichTbUpgradeSD::ProcessHits(G4Step *aStep, G4TouchableHistory *ROhist) { + + // G4cout<<" Now in Process Hits Pmt SD "<<G4endl; + + if (!ROhist) + return false; + + G4double edep = aStep->GetTotalEnergyDeposit(); + if (edep < 0.0001) + return false; + G4StepPoint *pPreStepPoint = aStep->GetPreStepPoint(); + G4TouchableHistory *CurTT = (G4TouchableHistory *)(pPreStepPoint->GetTouchable()); + CurTT->MoveUpHistory(2); + G4String curnameVol = CurTT->GetVolume()->GetName(); + G4int CurrentPmtNumber = CurTT->GetVolume()->GetCopyNo(); + // G4cout<< " RichTbUpgradeSD: PMT Number name "<< CurrentPmtNumber <<" "<<curnameVol<<G4endl; + G4VPhysicalVolume *ROphysVol = ROhist->GetVolume(); + G4int CurrentPixelNumber = ROphysVol->GetCopyNo(); + G4int CopyId = CurrentPixelNumber + CurrentPmtNumber * NumPixelTotInPmt; + + // now apply pixel efficiency when the flag to activate this efficiency is set to true. + + RichTbPmtPixelEfficiency *aPixelEff = RichTbPmtPixelEfficiency::getRichTbPmtPixelEfficiencyInstance(); + if (!(aPixelEff->PmtPixelEffOK(CurrentPmtNumber, CurrentPixelNumber))) + return false; + + // end apply pixel eff + + if ((CurrentHitCreationOption == 0 && PmtSDID[CopyId] == -1) || (CurrentHitCreationOption == 1)) { + G4ThreeVector CurGlobalPos = aStep->GetPreStepPoint()->GetPosition(); + G4Navigator *theNavigator = G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking(); + + G4ThreeVector CurLocalPos = theNavigator->GetGlobalToLocalTransform().TransformPoint(CurGlobalPos); + // G4int CopyId = CurrentPmtNumber; + + G4ThreeVector CurLocalPixelCenter = ROphysVol->GetTranslation(); + G4ThreeVector CurGlobalPixelCenter = theNavigator->GetLocalToGlobalTransform().TransformPoint(CurLocalPixelCenter); + + G4ThreeVector CurLocalPosWrtLocalPixelCenter = CurLocalPos - CurLocalPixelCenter; + G4bool CurHitInPixelGapFlag = false; + + if (fabs((CurLocalPosWrtLocalPixelCenter.x()) > (0.5 * (PmtAnodePixelXSize - CurrentPmtPixelGap))) || + fabs((CurLocalPosWrtLocalPixelCenter.y()) > (0.5 * (PmtAnodePixelYSize - CurrentPmtPixelGap)))) + CurHitInPixelGapFlag = true; + + /* +// test print start +G4cout<<" Sensdet pmt num pixel num copyid "<< CurrentPmtNumber <<" " + << CurrentPixelNumber <<" "<<CopyId<<G4endl; + +G4cout<<" Sensdet pixelcenter global local globalpixelcenter pos "<< CurLocalPixelCenter <<" "<<CurGlobalPos <<" " +<<CurLocalPos<<" "<<CurGlobalPixelCenter<< " "<<CurLocalPosWrtLocalPixelCenter<< G4endl; + +G4cout<<" Sensdet pixelcenter global local globalpixelcenter pos differtpixel gapflag "<< CurLocalPixelCenter <<" +"<<CurGlobalPos <<" " +<<CurLocalPos<<" "<<CurGlobalPixelCenter<< " "<<CurLocalPosWrtLocalPixelCenter<<" " +<< CurHitInPixelGapFlag<< G4endl; + +// test print end + */ + + G4Track *aTrack = aStep->GetTrack(); + G4ThreeVector aPeOrigin; + G4ThreeVector aPhOrigin; + G4double aCkvCosTh = 0.0; + G4double aCkvPhi = 0.0; + G4double aPhEner = 0.0; + G4ThreeVector aPeOrginInPhSup; + G4ThreeVector aPhEmisDir; + G4ThreeVector aTIRCoord; + G4ThreeVector aMIRCoord; + G4ThreeVector aRFRCoord; + G4int aMultReflFlag = 0; + G4double aChTrackMom = 0.0; + G4ThreeVector aChTrackThreeMom; + G4int aHitInPixelGapFlag = CurHitInPixelGapFlag ? 1 : 0; + + G4String aCreatorProcessName = "NullProcess"; + + const G4VProcess *aProcess = aTrack->GetCreatorProcess(); + if (aProcess) + aCreatorProcessName = aProcess->GetProcessName(); + // G4cout<<" Upgrade SD creator proc "<<aCreatorProcessName <<G4endl; + + if ((aTrack->GetDefinition() == RichTbPhotoElectron::PhotoElectron()) && + (aCreatorProcessName == PmtPhotElectProc)) { + + aPeOrigin = aTrack->GetVertexPosition(); + // G4cout<<" Upgrade SD Now get pe origin "<< aPeOrigin <<G4endl; + + G4VUserTrackInformation *aUserTrackinfo = aTrack->GetUserInformation(); + if (aUserTrackinfo) { + RichTbUserTrackInfo *aPeTrackUserInfo = (RichTbUserTrackInfo *)aUserTrackinfo; + if (aPeTrackUserInfo && aPeTrackUserInfo->HasUserPEInfo()) { + + // G4cout<<" Now get pe user track info " <<aPeTrackUserInfo<<G4endl; + + RichTbPEInfo *aPeInfo = aPeTrackUserInfo->getRichTbPEInfo(); + + if (aPeInfo) { + aPhOrigin = aPeInfo->PhOrigin(); + aPeOrginInPhSup = aPeInfo->PeOriginInHpdSupFrame(); + aPhEmisDir = aPeInfo->getPhotEmisDir(); + + RichTbPhotonInfo *aPhotonInfo = aPeInfo->MotherPhotonInfo(); + if (aPhotonInfo) { + aCkvCosTh = aPhotonInfo->CkvCosThetaAtProd(); + aCkvPhi = aPhotonInfo->CkvPhiAtProd(); + aPhEner = aPhotonInfo->CkvPhotonEnergyAtProd(); + aTIRCoord = aPhotonInfo->PhotonCrystalDnsTIRCoord(); + aMIRCoord = aPhotonInfo->PhotonSphMirrReflCoord(); + aRFRCoord = aPhotonInfo->PhotonCrystalDnsExitCoord(); + aMultReflFlag = aPhotonInfo->PhotonRadiatorMultipleIncidenceFlag(); + aChTrackMom = aPhotonInfo->ParentChTrackMomentum(); + aChTrackThreeMom = aPhotonInfo->ParentChTrackThreeMom(); + } + } + } + } + } + + /* +G4cout<<" Upgrade SD PeOrgin aPeOrginInPhSup CkvTh aPhOrigin phener "<< aPeOrigin <<" " +<< aPeOrginInPhSup <<" "<<aCkvCosTh<<" "<< aPhOrigin<<" "<< aPhEner<<G4endl; + */ + // G4cout<<" RichTbSD : Mulrefl flag "<< aMultReflFlag <<G4endl; + + RichTbHit *newHit = new RichTbHit(); + newHit->SetEdep(edep); + newHit->SetPos(CurGlobalPos); + newHit->SetCurPMTNum(CurrentPmtNumber); + newHit->SetCurPixNum(CurrentPixelNumber); + + newHit->SetLocalPos(CurLocalPos); + newHit->SetPeOrigin(aPeOrigin); + newHit->SetPhotonOrigin(aPhOrigin); + newHit->SetCkvCosThetaProd(aCkvCosTh); + newHit->SetCkvPhiProd(aCkvPhi); + newHit->SetCkvEnergyProd(aPhEner); + newHit->SetPeOriginInPhSupport(aPeOrginInPhSup); + newHit->SetPhEmissionDir(aPhEmisDir); + newHit->SetPixelLocalCenter(CurLocalPixelCenter); + newHit->SetPixelGlobalCenter(CurGlobalPixelCenter); + newHit->SetTIRRadiatorCoord(aTIRCoord); + newHit->SetMIRRadiatorCoord(aMIRCoord); + newHit->SetRFRRadiatorCoord(aRFRCoord); + newHit->SetMultipleReflFlag(aMultReflFlag); + newHit->SetChTrackTotMom(aChTrackMom); + newHit->SetChTrackThreeMom(aChTrackThreeMom); + newHit->SetHitInPixelGapFlag(aHitInPixelGapFlag); + + G4int NumHits = RichTbHitCollection->insert(newHit); + + PmtSDID[CopyId] = NumHits - 1; + int verboseLevel = 0; + if (verboseLevel > 0) + G4cout << "NumHits from pmt stored in this event " << NumHits << G4endl; + } + + return true; } +void RichTbUpgradeSD::clear() {} -void RichTbUpgradeSD::clear(){} - -void RichTbUpgradeSD::DrawAll(){ } - -void RichTbUpgradeSD::PrintAll(){ } +void RichTbUpgradeSD::DrawAll() {} +void RichTbUpgradeSD::PrintAll() {} diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcph/HpdSiEnergyLoss.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcph/HpdSiEnergyLoss.cc index e179542cfbb6773332d194ccfb66c5f1f54b843c..68bd07c5dbc75275f690642f5ea9c3a5543adb70 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcph/HpdSiEnergyLoss.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcph/HpdSiEnergyLoss.cc @@ -1,19 +1,19 @@ // $Id: $ -// Include files -#include "Geant4/globals.hh" +// Include files #include "Geant4/G4Material.hh" +#include "Geant4/G4TouchableHistory.hh" +#include "Geant4/G4TransportationManager.hh" +#include "Geant4/G4VProcess.hh" #include "Geant4/Randomize.hh" +#include "Geant4/globals.hh" +#include "RichTbGeometryParameters.hh" #include "RichTbMaterialParameters.hh" -#include "Geant4/G4VProcess.hh" -#include "RichTbRunConfig.hh" #include "RichTbMiscNames.hh" -#include "RichTbGeometryParameters.hh" -#include "Geant4/G4TransportationManager.hh" -#include "Geant4/G4TouchableHistory.hh" +#include "RichTbRunConfig.hh" // local #include "HpdSiEnergyLoss.hh" -#include "RichTbPhotoElectron.hh" #include "RichTbPeUserInfoAttach.hh" +#include "RichTbPhotoElectron.hh" //----------------------------------------------------------------------------- // Implementation file for class : HpdSiEnergyLoss // @@ -23,251 +23,215 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -HpdSiEnergyLoss::HpdSiEnergyLoss(const G4String& processName ) - :G4VContinuousDiscreteProcess(processName), - MinKineticEnergy(1.*CLHEP::eV),MipEnergy(30000.0*CLHEP::eV),finalRangeforStep(0.15*CLHEP::mm) - { - - static const G4MaterialTable* theMaterialTable = - G4Material::GetMaterialTable(); - ElossMaterialName= HpdSiDetMaterialName; - EkillMaterialName= HpdEnvelopeMaterialName; - - - G4int numberOfMat= (G4int) ((*theMaterialTable).size()) ; +HpdSiEnergyLoss::HpdSiEnergyLoss(const G4String &processName) + : G4VContinuousDiscreteProcess(processName), MinKineticEnergy(1. * CLHEP::eV), MipEnergy(30000.0 * CLHEP::eV), + finalRangeforStep(0.15 * CLHEP::mm) { + + static const G4MaterialTable *theMaterialTable = G4Material::GetMaterialTable(); + ElossMaterialName = HpdSiDetMaterialName; + EkillMaterialName = HpdEnvelopeMaterialName; + + G4int numberOfMat = (G4int)((*theMaterialTable).size()); // G4cout<<"Hpd Si Eloss number of Mat "<<numberOfMat<<G4endl; - G4int iMat=0; - fMatIndex=-1; + G4int iMat = 0; + fMatIndex = -1; - while(iMat<numberOfMat && fMatIndex < 0 ) { - if ( ElossMaterialName == (*theMaterialTable)[iMat]->GetName()){ - fMatIndex=(*theMaterialTable)[iMat]->GetIndex(); + while (iMat < numberOfMat && fMatIndex < 0) { + if (ElossMaterialName == (*theMaterialTable)[iMat]->GetName()) { + fMatIndex = (*theMaterialTable)[iMat]->GetIndex(); // G4cout<<"Hpd Si energy Loss construct Material "<<ElossMaterialName // <<" "<< fMatIndex<<G4endl; } iMat++; - } - - G4int iMatK=0; - fMatIndexK=-1; - while(iMatK<numberOfMat && fMatIndexK < 0 ) { - if ( EkillMaterialName == (*theMaterialTable)[iMatK]->GetName()){ - fMatIndexK=(*theMaterialTable)[iMatK]->GetIndex(); + + G4int iMatK = 0; + fMatIndexK = -1; + while (iMatK < numberOfMat && fMatIndexK < 0) { + if (EkillMaterialName == (*theMaterialTable)[iMatK]->GetName()) { + fMatIndexK = (*theMaterialTable)[iMatK]->GetIndex(); // G4cout<<"Hpd Si Energy Loss: hpd endcap Material " // <<EkillMaterialName // <<" "<< fMatIndexK<<G4endl; } iMatK++; - } - - if(iMat > numberOfMat || iMatK > numberOfMat ) { - G4cout<<"Invalid material Name in HpdSiEnergyLoss constructor" <<G4endl; + if (iMat > numberOfMat || iMatK > numberOfMat) { + G4cout << "Invalid material Name in HpdSiEnergyLoss constructor" << G4endl; } - G4cout<<GetProcessName() <<" is created "<<G4endl; - - + G4cout << GetProcessName() << " is created " << G4endl; } //============================================================================= // Destructor //============================================================================= HpdSiEnergyLoss::~HpdSiEnergyLoss() {} -G4bool HpdSiEnergyLoss::IsApplicable(const G4ParticleDefinition& - aParticleType) { - return(aParticleType.GetPDGCharge()!= 0.); +G4bool HpdSiEnergyLoss::IsApplicable(const G4ParticleDefinition &aParticleType) { + return (aParticleType.GetPDGCharge() != 0.); } -G4double HpdSiEnergyLoss::GetContinuousStepLimit(const G4Track& track, - G4double /* previousStepSize */, - G4double /* currentMinimumStep */, - G4double& /* currentSafety*/){ +G4double HpdSiEnergyLoss::GetContinuousStepLimit(const G4Track &track, G4double /* previousStepSize */, + G4double /* currentMinimumStep */, G4double & /* currentSafety*/) { - G4double RangeForStep = finalRangeforStep; + G4double RangeForStep = finalRangeforStep; - if( ( fMatIndex != (int) track.GetMaterial() -> GetIndex()) && - ( fMatIndexK != (int) track.GetMaterial() -> GetIndex()) ) { + if ((fMatIndex != (int)track.GetMaterial()->GetIndex()) && (fMatIndexK != (int)track.GetMaterial()->GetIndex())) { RangeForStep = DBL_MAX; } - - - return RangeForStep; + return RangeForStep; } -G4double HpdSiEnergyLoss::GetMeanFreePath(const G4Track& /* track */, - G4double /* previousStepSize */, - G4ForceCondition* condition) { +G4double HpdSiEnergyLoss::GetMeanFreePath(const G4Track & /* track */, G4double /* previousStepSize */, + G4ForceCondition *condition) { // return infinity so that it does nothing. *condition = NotForced; return DBL_MAX; - } -G4VParticleChange* HpdSiEnergyLoss::PostStepDoIt(const G4Track& aTrack, - const G4Step& aStep) { +G4VParticleChange *HpdSiEnergyLoss::PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) { // Do nothing - aParticleChange.Initialize(aTrack) ; - return G4VContinuousDiscreteProcess::PostStepDoIt(aTrack,aStep); - + aParticleChange.Initialize(aTrack); + return G4VContinuousDiscreteProcess::PostStepDoIt(aTrack, aStep); } -G4VParticleChange* HpdSiEnergyLoss::AlongStepDoIt(const G4Track& aTrack, - const G4Step& /* aStep */) { +G4VParticleChange *HpdSiEnergyLoss::AlongStepDoIt(const G4Track &aTrack, const G4Step & /* aStep */) { // G4cout<<" Now in HpdSiEnergyLoss alongstep "<<G4endl; - + aParticleChange.Initialize(aTrack); - G4int aMaterialIndex = (G4int) aTrack.GetMaterial()->GetIndex(); + G4int aMaterialIndex = (G4int)aTrack.GetMaterial()->GetIndex(); // G4String aMaterialName = aTrack.GetMaterial()->GetName(); // G4cout<<" HpdSiEnergyLoss fmatindex fmatindexK material index "<< fMatIndex <<" " // << fMatIndexK <<" "<< aMaterialIndex <<" "<< aMaterialName <<G4endl; - - // if( ( fMatIndex != (int) aTrack.GetMaterial()->GetIndex() ) && + // if( ( fMatIndex != (int) aTrack.GetMaterial()->GetIndex() ) && // (fMatIndexK != (int) aTrack.GetMaterial()->GetIndex() ) ) { - if( ( fMatIndex != aMaterialIndex ) && - (fMatIndexK != aMaterialIndex ) ) { + if ((fMatIndex != aMaterialIndex) && (fMatIndexK != aMaterialIndex)) { return &aParticleChange; } - const G4DynamicParticle* aParticle = aTrack.GetDynamicParticle(); - G4double aKinEnergyInitParticle=aParticle->GetKineticEnergy(); - G4double aKinEnergyInit = aKinEnergyInitParticle; - G4String aCreatorProcessName= "NullProcess"; - const G4VProcess* aProcess = aTrack.GetCreatorProcess(); - if(aProcess) aCreatorProcessName = aProcess->GetProcessName(); - // if the particle hits the hpd envelope or the endcap - // return. If it is a photoelectron hitting the - // endcap or envelope kill the photoelectron. - if( fMatIndexK == (G4int) aTrack.GetMaterial() -> GetIndex()){ - if( aCreatorProcessName == HpdPhotElectProc) { - aParticleChange.ProposeTrackStatus(fStopAndKill); - aParticleChange.ProposeEnergy(0.0); - // aParticleChange.SetStatusChange(fStopAndKill); - } - return &aParticleChange; + const G4DynamicParticle *aParticle = aTrack.GetDynamicParticle(); + G4double aKinEnergyInitParticle = aParticle->GetKineticEnergy(); + G4double aKinEnergyInit = aKinEnergyInitParticle; + G4String aCreatorProcessName = "NullProcess"; + const G4VProcess *aProcess = aTrack.GetCreatorProcess(); + if (aProcess) + aCreatorProcessName = aProcess->GetProcessName(); + // if the particle hits the hpd envelope or the endcap + // return. If it is a photoelectron hitting the + // endcap or envelope kill the photoelectron. + if (fMatIndexK == (G4int)aTrack.GetMaterial()->GetIndex()) { + if (aCreatorProcessName == HpdPhotElectProc) { + aParticleChange.ProposeTrackStatus(fStopAndKill); + aParticleChange.ProposeEnergy(0.0); + // aParticleChange.SetStatusChange(fStopAndKill); } + return &aParticleChange; + } + + // if( aCreatorProcessName != HpdPhotElectProc ) G4cout<<" Hpd energy loss proc " << aCreatorProcessName <<G4endl; - // if( aCreatorProcessName != HpdPhotElectProc ) G4cout<<" Hpd energy loss proc " << aCreatorProcessName <<G4endl; - - RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); - // G4int aNonOptimalHpdCondition= rConfig-> getNonOptimalHpdCondition(); + RichTbRunConfig *rConfig = RichTbRunConfig::getRunConfigInstance(); + // G4int aNonOptimalHpdCondition= rConfig-> getNonOptimalHpdCondition(); // G4double aNonOptimalHpdAbsEff = rConfig->getNonOptimalHpdAbsEff(); - + G4double Eloss, aKinEnergyFinal; // G4cout<<" Now in Hpd Si energy loss with pheln initial energy = " // << aKinEnergyInit<<G4endl; - - if(aKinEnergyInit < MinKineticEnergy ) { Eloss=0.0 ; } - else if( aKinEnergyInit < MipEnergy ) {Eloss= aKinEnergyInit ;} - else { Eloss = MipEnergy; } + if (aKinEnergyInit < MinKineticEnergy) { + Eloss = 0.0; + } else if (aKinEnergyInit < MipEnergy) { + Eloss = aKinEnergyInit; + } else { + Eloss = MipEnergy; + } // if( aCreatorProcessName != HpdPhotElectProc )G4cout<<" backsca energy loss "<<Eloss <<G4endl; - - aKinEnergyFinal=aKinEnergyInit-Eloss; + aKinEnergyFinal = aKinEnergyInit - Eloss; - //Now implement the back scattering in an ad hoc manner. + // Now implement the back scattering in an ad hoc manner. // G4double Effs = 1.0 - backscaprob * bckKillFactor; G4double Effs = HpdelectronicsDetAbsEff; - - // if( aNonOptimalHpdCondition >= 1 ) + + // if( aNonOptimalHpdCondition >= 1 ) // { // Effs = aNonOptimalHpdAbsEff; // } -// G4cout << "Back scattering: " << Effs << G4endl; - + // G4cout << "Back scattering: " << Effs << G4endl; + // G4cout<<"Hpd Si energy loss Effs "<< Effs<<G4endl; - G4double Randbsk = G4UniformRand(); + G4double Randbsk = G4UniformRand(); // G4cout<<"Hpd Si energy loss Effs randbsk "<< Effs // <<" "<< Randbsk<<G4endl; - if(Randbsk <= Effs && Eloss > 0.0 ) - { - // G4cout<<"Now deposting energy in Silicon Eloss= " - // <<Eloss<<G4endl; - - //aParticleChange.SetLocalEnergyDeposit(Eloss); - aParticleChange.ProposeLocalEnergyDeposit(Eloss); - - // Now to create backscattered electrons - - G4double abackScaProb = rConfig->getHpdpeBackScaProb(); - - if( abackScaProb > 0.0 ) { - - G4double aBckRnd = G4UniformRand(); - if( aBckRnd < abackScaProb ) { - - if( aCreatorProcessName == HpdPhotElectProc) { - - G4double RandXposition = G4UniformRand() -0.5; - G4double RandYposition = G4UniformRand() -0.5; - G4ThreeVector LocalElectronDirection( 0,0 ,1 ); - G4ThreeVector LocalElectronOrigin( RandXposition*RichTbHpdSiDetRadiusSize, - RandYposition*RichTbHpdSiDetRadiusSize , -0.5*RichTbHpdSiDetZSize-1.0); - G4Navigator* theNavigator = G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking(); - G4ThreeVector GlobalElectronOrigin = theNavigator->GetLocalToGlobalTransform().TransformPoint(LocalElectronOrigin); - const G4ThreeVector GlobalElectronDirection = theNavigator-> - GetLocalToGlobalTransform().TransformAxis(LocalElectronDirection); - - G4double aPElectronTime= aTrack.GetGlobalTime(); - - G4double aElecKineEnergyForTracking=(rConfig ->getHpdPEMomInit() ) * CLHEP::keV; - - G4DynamicParticle* aElectron= - new G4DynamicParticle (RichTbPhotoElectron::PhotoElectron() , - GlobalElectronDirection, aElecKineEnergyForTracking) ; - - G4Track * aSecPETrack = - new G4Track(aElectron,aPElectronTime,GlobalElectronOrigin); - - aSecPETrack->SetTouchableHandle((G4VTouchable*)0); - aSecPETrack->SetParentID(aTrack.GetTrackID()); - aSecPETrack->SetGoodForTrackingFlag(true); + if (Randbsk <= Effs && Eloss > 0.0) { + // G4cout<<"Now deposting energy in Silicon Eloss= " + // <<Eloss<<G4endl; + + // aParticleChange.SetLocalEnergyDeposit(Eloss); + aParticleChange.ProposeLocalEnergyDeposit(Eloss); + + // Now to create backscattered electrons + + G4double abackScaProb = rConfig->getHpdpeBackScaProb(); + + if (abackScaProb > 0.0) { + + G4double aBckRnd = G4UniformRand(); + if (aBckRnd < abackScaProb) { + + if (aCreatorProcessName == HpdPhotElectProc) { + + G4double RandXposition = G4UniformRand() - 0.5; + G4double RandYposition = G4UniformRand() - 0.5; + G4ThreeVector LocalElectronDirection(0, 0, 1); + G4ThreeVector LocalElectronOrigin(RandXposition * RichTbHpdSiDetRadiusSize, + RandYposition * RichTbHpdSiDetRadiusSize, -0.5 * RichTbHpdSiDetZSize - 1.0); + G4Navigator *theNavigator = G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking(); + G4ThreeVector GlobalElectronOrigin = + theNavigator->GetLocalToGlobalTransform().TransformPoint(LocalElectronOrigin); + const G4ThreeVector GlobalElectronDirection = + theNavigator->GetLocalToGlobalTransform().TransformAxis(LocalElectronDirection); + + G4double aPElectronTime = aTrack.GetGlobalTime(); + + G4double aElecKineEnergyForTracking = (rConfig->getHpdPEMomInit()) * CLHEP::keV; + + G4DynamicParticle *aElectron = new G4DynamicParticle(RichTbPhotoElectron::PhotoElectron(), + GlobalElectronDirection, aElecKineEnergyForTracking); + G4Track *aSecPETrack = new G4Track(aElectron, aPElectronTime, GlobalElectronOrigin); + aSecPETrack->SetTouchableHandle((G4VTouchable *)0); + aSecPETrack->SetParentID(aTrack.GetTrackID()); + aSecPETrack->SetGoodForTrackingFlag(true); - G4Track* aTaggedSecPETrack = RichTbPeBckAttach(aTrack,aSecPETrack ); + G4Track *aTaggedSecPETrack = RichTbPeBckAttach(aTrack, aSecPETrack); // G4cout<<"Created a backsca electron "<<G4endl; - + aParticleChange.AddSecondary(aTaggedSecPETrack); - //kill old pe + // kill old pe aParticleChange.ProposeTrackStatus(fStopAndKill); aParticleChange.ProposeEnergy(0.0); - - } - + } } - - - } - - - - } - - // if( aCreatorProcessName != HpdPhotElectProc )G4cout<<" Kinnergy final finalke "<<aKinEnergyFinal<<" " + } + + // if( aCreatorProcessName != HpdPhotElectProc )G4cout<<" Kinnergy final finalke "<<aKinEnergyFinal<<" " // << MinKineticEnergy<< G4endl; - - if (aKinEnergyFinal <= MinKineticEnergy ) - { - // aParticleChange.SetStatusChange(fStopAndKill); - aParticleChange.ProposeTrackStatus(fStopAndKill); - aParticleChange.ProposeEnergy(0.0); - - } - else - { - aParticleChange.ProposeEnergy(aKinEnergyFinal); - // aParticleChange.SetEnergyChange(aKinEnergyFinal); - } + if (aKinEnergyFinal <= MinKineticEnergy) { + // aParticleChange.SetStatusChange(fStopAndKill); + aParticleChange.ProposeTrackStatus(fStopAndKill); + aParticleChange.ProposeEnergy(0.0); - + } else { + aParticleChange.ProposeEnergy(aKinEnergyFinal); + // aParticleChange.SetEnergyChange(aKinEnergyFinal); + } return &aParticleChange; } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcph/PixelHpdPhotoElectricEffect.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcph/PixelHpdPhotoElectricEffect.cc index 90928d0a35823d6d3b31b10ee0d2774d0fe53b42..0cf0a0f96ebe0e02465ae16e4a3734ea343c5d0b 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcph/PixelHpdPhotoElectricEffect.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcph/PixelHpdPhotoElectricEffect.cc @@ -1,19 +1,18 @@ -// Include files +// Include files -#include "Geant4/globals.hh" -#include <math.h> -#include <vector> #include "PixelHpdPhotoElectricEffect.hh" -#include "RichTbGeometryParameters.hh" +#include "Geant4/G4TouchableHistory.hh" #include "Geant4/G4TransportationManager.hh" #include "Geant4/Randomize.hh" +#include "Geant4/globals.hh" #include "RichTbAnalysisManager.hh" -#include "RichTbRunConfig.hh" +#include "RichTbGeometryParameters.hh" #include "RichTbMaterialParameters.hh" -#include "Geant4/G4TouchableHistory.hh" -#include "RichTbPhotoElectron.hh" #include "RichTbPeUserInfoAttach.hh" - +#include "RichTbPhotoElectron.hh" +#include "RichTbRunConfig.hh" +#include <math.h> +#include <vector> // local @@ -26,235 +25,196 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -PixelHpdPhotoElectricEffect::PixelHpdPhotoElectricEffect - (const G4String& processName):G4VDiscreteProcess(processName), - NumHpdTot(NumHpds),NumDemagParam(NumDemagnificationParam),NumQEbins(HpdQENumBins), - DemagnificationFactor( NumHpds, std::vector<G4double>(NumDemagnificationParam )), - HpdQE( NumHpds, std::vector<G4double>( NumQEbins) ), - HpdWabin( NumHpds, std::vector<G4double>( NumQEbins) ) -{ - RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); +PixelHpdPhotoElectricEffect::PixelHpdPhotoElectricEffect(const G4String &processName) + : G4VDiscreteProcess(processName), NumHpdTot(NumHpds), NumDemagParam(NumDemagnificationParam), + NumQEbins(HpdQENumBins), DemagnificationFactor(NumHpds, std::vector<G4double>(NumDemagnificationParam)), + HpdQE(NumHpds, std::vector<G4double>(NumQEbins)), HpdWabin(NumHpds, std::vector<G4double>(NumQEbins)) { + RichTbRunConfig *rConfig = RichTbRunConfig::getRunConfigInstance(); PrePhotoElectricVolName = HpdQuartzWMaterialName; PostPhotoElectricVolName = HpdPhCathodeMaterialName; - HpdPhElectronMomentum = ( rConfig->getHpdPEMomInit() ) * CLHEP::keV; + HpdPhElectronMomentum = (rConfig->getHpdPEMomInit()) * CLHEP::keV; PhCathodeToSilDetDist = RichTbHpdSiDetDistZFromPhCathode; HpdPhCathodeRInner = RichTbHpdPhCathodeInnerRad; PSFsigma = PixelHpdPSFSigma; - for(G4int ihpd=0; ihpd<NumHpdTot; ihpd++) { - DemagnificationFactor[ihpd][0]= PixelHpdDemagLinearFactor; - DemagnificationFactor[ihpd][1]= PixelHpdDemagQuadraticFactor; - std::vector<G4double>qeCurHpd = InitializeHpdQE(ihpd); - std::vector<G4double>waCurHpd = InitializeHpdWaveL(ihpd); - if( ((int) qeCurHpd.size() != (int) waCurHpd.size()) ||((int) qeCurHpd.size() != (int) HpdQE[ihpd].size()) ){ - G4cout<<"PhotElectEffect: Wrong size for Hpd QE "<<ihpd<<" "<<(int) qeCurHpd.size() - <<" "<< (int) waCurHpd.size() - <<" "<<(int) HpdQE[ihpd].size() <<G4endl; - }else{ - - for(G4int iqbin=0; iqbin < (int) qeCurHpd.size(); iqbin++){ - // in the following the 100 is to convert from percent to - // regular fraction. - - HpdQE[ihpd][iqbin]=qeCurHpd[iqbin]/100; - HpdWabin[ihpd][iqbin]=waCurHpd[iqbin]; - - // G4cout<<" PhotElect hpdnum ibin Hpd Wlen HpdQE " - // << ihpd<<" "<< iqbin<<" "<< HpdWabin[ihpd][iqbin] - // <<" "<< HpdQE[ihpd][iqbin]<<G4endl; - - } + for (G4int ihpd = 0; ihpd < NumHpdTot; ihpd++) { + DemagnificationFactor[ihpd][0] = PixelHpdDemagLinearFactor; + DemagnificationFactor[ihpd][1] = PixelHpdDemagQuadraticFactor; + std::vector<G4double> qeCurHpd = InitializeHpdQE(ihpd); + std::vector<G4double> waCurHpd = InitializeHpdWaveL(ihpd); + if (((int)qeCurHpd.size() != (int)waCurHpd.size()) || ((int)qeCurHpd.size() != (int)HpdQE[ihpd].size())) { + G4cout << "PhotElectEffect: Wrong size for Hpd QE " << ihpd << " " << (int)qeCurHpd.size() << " " + << (int)waCurHpd.size() << " " << (int)HpdQE[ihpd].size() << G4endl; + } else { + + for (G4int iqbin = 0; iqbin < (int)qeCurHpd.size(); iqbin++) { + // in the following the 100 is to convert from percent to + // regular fraction. + HpdQE[ihpd][iqbin] = qeCurHpd[iqbin] / 100; + HpdWabin[ihpd][iqbin] = waCurHpd[iqbin]; + // G4cout<<" PhotElect hpdnum ibin Hpd Wlen HpdQE " + // << ihpd<<" "<< iqbin<<" "<< HpdWabin[ihpd][iqbin] + // <<" "<< HpdQE[ihpd][iqbin]<<G4endl; } - + } } - - - - G4cout<<GetProcessName() <<" is created "<<G4endl; + G4cout << GetProcessName() << " is created " << G4endl; } //============================================================================= // Destructor //============================================================================= -PixelHpdPhotoElectricEffect::~PixelHpdPhotoElectricEffect() {} +PixelHpdPhotoElectricEffect::~PixelHpdPhotoElectricEffect() {} //============================================================================= -G4bool PixelHpdPhotoElectricEffect::IsApplicable(const G4ParticleDefinition& aParticleType) -{ - return ( &aParticleType == G4OpticalPhoton::OpticalPhoton() ); +G4bool PixelHpdPhotoElectricEffect::IsApplicable(const G4ParticleDefinition &aParticleType) { + return (&aParticleType == G4OpticalPhoton::OpticalPhoton()); } - -G4double PixelHpdPhotoElectricEffect::GetMeanFreePath(const G4Track& , - G4double , - G4ForceCondition* condition) -{ +G4double PixelHpdPhotoElectricEffect::GetMeanFreePath(const G4Track &, G4double, G4ForceCondition *condition) { *condition = Forced; return DBL_MAX; } -G4VParticleChange* PixelHpdPhotoElectricEffect::PostStepDoIt(const G4Track& aTrack,const G4Step& aStep) -{ +G4VParticleChange *PixelHpdPhotoElectricEffect::PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) { aParticleChange.Initialize(aTrack); - G4StepPoint* pPreStepPoint = aStep.GetPreStepPoint(); - G4StepPoint* pPostStepPoint = aStep.GetPostStepPoint(); + G4StepPoint *pPreStepPoint = aStep.GetPreStepPoint(); + G4StepPoint *pPostStepPoint = aStep.GetPostStepPoint(); if (pPostStepPoint->GetStepStatus() != fGeomBoundary) return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - G4String PrePhName = pPreStepPoint -> GetPhysicalVolume() -> - GetLogicalVolume() -> GetMaterial()->GetName(); - G4String PostPhName= pPostStepPoint -> GetPhysicalVolume() -> - GetLogicalVolume() -> GetMaterial() ->GetName(); - - if(( PrePhName == PrePhotoElectricVolName && - PostPhName == PostPhotoElectricVolName) || - ( PostPhName == PrePhotoElectricVolName && - PrePhName == PostPhotoElectricVolName) ) - { - - // G4cout<<"PadHpdPhElec effect PreVol Post Vol "<<PrePhName - // <<" "<<PostPhName<<G4endl; - }else { - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - } + G4String PrePhName = pPreStepPoint->GetPhysicalVolume()->GetLogicalVolume()->GetMaterial()->GetName(); + G4String PostPhName = pPostStepPoint->GetPhysicalVolume()->GetLogicalVolume()->GetMaterial()->GetName(); + + if ((PrePhName == PrePhotoElectricVolName && PostPhName == PostPhotoElectricVolName) || + (PostPhName == PrePhotoElectricVolName && PrePhName == PostPhotoElectricVolName)) { + + // G4cout<<"PadHpdPhElec effect PreVol Post Vol "<<PrePhName + // <<" "<<PostPhName<<G4endl; + } else { + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + } // if (aTrack.GetStepLength()<=kCarTolerance/2) // return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - - const G4DynamicParticle* aDynamicPhoton = aTrack.GetDynamicParticle(); + const G4DynamicParticle *aDynamicPhoton = aTrack.GetDynamicParticle(); G4double PhotonEnergy = aDynamicPhoton->GetKineticEnergy(); - if(PhotonEnergy <= 0.0 ){ - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + if (PhotonEnergy <= 0.0) { + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); } - - //Now use the QE for the current HPD to determine if a + // Now use the QE for the current HPD to determine if a // photoelectron should be produced or not. - G4TouchableHistory* CurTT = - (G4TouchableHistory*)(pPreStepPoint->GetTouchable()); - G4int currentHpdNumber= CurTT -> GetReplicaNumber(2); - if(currentHpdNumber >= NumHpdTot ||currentHpdNumber < 0 ) + G4TouchableHistory *CurTT = (G4TouchableHistory *)(pPreStepPoint->GetTouchable()); + G4int currentHpdNumber = CurTT->GetReplicaNumber(2); + if (currentHpdNumber >= NumHpdTot || currentHpdNumber < 0) return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - G4double PhotWLength=PhotMomToWaveLength/PhotonEnergy; - G4double PhotWLengthNano = PhotWLength/(CLHEP::nanometer); + G4double PhotWLength = PhotMomToWaveLength / PhotonEnergy; + // G4double PhotWLengthNano = PhotWLength / (CLHEP::nanometer); G4double PhCathodeQE = getHpdQEff(currentHpdNumber, PhotWLength); G4double randomnum = G4UniformRand(); - if(randomnum < PhCathodeQE ) { - G4double aPhotonTime= aTrack.GetGlobalTime(); - - G4ThreeVector GlobalElectronOrigin= pPostStepPoint->GetPosition(); - - G4Navigator* theNavigator = G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking(); - G4ThreeVector LocalElectronOrigin = theNavigator->GetGlobalToLocalTransform().TransformPoint(GlobalElectronOrigin); - - G4double CurDemagFactor=DemagnificationFactor[currentHpdNumber][0]; - G4double CurDemagQuadFactor=DemagnificationFactor[currentHpdNumber][1]; - G4double PsfRandomAzimuth = CLHEP::twopi*G4UniformRand(); - G4double PsfRandomRad= G4RandGauss::shoot(0.0,PSFsigma); - G4double PsfX= PsfRandomRad*cos( PsfRandomAzimuth); - G4double PsfY= PsfRandomRad*sin( PsfRandomAzimuth); - G4double ElectronCathodeRadius = sqrt( pow(LocalElectronOrigin.x(), 2) + - pow(LocalElectronOrigin.y(), 2) ); - G4double ElectronAnodeRadius = ((CurDemagQuadFactor*ElectronCathodeRadius) + - CurDemagFactor) * ElectronCathodeRadius; - - G4double scale = -1; - if(ElectronCathodeRadius != 0) - { scale = (ElectronAnodeRadius/ElectronCathodeRadius) - 1; } - - G4ThreeVector LocalElectronDirection(LocalElectronOrigin.x()*scale + PsfX, - LocalElectronOrigin.y()*scale + PsfY, - -(PhCathodeToSilDetDist- - (HpdPhCathodeRInner- - LocalElectronOrigin.z()))); - LocalElectronDirection = LocalElectronDirection.unit(); - - const G4ThreeVector GlobalElectronDirection = theNavigator-> - GetLocalToGlobalTransform(). - TransformAxis(LocalElectronDirection); - - G4double ElecKineEnergy= getHpdPhElectronMomentum(); - - G4TouchableHistory* CurTTP = (G4TouchableHistory*) (pPreStepPoint->GetTouchable()); - CurTTP -> MoveUpHistory(2); - G4int CurTTPDepth= CurTTP->GetHistoryDepth(); - G4ThreeVector ElnOrgInPhDet = CurTTP->GetHistory()->GetTransform(CurTTPDepth).TransformPoint(GlobalElectronOrigin); - - - - G4DynamicParticle* aElectron= - new G4DynamicParticle (RichTbPhotoElectron::PhotoElectron(), - GlobalElectronDirection, ElecKineEnergy) ; - - aParticleChange.SetNumberOfSecondaries(1) ; - - G4Track* aSecPETrack = - new G4Track(aElectron,aPhotonTime,GlobalElectronOrigin); - - aSecPETrack->SetTouchableHandle((G4VTouchable*)0); - aSecPETrack->SetParentID(aTrack.GetTrackID()); - aSecPETrack->SetGoodForTrackingFlag(true); - G4Track* aTaggedSecPETrack = RichTbPeInfoAttach(aTrack,aSecPETrack, - ElnOrgInPhDet); - // G4cout<<" Now created a secondary track from pixel hpd photoelectric effect "<<G4endl; - - aParticleChange.AddSecondary(aTaggedSecPETrack); + if (randomnum < PhCathodeQE) { + G4double aPhotonTime = aTrack.GetGlobalTime(); + + G4ThreeVector GlobalElectronOrigin = pPostStepPoint->GetPosition(); + + G4Navigator *theNavigator = G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking(); + G4ThreeVector LocalElectronOrigin = theNavigator->GetGlobalToLocalTransform().TransformPoint(GlobalElectronOrigin); + + G4double CurDemagFactor = DemagnificationFactor[currentHpdNumber][0]; + G4double CurDemagQuadFactor = DemagnificationFactor[currentHpdNumber][1]; + G4double PsfRandomAzimuth = CLHEP::twopi * G4UniformRand(); + G4double PsfRandomRad = G4RandGauss::shoot(0.0, PSFsigma); + G4double PsfX = PsfRandomRad * cos(PsfRandomAzimuth); + G4double PsfY = PsfRandomRad * sin(PsfRandomAzimuth); + G4double ElectronCathodeRadius = sqrt(pow(LocalElectronOrigin.x(), 2) + pow(LocalElectronOrigin.y(), 2)); + G4double ElectronAnodeRadius = + ((CurDemagQuadFactor * ElectronCathodeRadius) + CurDemagFactor) * ElectronCathodeRadius; + + G4double scale = -1; + if (ElectronCathodeRadius != 0) { + scale = (ElectronAnodeRadius / ElectronCathodeRadius) - 1; + } + + G4ThreeVector LocalElectronDirection(LocalElectronOrigin.x() * scale + PsfX, LocalElectronOrigin.y() * scale + PsfY, + -(PhCathodeToSilDetDist - (HpdPhCathodeRInner - LocalElectronOrigin.z()))); + LocalElectronDirection = LocalElectronDirection.unit(); + + const G4ThreeVector GlobalElectronDirection = + theNavigator->GetLocalToGlobalTransform().TransformAxis(LocalElectronDirection); + + G4double ElecKineEnergy = getHpdPhElectronMomentum(); + + G4TouchableHistory *CurTTP = (G4TouchableHistory *)(pPreStepPoint->GetTouchable()); + CurTTP->MoveUpHistory(2); + G4int CurTTPDepth = CurTTP->GetHistoryDepth(); + G4ThreeVector ElnOrgInPhDet = CurTTP->GetHistory()->GetTransform(CurTTPDepth).TransformPoint(GlobalElectronOrigin); + + G4DynamicParticle *aElectron = + new G4DynamicParticle(RichTbPhotoElectron::PhotoElectron(), GlobalElectronDirection, ElecKineEnergy); + + aParticleChange.SetNumberOfSecondaries(1); + + G4Track *aSecPETrack = new G4Track(aElectron, aPhotonTime, GlobalElectronOrigin); + + aSecPETrack->SetTouchableHandle((G4VTouchable *)0); + aSecPETrack->SetParentID(aTrack.GetTrackID()); + aSecPETrack->SetGoodForTrackingFlag(true); + G4Track *aTaggedSecPETrack = RichTbPeInfoAttach(aTrack, aSecPETrack, ElnOrgInPhDet); + // G4cout<<" Now created a secondary track from pixel hpd photoelectric effect "<<G4endl; + + aParticleChange.AddSecondary(aTaggedSecPETrack); aParticleChange.ProposeTrackStatus(fStopAndKill); aParticleChange.ProposeEnergy(0.0); - - } else { - //photon is not killed if it is not converted to photoelectron + } else { - } - -return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + // photon is not killed if it is not converted to photoelectron + } + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); } -G4double PixelHpdPhotoElectricEffect::getHpdQEff(G4int HpdNum, - G4double PhotonWLength){ - - G4double hq1=0.0; G4double hq2=0.0; - G4double wa1=0.0; G4double wa2=0.0; G4double aslope=0.0; - // G4double aintc=0.0; +G4double PixelHpdPhotoElectricEffect::getHpdQEff(G4int HpdNum, G4double PhotonWLength) { + + G4double hq1 = 0.0; + G4double hq2 = 0.0; + G4double wa1 = 0.0; + G4double wa2 = 0.0; + G4double aslope = 0.0; + // G4double aintc=0.0; // G4cout<<"Now in Hpd QE Finder hpdnum PhWlen " // <<HpdNum<<" "<<PhotonWLength<<G4endl; - G4double qeff=0.0; - - if( PhotonWLength == HpdWabin[HpdNum][ HpdQENumBins-1] ) { - qeff = HpdQE[HpdNum] [HpdQENumBins-1] ; - }else if ( PhotonWLength == HpdWabin[HpdNum][ 0] ) { - qeff = HpdQE[HpdNum] [0]; - } else if( ( PhotonWLength >= HpdWabin[HpdNum][0]) && - ( PhotonWLength < HpdWabin[HpdNum][HpdQENumBins-1]) ) { - G4int ibinq=0; - G4bool BinFound=false; - while (ibinq< (NumQEbins-1) && (! (BinFound)) ){ - wa1 = HpdWabin[HpdNum][ibinq]; - wa2 = HpdWabin[HpdNum][ibinq+1]; - if( PhotonWLength >= wa1 && PhotonWLength < wa2 ) { - hq1 = HpdQE[HpdNum][ibinq]; - hq2 = HpdQE[HpdNum][ibinq+1]; - aslope = (hq2-hq1)/(wa2-wa1); - // aintc = hq1 - (aslope * wa1 ); - // qeff= aintc + aslope * PhotonWLength ; - qeff= hq1 + aslope * (PhotonWLength-wa1) ; - BinFound=true; - - } - ibinq++; - } - + G4double qeff = 0.0; + + if (PhotonWLength == HpdWabin[HpdNum][HpdQENumBins - 1]) { + qeff = HpdQE[HpdNum][HpdQENumBins - 1]; + } else if (PhotonWLength == HpdWabin[HpdNum][0]) { + qeff = HpdQE[HpdNum][0]; + } else if ((PhotonWLength >= HpdWabin[HpdNum][0]) && (PhotonWLength < HpdWabin[HpdNum][HpdQENumBins - 1])) { + G4int ibinq = 0; + G4bool BinFound = false; + while (ibinq < (NumQEbins - 1) && (!(BinFound))) { + wa1 = HpdWabin[HpdNum][ibinq]; + wa2 = HpdWabin[HpdNum][ibinq + 1]; + if (PhotonWLength >= wa1 && PhotonWLength < wa2) { + hq1 = HpdQE[HpdNum][ibinq]; + hq2 = HpdQE[HpdNum][ibinq + 1]; + aslope = (hq2 - hq1) / (wa2 - wa1); + // aintc = hq1 - (aslope * wa1 ); + // qeff= aintc + aslope * PhotonWLength ; + qeff = hq1 + aslope * (PhotonWLength - wa1); + BinFound = true; + } + ibinq++; + } } - return qeff; - } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcph/PmtAnodeEnergyLoss.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcph/PmtAnodeEnergyLoss.cc index 3ee56b32b10308a0235daf31aadf745043e1ee21..050ed38c488f8f7c74250a49ff7af2cdeb6fef21 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcph/PmtAnodeEnergyLoss.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcph/PmtAnodeEnergyLoss.cc @@ -2,9 +2,9 @@ // Include files #include "Geant4/G4Material.hh" +#include "Geant4/G4VProcess.hh" #include "Geant4/Randomize.hh" #include "RichTbMaterialParameters.hh" -#include "Geant4/G4VProcess.hh" #include "RichTbRunConfig.hh" #include "Geant4/G4TouchableHistory.hh" //test @@ -15,194 +15,162 @@ //============================================================================= // Standard constructor, initializes variables //============================================================================= -PmtAnodeEnergyLoss::PmtAnodeEnergyLoss(const G4String& processName ) - :G4VContinuousDiscreteProcess(processName), - MinKineticEnergy(1.*CLHEP::eV),MipEnergy(30000.0*CLHEP::eV),finalRangeforStep(0.15*CLHEP::mm) - { - - static const G4MaterialTable* theMaterialTable = - G4Material::GetMaterialTable(); - ElossMaterialName= PMTAnodeMaterialName; - EkillMaterialName= PMTEnvelopeMaterialName; - - G4int numberOfMat= (G4int) ((*theMaterialTable).size()) ; - G4cout<<"Pmt Anode Eloss number of Mat "<<numberOfMat<<G4endl; - G4int iMat=0; - fMatIndex=-1; - - while(iMat<numberOfMat && fMatIndex < 0 ) { - if ( ElossMaterialName == (*theMaterialTable)[iMat]->GetName()){ - fMatIndex=(*theMaterialTable)[iMat]->GetIndex(); - G4cout<<"PMT anode energy Loss construct Material "<<ElossMaterialName - <<" "<< fMatIndex<<G4endl; +PmtAnodeEnergyLoss::PmtAnodeEnergyLoss(const G4String &processName) + : G4VContinuousDiscreteProcess(processName), MinKineticEnergy(1. * CLHEP::eV), MipEnergy(30000.0 * CLHEP::eV), + finalRangeforStep(0.15 * CLHEP::mm) { + + static const G4MaterialTable *theMaterialTable = G4Material::GetMaterialTable(); + ElossMaterialName = PMTAnodeMaterialName; + EkillMaterialName = PMTEnvelopeMaterialName; + + G4int numberOfMat = (G4int)((*theMaterialTable).size()); + G4cout << "Pmt Anode Eloss number of Mat " << numberOfMat << G4endl; + G4int iMat = 0; + fMatIndex = -1; + + while (iMat < numberOfMat && fMatIndex < 0) { + if (ElossMaterialName == (*theMaterialTable)[iMat]->GetName()) { + fMatIndex = (*theMaterialTable)[iMat]->GetIndex(); + G4cout << "PMT anode energy Loss construct Material " << ElossMaterialName << " " << fMatIndex << G4endl; } iMat++; - } - G4int iMatK=0; - fMatIndexK=-1; - while(iMatK<numberOfMat && fMatIndexK < 0 ) { - if ( EkillMaterialName == (*theMaterialTable)[iMatK]->GetName()){ - fMatIndexK=(*theMaterialTable)[iMatK]->GetIndex(); - G4cout<<"Pmt Anode Energy Loss: pmt envelope Material " - <<EkillMaterialName - <<" "<< fMatIndexK<<G4endl; + G4int iMatK = 0; + fMatIndexK = -1; + while (iMatK < numberOfMat && fMatIndexK < 0) { + if (EkillMaterialName == (*theMaterialTable)[iMatK]->GetName()) { + fMatIndexK = (*theMaterialTable)[iMatK]->GetIndex(); + G4cout << "Pmt Anode Energy Loss: pmt envelope Material " << EkillMaterialName << " " << fMatIndexK << G4endl; } iMatK++; - } - if(iMat > numberOfMat || iMatK > numberOfMat ) { - G4cout << "Invalid material Name in PmtAnodeEnergyLoss constructor" <<G4endl ; + if (iMat > numberOfMat || iMatK > numberOfMat) { + G4cout << "Invalid material Name in PmtAnodeEnergyLoss constructor" << G4endl; } - G4cout<<GetProcessName() <<" is created "<<G4endl; - - - } - + G4cout << GetProcessName() << " is created " << G4endl; +} PmtAnodeEnergyLoss::~PmtAnodeEnergyLoss() {} - -G4bool PmtAnodeEnergyLoss::IsApplicable(const G4ParticleDefinition& - aParticleType) { - return(aParticleType.GetPDGCharge()!= 0.); +G4bool PmtAnodeEnergyLoss::IsApplicable(const G4ParticleDefinition &aParticleType) { + return (aParticleType.GetPDGCharge() != 0.); } -G4VParticleChange* PmtAnodeEnergyLoss::AlongStepDoIt(const G4Track& aTrack, - const G4Step& aStep) { - // const G4Step& ) { + +G4VParticleChange *PmtAnodeEnergyLoss::AlongStepDoIt(const G4Track &aTrack, const G4Step & /* aStep */) { + // const G4Step& ) { aParticleChange.Initialize(aTrack); // G4int aMaterialIndex = aTrack.GetMaterial()->GetIndex(); - if( ( fMatIndex != (int) aTrack.GetMaterial()->GetIndex() ) && - (fMatIndexK != (int) aTrack.GetMaterial()->GetIndex() ) ) { + if ((fMatIndex != (int)aTrack.GetMaterial()->GetIndex()) && (fMatIndexK != (int)aTrack.GetMaterial()->GetIndex())) { return &aParticleChange; } - RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); + RichTbRunConfig *rConfig = RichTbRunConfig::getRunConfigInstance(); -// G4cout << "pmt anode energy loss " << aTrack.GetMaterial()->GetName()<< G4endl; - const G4DynamicParticle* aParticle = aTrack.GetDynamicParticle(); - G4double aKinEnergyInitParticle=aParticle->GetKineticEnergy(); - G4double aKinEnergyInit = aKinEnergyInitParticle; - G4String aCreatorProcessName= "NullProcess"; - const G4VProcess* aProcess = aTrack.GetCreatorProcess(); - if(aProcess) aCreatorProcessName = aProcess->GetProcessName(); -// G4cout << "pmt anode energy loss particle creator process name "<< aCreatorProcessName<<G4endl; + // G4cout << "pmt anode energy loss " << aTrack.GetMaterial()->GetName()<< G4endl; + const G4DynamicParticle *aParticle = aTrack.GetDynamicParticle(); + G4double aKinEnergyInitParticle = aParticle->GetKineticEnergy(); + G4double aKinEnergyInit = aKinEnergyInitParticle; + G4String aCreatorProcessName = "NullProcess"; + const G4VProcess *aProcess = aTrack.GetCreatorProcess(); + if (aProcess) + aCreatorProcessName = aProcess->GetProcessName(); + // G4cout << "pmt anode energy loss particle creator process name "<< aCreatorProcessName<<G4endl; - if( aCreatorProcessName == PmtPhotElectProc) { - aKinEnergyInit = aKinEnergyInitParticle/100000; + if (aCreatorProcessName == PmtPhotElectProc) { + aKinEnergyInit = aKinEnergyInitParticle / 100000; - if( fMatIndexK == (G4int) aTrack.GetMaterial() -> GetIndex()){ + if (fMatIndexK == (G4int)aTrack.GetMaterial()->GetIndex()) { - aParticleChange.ProposeTrackStatus(fStopAndKill); - aParticleChange.ProposeEnergy(0.0); - // aParticleChange.SetStatusChange(fStopAndKill); + aParticleChange.ProposeTrackStatus(fStopAndKill); + aParticleChange.ProposeEnergy(0.0); + // aParticleChange.SetStatusChange(fStopAndKill); return &aParticleChange; - } - } + } - //begin test -// G4StepPoint* pPreStepPoint = aStep.GetPreStepPoint(); -// G4StepPoint* pPostStepPoint = aStep.GetPostStepPoint(); -// -// G4TouchableHistory* CurTT = -// (G4TouchableHistory*)(pPreStepPoint->GetTouchable()); -// -// // CurTT -> MoveUpHistory(2); -// G4int currentPmtNumber= CurTT -> GetReplicaNumber(2); -// -// G4cout<<"current Energy Loss PMT number "<<currentPmtNumber<<G4endl; - //end test - - - G4double Eloss, aKinEnergyFinal; - if(aKinEnergyInit < MinKineticEnergy ) { Eloss=0.0 ; } - else if( aKinEnergyInit < MipEnergy ) { Eloss= aKinEnergyInit ;} - else { Eloss = MipEnergy; } - + // begin test + // G4StepPoint* pPreStepPoint = aStep.GetPreStepPoint(); + // G4StepPoint* pPostStepPoint = aStep.GetPostStepPoint(); + // + // G4TouchableHistory* CurTT = + // (G4TouchableHistory*)(pPreStepPoint->GetTouchable()); + // + // // CurTT -> MoveUpHistory(2); + // G4int currentPmtNumber= CurTT -> GetReplicaNumber(2); + // + // G4cout<<"current Energy Loss PMT number "<<currentPmtNumber<<G4endl; + // end test + + G4double Eloss, aKinEnergyFinal; + if (aKinEnergyInit < MinKineticEnergy) { + Eloss = 0.0; + } else if (aKinEnergyInit < MipEnergy) { + Eloss = aKinEnergyInit; + } else { + Eloss = MipEnergy; + } - // G4cout<< "Eloss = "<<Eloss<<G4endl; - aKinEnergyFinal=aKinEnergyInit-Eloss; + // G4cout<< "Eloss = "<<Eloss<<G4endl; + aKinEnergyFinal = aKinEnergyInit - Eloss; // Now apply the detection efficiency. When pixel efficiency is applied, this // detection efficiency is not applied. G4double EnergyTransfer = Eloss; - if( ! (rConfig -> ApplyPixelEff()) ) { - G4double Effrandom = G4UniformRand(); - if( Effrandom > ( rConfig -> getMapmtDetectionEfficiency() ) ) - { EnergyTransfer =0.0; } - // G4cout<<" Overall eff "<<Effrandom<<" "<< rConfig -> getMapmtDetectionEfficiency() - // <<" "<<EnergyTransfer<<G4endl; - - } - - - - - if(EnergyTransfer > 0.0 ) - { - // G4cout<<"Now deposting energy in Pmt Anode Eloss= " <<Eloss<<G4endl; - - //aParticleChange.SetLocalEnergyDeposit(Eloss); - aParticleChange.ProposeLocalEnergyDeposit(EnergyTransfer ); - }else if ( aKinEnergyInit > MipEnergy ) { - aParticleChange.ProposeLocalEnergyDeposit(Eloss); - } - - - if (aKinEnergyFinal <= MinKineticEnergy ) - { - // aParticleChange.SetStatusChange(fStopAndKill); - aParticleChange.ProposeTrackStatus(fStopAndKill); - aParticleChange.ProposeEnergy(0.0); - - } - else - { - aParticleChange.ProposeEnergy(aKinEnergyFinal); - // aParticleChange.SetEnergyChange(aKinEnergyFinal); + if (!(rConfig->ApplyPixelEff())) { + G4double Effrandom = G4UniformRand(); + if (Effrandom > (rConfig->getMapmtDetectionEfficiency())) { + EnergyTransfer = 0.0; } + // G4cout<<" Overall eff "<<Effrandom<<" "<< rConfig -> getMapmtDetectionEfficiency() + // <<" "<<EnergyTransfer<<G4endl; + } + if (EnergyTransfer > 0.0) { + // G4cout<<"Now deposting energy in Pmt Anode Eloss= " <<Eloss<<G4endl; + // aParticleChange.SetLocalEnergyDeposit(Eloss); + aParticleChange.ProposeLocalEnergyDeposit(EnergyTransfer); + } else if (aKinEnergyInit > MipEnergy) { + aParticleChange.ProposeLocalEnergyDeposit(Eloss); + } - return &aParticleChange; + if (aKinEnergyFinal <= MinKineticEnergy) { + // aParticleChange.SetStatusChange(fStopAndKill); + aParticleChange.ProposeTrackStatus(fStopAndKill); + aParticleChange.ProposeEnergy(0.0); + } else { + aParticleChange.ProposeEnergy(aKinEnergyFinal); + // aParticleChange.SetEnergyChange(aKinEnergyFinal); + } + return &aParticleChange; } -G4VParticleChange* PmtAnodeEnergyLoss::PostStepDoIt(const G4Track& aTrack, - const G4Step& aStep) { +G4VParticleChange *PmtAnodeEnergyLoss::PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) { // Do nothing - aParticleChange.Initialize(aTrack) ; - return G4VContinuousDiscreteProcess::PostStepDoIt(aTrack,aStep); - + aParticleChange.Initialize(aTrack); + return G4VContinuousDiscreteProcess::PostStepDoIt(aTrack, aStep); } -G4double PmtAnodeEnergyLoss::GetMeanFreePath(const G4Track& /*atrack */ , - G4double /* previousStepSize */, - G4ForceCondition* condition) { +G4double PmtAnodeEnergyLoss::GetMeanFreePath(const G4Track & /*atrack */, G4double /* previousStepSize */, + G4ForceCondition *condition) { // return infinity so that it does nothing. *condition = NotForced; return DBL_MAX; - } -G4double PmtAnodeEnergyLoss::GetContinuousStepLimit(const G4Track& track, - G4double /* previousStepSize */, - G4double /* currentMinimumStep */, - G4double& /* currentSafety */ ){ +G4double PmtAnodeEnergyLoss::GetContinuousStepLimit(const G4Track &track, G4double /* previousStepSize */, + G4double /* currentMinimumStep */, G4double & /* currentSafety */) { - G4double RangeForStep = finalRangeforStep; + G4double RangeForStep = finalRangeforStep; - if( ( fMatIndex != (int) track.GetMaterial() -> GetIndex()) && - ( fMatIndexK != (int) track.GetMaterial() -> GetIndex()) ) { + if ((fMatIndex != (int)track.GetMaterial()->GetIndex()) && (fMatIndexK != (int)track.GetMaterial()->GetIndex())) { RangeForStep = DBL_MAX; } - return RangeForStep; - } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcph/PmtPhotoElectricEffect.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcph/PmtPhotoElectricEffect.cc index dbe9266e78eac1e1ace0014873db83cead47d106..4629d6e9d4db20b7070473d73360b62bbab010a8 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcph/PmtPhotoElectricEffect.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcph/PmtPhotoElectricEffect.cc @@ -1,232 +1,196 @@ -#include "Geant4/globals.hh" -#include <math.h> -#include <vector> #include "PmtPhotoElectricEffect.hh" -#include "RichTbGeometryParameters.hh" +#include "Geant4/G4TouchableHistory.hh" #include "Geant4/G4TransportationManager.hh" #include "Geant4/Randomize.hh" +#include "Geant4/globals.hh" #include "RichTbAnalysisManager.hh" -#include "RichTbRunConfig.hh" +#include "RichTbGeometryParameters.hh" #include "RichTbMaterialParameters.hh" -#include "Geant4/G4TouchableHistory.hh" -#include "RichTbPhotoElectron.hh" -#include "RichTbPeUserInfoAttach.hh" #include "RichTbMiscNames.hh" +#include "RichTbPeUserInfoAttach.hh" +#include "RichTbPhotoElectron.hh" +#include "RichTbRunConfig.hh" +#include <math.h> +#include <vector> - -PmtPhotoElectricEffect::PmtPhotoElectricEffect(const G4String& processName): -G4VDiscreteProcess(processName), -NumPmtTot(NumPmts), -//NumPmtTot(RichTbPMTGeometryParameters::getNumPmts()), // TESTNumPmts -NumQEbins(PmtQENumBins), -PmtQE( NumPmts, std::vector<G4double>( NumQEbins) ), -PmtWabin( NumPmts, std::vector<G4double>( NumQEbins) ) -//PmtQE( RichTbPMTGeometryParameters::getNumPmts(), std::vector<G4double>( NumQEbins) ), // TESTNumPmts -//PmtWabin( RichTbPMTGeometryParameters::getNumPmts(), std::vector<G4double>( NumQEbins) ) // TESTNumPmts +PmtPhotoElectricEffect::PmtPhotoElectricEffect(const G4String &processName) + : G4VDiscreteProcess(processName), NumPmtTot(NumPmts), + // NumPmtTot(RichTbPMTGeometryParameters::getNumPmts()), // TESTNumPmts + NumQEbins(PmtQENumBins), PmtQE(NumPmts, std::vector<G4double>(NumQEbins)), + PmtWabin(NumPmts, std::vector<G4double>(NumQEbins)) +// PmtQE( RichTbPMTGeometryParameters::getNumPmts(), std::vector<G4double>( NumQEbins) ), // TESTNumPmts +// PmtWabin( RichTbPMTGeometryParameters::getNumPmts(), std::vector<G4double>( NumQEbins) ) // TESTNumPmts { - RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); - G4int aRadiatorConfiguration = rConfig->getRadiatorConfiguration(); - -// if(aRadiatorConfiguration == 3) { -// NumPmtTot = NumPmtsUpgrade15; -//// PmtQE.reserve(NumPmtTot); -//// PmtWabin.reserve(NumPmtTot); -// } else NumPmtTot = NumPmts; + RichTbRunConfig *rConfig = RichTbRunConfig::getRunConfigInstance(); + // G4int aRadiatorConfiguration = rConfig->getRadiatorConfiguration(); + // if(aRadiatorConfiguration == 3) { + // NumPmtTot = NumPmtsUpgrade15; + //// PmtQE.reserve(NumPmtTot); + //// PmtWabin.reserve(NumPmtTot); + // } else NumPmtTot = NumPmts; - PrePhotoElectricVolName = PMTQwLogVolName; - PostPhotoElectricVolName = PMTPhCathLogVolName; - //PmtPhElectronMomentum = 2 * CLHEP::GeV; - PmtPhElectronMomentum = ( rConfig->getPMTPEMomInit() ) * CLHEP::keV; - PhCathodeToSilDetDist = PMTQuartzToAnodeSurfaceDistance; + PrePhotoElectricVolName = PMTQwLogVolName; + PostPhotoElectricVolName = PMTPhCathLogVolName; + // PmtPhElectronMomentum = 2 * CLHEP::GeV; + PmtPhElectronMomentum = (rConfig->getPMTPEMomInit()) * CLHEP::keV; + PhCathodeToSilDetDist = PMTQuartzToAnodeSurfaceDistance; - for (int ipmt=0; ipmt < NumPmtTot; ++ipmt ) { + for (int ipmt = 0; ipmt < NumPmtTot; ++ipmt) { - std::vector<G4double>qeCurPmt = InitializePMTQE(ipmt); - std::vector<G4double>waCurPmt = InitializePMTWaveL(ipmt); - for(G4int iqbin=0; iqbin < (int) qeCurPmt.size(); iqbin++) - { + std::vector<G4double> qeCurPmt = InitializePMTQE(ipmt); + std::vector<G4double> waCurPmt = InitializePMTWaveL(ipmt); + for (G4int iqbin = 0; iqbin < (int)qeCurPmt.size(); iqbin++) { - PmtQE[ipmt][iqbin]=qeCurPmt[iqbin]/100; - PmtWabin[ipmt][iqbin]=waCurPmt[iqbin]; - } - - } - - G4cout<<"PMT Photoelectic process created "<<G4endl; + PmtQE[ipmt][iqbin] = qeCurPmt[iqbin] / 100; + PmtWabin[ipmt][iqbin] = waCurPmt[iqbin]; + } + } + G4cout << "PMT Photoelectic process created " << G4endl; } -PmtPhotoElectricEffect::~PmtPhotoElectricEffect(){} - +PmtPhotoElectricEffect::~PmtPhotoElectricEffect() {} -G4bool PmtPhotoElectricEffect::IsApplicable(const G4ParticleDefinition& aParticleType) -{ - return ( &aParticleType == G4OpticalPhoton::OpticalPhoton() ); +G4bool PmtPhotoElectricEffect::IsApplicable(const G4ParticleDefinition &aParticleType) { + return (&aParticleType == G4OpticalPhoton::OpticalPhoton()); } -G4double PmtPhotoElectricEffect::GetMeanFreePath(const G4Track& , - G4double , - G4ForceCondition* condition) -{ - *condition = Forced; +G4double PmtPhotoElectricEffect::GetMeanFreePath(const G4Track &, G4double, G4ForceCondition *condition) { + *condition = Forced; - return DBL_MAX; + return DBL_MAX; } -G4VParticleChange* PmtPhotoElectricEffect::PostStepDoIt(const G4Track& aTrack,const G4Step& aStep) { - aParticleChange.Initialize(aTrack); - - G4StepPoint* pPreStepPoint = aStep.GetPreStepPoint(); - G4StepPoint* pPostStepPoint = aStep.GetPostStepPoint(); - - if (pPostStepPoint->GetStepStatus() != fGeomBoundary) - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - - G4String PrePhName = pPreStepPoint -> GetPhysicalVolume() -> - GetLogicalVolume() ->GetName(); - G4String PostPhName= pPostStepPoint -> GetPhysicalVolume() -> - GetLogicalVolume() ->GetName(); - - // G4cout<<"PMTPhElec effect PreVol Post Vol "<<PrePhName - // <<" "<<PostPhName<<G4endl; - - - if(( PrePhName == PrePhotoElectricVolName && - PostPhName == PostPhotoElectricVolName) || - ( PostPhName == PrePhotoElectricVolName && - PrePhName == PostPhotoElectricVolName) ) - { - // G4cout<<"PMTPhElec effect PreVol Post Vol "<<PrePhName - // <<" "<<PostPhName<<G4endl; - - - } else { - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - } - - // if (aTrack.GetStepLength()<=kCarTolerance/2) - // return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - - const G4DynamicParticle* aDynamicPhoton = aTrack.GetDynamicParticle(); - G4double PhotonEnergy = aDynamicPhoton->GetKineticEnergy(); - if(PhotonEnergy <= 0.0 ) - { - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - } - G4TouchableHistory* CurTT = - (G4TouchableHistory*)(pPreStepPoint->GetTouchable()); - - // CurTT -> MoveUpHistory(2); - G4int currentPmtNumber= CurTT -> GetReplicaNumber(2); - - if(currentPmtNumber >= NumPmtTot ||currentPmtNumber < 0 ) - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); - G4double PhotWLength=PhotMomToWaveLength/PhotonEnergy; - // G4double PhotWLengthNano = PhotWLength/(CLHEP::nanometer); - // G4cout<<"PhotElect pmtnum PhEn Wlen "<<currentPmtNumber - // <<" "<<PhotonEnergy<<" " - // << PhotWLength<<G4endl; - G4double PhCathodeQE = getPmtQEff(currentPmtNumber, PhotWLength); - // G4cout<<"PhotElect pmtnum PhEn Wlen QE "<<currentPmtNumber - // <<" "<<PhotonEnergy<<" " - // << PhotWLength<< " "<< PhCathodeQE<< G4endl; - - - G4double randomnum = G4UniformRand(); - if(randomnum < PhCathodeQE ) { - // create photoelectron - G4double aPhotonTime= aTrack.GetGlobalTime(); - G4ThreeVector GlobalElectronOrigin= pPostStepPoint->GetPosition(); - G4Navigator* theNavigator = - G4TransportationManager::GetTransportationManager()-> - GetNavigatorForTracking(); - G4ThreeVector LocalElectronOriginInit = theNavigator-> - GetGlobalToLocalTransform(). - TransformPoint(GlobalElectronOrigin); - G4double ElecOriginTolerence= 0.004*CLHEP::mm; - G4ThreeVector LocalElectronOrigin (LocalElectronOriginInit.x(), - LocalElectronOriginInit.y(), - LocalElectronOriginInit.z()- ElecOriginTolerence ); - G4ThreeVector LocalElectronDirection(0,0,+1); - LocalElectronDirection = LocalElectronDirection.unit(); - const G4ThreeVector GlobalElectronDirection = theNavigator-> - GetLocalToGlobalTransform(). - TransformAxis(LocalElectronDirection); - G4double ElecKineEnergy= 100000*PmtPhElectronMomentum; - - G4TouchableHistory* CurTTP = (G4TouchableHistory*) (pPreStepPoint->GetTouchable()); - CurTTP -> MoveUpHistory(2); - G4int CurTTPDepth= CurTTP->GetHistoryDepth(); - G4ThreeVector ElnOrgInPhDet = CurTTP->GetHistory()->GetTransform(CurTTPDepth).TransformPoint(GlobalElectronOrigin); - - - G4DynamicParticle* aElectron= - new G4DynamicParticle (RichTbPhotoElectron::PhotoElectron(), - GlobalElectronDirection, ElecKineEnergy) ; - aParticleChange.SetNumberOfSecondaries(1) ; - G4Track* aSecPETrack = - new G4Track(aElectron,aPhotonTime,GlobalElectronOrigin); - // G4cout<<" PMTPh electric: created photoelectron "<<G4endl; - aSecPETrack->SetTouchableHandle((G4VTouchable*)0); - aSecPETrack->SetParentID(aTrack.GetTrackID()); - aSecPETrack->SetGoodForTrackingFlag(true); - G4Track* aTaggedSecPETrack = RichTbPeInfoAttach(aTrack,aSecPETrack, ElnOrgInPhDet); - aParticleChange.AddSecondary(aTaggedSecPETrack); - - // G4cout<<" added a sec tagged track in photoelectric "<<G4endl; - - - //aParticleChange.AddSecondary(aTaggedSecPETrack); - //aParticleChange.AddSecondary(aSecPETrack); - - aParticleChange.ProposeTrackStatus(fStopAndKill); - aParticleChange.ProposeLocalEnergyDeposit(PhotonEnergy); - - - }else { - //photon is not killed if it is not converted to photoelectron - - } - return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); +G4VParticleChange *PmtPhotoElectricEffect::PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) { + aParticleChange.Initialize(aTrack); + + G4StepPoint *pPreStepPoint = aStep.GetPreStepPoint(); + G4StepPoint *pPostStepPoint = aStep.GetPostStepPoint(); + + if (pPostStepPoint->GetStepStatus() != fGeomBoundary) + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + + G4String PrePhName = pPreStepPoint->GetPhysicalVolume()->GetLogicalVolume()->GetName(); + G4String PostPhName = pPostStepPoint->GetPhysicalVolume()->GetLogicalVolume()->GetName(); + + // G4cout<<"PMTPhElec effect PreVol Post Vol "<<PrePhName + // <<" "<<PostPhName<<G4endl; + + if ((PrePhName == PrePhotoElectricVolName && PostPhName == PostPhotoElectricVolName) || + (PostPhName == PrePhotoElectricVolName && PrePhName == PostPhotoElectricVolName)) { + // G4cout<<"PMTPhElec effect PreVol Post Vol "<<PrePhName + // <<" "<<PostPhName<<G4endl; + + } else { + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + } + + // if (aTrack.GetStepLength()<=kCarTolerance/2) + // return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + + const G4DynamicParticle *aDynamicPhoton = aTrack.GetDynamicParticle(); + G4double PhotonEnergy = aDynamicPhoton->GetKineticEnergy(); + if (PhotonEnergy <= 0.0) { + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + } + G4TouchableHistory *CurTT = (G4TouchableHistory *)(pPreStepPoint->GetTouchable()); + + // CurTT -> MoveUpHistory(2); + G4int currentPmtNumber = CurTT->GetReplicaNumber(2); + + if (currentPmtNumber >= NumPmtTot || currentPmtNumber < 0) + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); + G4double PhotWLength = PhotMomToWaveLength / PhotonEnergy; + // G4double PhotWLengthNano = PhotWLength/(CLHEP::nanometer); + // G4cout<<"PhotElect pmtnum PhEn Wlen "<<currentPmtNumber + // <<" "<<PhotonEnergy<<" " + // << PhotWLength<<G4endl; + G4double PhCathodeQE = getPmtQEff(currentPmtNumber, PhotWLength); + // G4cout<<"PhotElect pmtnum PhEn Wlen QE "<<currentPmtNumber + // <<" "<<PhotonEnergy<<" " + // << PhotWLength<< " "<< PhCathodeQE<< G4endl; + + G4double randomnum = G4UniformRand(); + if (randomnum < PhCathodeQE) { + // create photoelectron + G4double aPhotonTime = aTrack.GetGlobalTime(); + G4ThreeVector GlobalElectronOrigin = pPostStepPoint->GetPosition(); + G4Navigator *theNavigator = G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking(); + G4ThreeVector LocalElectronOriginInit = + theNavigator->GetGlobalToLocalTransform().TransformPoint(GlobalElectronOrigin); + G4double ElecOriginTolerence = 0.004 * CLHEP::mm; + G4ThreeVector LocalElectronOrigin(LocalElectronOriginInit.x(), LocalElectronOriginInit.y(), + LocalElectronOriginInit.z() - ElecOriginTolerence); + G4ThreeVector LocalElectronDirection(0, 0, +1); + LocalElectronDirection = LocalElectronDirection.unit(); + const G4ThreeVector GlobalElectronDirection = + theNavigator->GetLocalToGlobalTransform().TransformAxis(LocalElectronDirection); + G4double ElecKineEnergy = 100000 * PmtPhElectronMomentum; + + G4TouchableHistory *CurTTP = (G4TouchableHistory *)(pPreStepPoint->GetTouchable()); + CurTTP->MoveUpHistory(2); + G4int CurTTPDepth = CurTTP->GetHistoryDepth(); + G4ThreeVector ElnOrgInPhDet = CurTTP->GetHistory()->GetTransform(CurTTPDepth).TransformPoint(GlobalElectronOrigin); + + G4DynamicParticle *aElectron = + new G4DynamicParticle(RichTbPhotoElectron::PhotoElectron(), GlobalElectronDirection, ElecKineEnergy); + aParticleChange.SetNumberOfSecondaries(1); + G4Track *aSecPETrack = new G4Track(aElectron, aPhotonTime, GlobalElectronOrigin); + // G4cout<<" PMTPh electric: created photoelectron "<<G4endl; + aSecPETrack->SetTouchableHandle((G4VTouchable *)0); + aSecPETrack->SetParentID(aTrack.GetTrackID()); + aSecPETrack->SetGoodForTrackingFlag(true); + G4Track *aTaggedSecPETrack = RichTbPeInfoAttach(aTrack, aSecPETrack, ElnOrgInPhDet); + aParticleChange.AddSecondary(aTaggedSecPETrack); + + // G4cout<<" added a sec tagged track in photoelectric "<<G4endl; + + // aParticleChange.AddSecondary(aTaggedSecPETrack); + // aParticleChange.AddSecondary(aSecPETrack); + + aParticleChange.ProposeTrackStatus(fStopAndKill); + aParticleChange.ProposeLocalEnergyDeposit(PhotonEnergy); + + } else { + // photon is not killed if it is not converted to photoelectron + } + return G4VDiscreteProcess::PostStepDoIt(aTrack, aStep); } -G4double PmtPhotoElectricEffect::getPmtQEff(G4int PmtNum, - G4double PhotonWLength){ - - G4double hq1=0.0; G4double hq2=0.0; - G4double wa1=0.0; G4double wa2=0.0; G4double aslope=0.0; - // G4double aintc=0.0; - // G4cout<<"Now in Hpd QE Finder hpdnum PhWlen " - // <<HpdNum<<" "<<PhotonWLength<<G4endl; - G4double qeff=0.0; - - if( PhotonWLength == PmtWabin[PmtNum][ PmtQENumBins-1] ) { - qeff = PmtQE[PmtNum] [PmtQENumBins-1] ; - }else if ( PhotonWLength == PmtWabin[PmtNum][ 0] ) { - qeff = PmtQE[PmtNum] [0]; - } else if( ( PhotonWLength >= PmtWabin[PmtNum][0]) && - ( PhotonWLength < PmtWabin[PmtNum][PmtQENumBins-1]) ) { - G4int ibinq=0; - G4bool BinFound=false; - while (ibinq< (NumQEbins-1) && (! (BinFound)) ){ - wa1 = PmtWabin[PmtNum][ibinq]; - wa2 = PmtWabin[PmtNum][ibinq+1]; - if( PhotonWLength >= wa1 && PhotonWLength < wa2 ) { - hq1 = PmtQE[PmtNum][ibinq]; - hq2 = PmtQE[PmtNum][ibinq+1]; - aslope = (hq2-hq1)/(wa2-wa1); - // aintc = hq1 - (aslope * wa1 ); - // qeff= aintc + aslope * PhotonWLength ; - qeff= hq1 + aslope * (PhotonWLength-wa1) ; - BinFound=true; - - } - ibinq++; - } - - } - - - return qeff; - +G4double PmtPhotoElectricEffect::getPmtQEff(G4int PmtNum, G4double PhotonWLength) { + + G4double hq1 = 0.0; + G4double hq2 = 0.0; + G4double wa1 = 0.0; + G4double wa2 = 0.0; + G4double aslope = 0.0; + // G4double aintc=0.0; + // G4cout<<"Now in Hpd QE Finder hpdnum PhWlen " + // <<HpdNum<<" "<<PhotonWLength<<G4endl; + G4double qeff = 0.0; + + if (PhotonWLength == PmtWabin[PmtNum][PmtQENumBins - 1]) { + qeff = PmtQE[PmtNum][PmtQENumBins - 1]; + } else if (PhotonWLength == PmtWabin[PmtNum][0]) { + qeff = PmtQE[PmtNum][0]; + } else if ((PhotonWLength >= PmtWabin[PmtNum][0]) && (PhotonWLength < PmtWabin[PmtNum][PmtQENumBins - 1])) { + G4int ibinq = 0; + G4bool BinFound = false; + while (ibinq < (NumQEbins - 1) && (!(BinFound))) { + wa1 = PmtWabin[PmtNum][ibinq]; + wa2 = PmtWabin[PmtNum][ibinq + 1]; + if (PhotonWLength >= wa1 && PhotonWLength < wa2) { + hq1 = PmtQE[PmtNum][ibinq]; + hq2 = PmtQE[PmtNum][ibinq + 1]; + aslope = (hq2 - hq1) / (wa2 - wa1); + // aintc = hq1 - (aslope * wa1 ); + // qeff= aintc + aslope * PhotonWLength ; + qeff = hq1 + aslope * (PhotonWLength - wa1); + BinFound = true; + } + ibinq++; + } + } + + return qeff; } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcph/RichTbPhotoElectron.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcph/RichTbPhotoElectron.cc index 3f7f625a82db42362757bfb5987a72ebddf57ec9..93d4ba12a82f5cb2323128260d7d1178a7d7ef7a 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcph/RichTbPhotoElectron.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcph/RichTbPhotoElectron.cc @@ -23,8 +23,8 @@ // // $Id: RichTbPhotoElectron.cpp,v 1.3 2003/08/05 11:50:18 witoldp Exp $ // GEANT4 tag $Name: $ -// -// +// +// // ---------------------------------------------------------------------- // GEANT 4 class implementation file // @@ -41,81 +41,57 @@ // //#include "Geant4/G4std/fstream" //#include "Geant4/G4std/iomanip" - + //#include "Geant4/G4Electron.hh" -#include "Geant4/G4ParticleTable.hh" #include "RichTbPhotoElectron.hh" +#include "Geant4/G4ParticleTable.hh" // ###################################################################### // ### RICHTBPHOTOELECTRON ### // ###################################################################### +RichTbPhotoElectron *RichTbPhotoElectron::theRichTbPhotoElectronInstance = 0; -RichTbPhotoElectron* RichTbPhotoElectron::theRichTbPhotoElectronInstance=0; - -RichTbPhotoElectron* RichTbPhotoElectron::Definition() -{ - if (theRichTbPhotoElectronInstance !=0) return theRichTbPhotoElectronInstance; +RichTbPhotoElectron *RichTbPhotoElectron::Definition() { + if (theRichTbPhotoElectronInstance != 0) + return theRichTbPhotoElectronInstance; const G4String name = "pe-"; // search in particle table] - G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) - { - // create particle - // - // Arguments for constructor are as follows - // name mass width charge - // 2*spin parity C-conjugation - // 2*Isospin 2*Isospin3 G-parity - // type lepton number baryon number PDG encoding - // stable lifetime decay table - // shortlived subType anti_encoding - anInstance = new G4ParticleDefinition( - name, 0.51099906*CLHEP::MeV, 0.0*CLHEP::MeV, -1.*CLHEP::eplus, - 1, 0, 0, - 0, 0, 0, - "lepton", 1, 0, 9000011, - true, -1.0, NULL, - false, "e" - ); + G4ParticleTable *pTable = G4ParticleTable::GetParticleTable(); + G4ParticleDefinition *anInstance = pTable->FindParticle(name); + if (anInstance == 0) { + // create particle + // + // Arguments for constructor are as follows + // name mass width charge + // 2*spin parity C-conjugation + // 2*Isospin 2*Isospin3 G-parity + // type lepton number baryon number PDG encoding + // stable lifetime decay table + // shortlived subType anti_encoding + anInstance = new G4ParticleDefinition(name, 0.51099906 * CLHEP::MeV, 0.0 * CLHEP::MeV, -1. * CLHEP::eplus, 1, 0, 0, + 0, 0, 0, "lepton", 1, 0, 9000011, true, -1.0, NULL, false, "e"); // Bohr Magnetron - // G4double muB = -0.5*CLHEP::eplus*hbar_Planck/(0.51099906*CLHEP::MeV/c_squared) ; - // - // anInstance->SetPDGMagneticMoment( muB * 1.0011596521859 ); - - + // G4double muB = -0.5*CLHEP::eplus*hbar_Planck/(0.51099906*CLHEP::MeV/c_squared) ; + // + // anInstance->SetPDGMagneticMoment( muB * 1.0011596521859 ); } - theRichTbPhotoElectronInstance = reinterpret_cast<RichTbPhotoElectron*>(anInstance); + theRichTbPhotoElectronInstance = reinterpret_cast<RichTbPhotoElectron *>(anInstance); return theRichTbPhotoElectronInstance; } - - - // ...................................................................... // ... static member definitions ... // ...................................................................... -// +// // Arguments for constructor are as follows // name mass width charge // 2*spin parity C-conjugation // 2*Isospin 2*Isospin3 G-parity // type lepton number baryon number PDG encoding -// stable lifetime decay table - - -RichTbPhotoElectron* RichTbPhotoElectron::PhotoElectronDefinition() -{return Definition(); } - -RichTbPhotoElectron* RichTbPhotoElectron::PhotoElectron() -{ - return Definition(); -} - - - - +// stable lifetime decay table +RichTbPhotoElectron *RichTbPhotoElectron::PhotoElectronDefinition() { return Definition(); } +RichTbPhotoElectron *RichTbPhotoElectron::PhotoElectron() { return Definition(); } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcph/RichTbPhysicsList.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcph/RichTbPhysicsList.cc index 5f8567199112285492d80ab0109d77697b0b059e..4595a0c1d420d2b9ad0c4be0d6fb786a984f1b48 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcph/RichTbPhysicsList.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcph/RichTbPhysicsList.cc @@ -1,381 +1,321 @@ #include "Geant4/G4ios.hh" #include "Geant4/globals.hh" -#include "RichTbPhysicsList.hh" #include "RichTbPhotoElectron.hh" +#include "RichTbPhysicsList.hh" +#include "Geant4/G4Material.hh" +#include "Geant4/G4MaterialTable.hh" #include "Geant4/G4ParticleDefinition.hh" +#include "Geant4/G4ParticleTable.hh" #include "Geant4/G4ParticleTypes.hh" #include "Geant4/G4ParticleWithCuts.hh" -#include "Geant4/G4ParticleTable.hh" -#include "Geant4/G4VUserPhysicsList.hh" -#include "Geant4/G4ParticleTable.hh" -#include "Geant4/G4UserPhysicsListMessenger.hh" #include "Geant4/G4UImanager.hh" -#include "Geant4/G4Material.hh" -#include "Geant4/G4MaterialTable.hh" +#include "Geant4/G4UserPhysicsListMessenger.hh" +#include "Geant4/G4VUserPhysicsList.hh" #include "Geant4/G4ProcessManager.hh" #include "Geant4/G4ProcessVector.hh" #include "Geant4/G4UnitsTable.hh" -RichTbPhysicsList::RichTbPhysicsList():G4VUserPhysicsList() -{ - - G4cout << " Now define the physics List" << std::endl; - - // default cut value (1.0CLHEP::mm) - // defaultCutValue = 1.0*CLHEP::mm; - defaultCutValue = 0.1 * CLHEP::mm; - // defaultCutValue = 10.0*CLHEP::mm; +RichTbPhysicsList::RichTbPhysicsList() : G4VUserPhysicsList() { - // set energy range for SetCut calculation - // G4ParticleWithCuts::SetEnergyRange(0.99*CLHEP::keV, 100*TeV); + G4cout << " Now define the physics List" << std::endl; - // pointer to the particle table - theParticleTable = G4ParticleTable::GetParticleTable(); - theParticleIterator = theParticleTable->GetIterator(); + // default cut value (1.0CLHEP::mm) + // defaultCutValue = 1.0*CLHEP::mm; + defaultCutValue = 0.1 * CLHEP::mm; + // defaultCutValue = 10.0*CLHEP::mm; - // UI Messenger - // theMessenger = new G4UserPhysicsListMessenger(this); + // set energy range for SetCut calculation + // G4ParticleWithCuts::SetEnergyRange(0.99*CLHEP::keV, 100*TeV); - // G4cout << " End of RichTbPhyslist constructor" << std::endl; - -} + // pointer to the particle table + theParticleTable = G4ParticleTable::GetParticleTable(); + theParticleIterator = theParticleTable->GetIterator(); + // UI Messenger + // theMessenger = new G4UserPhysicsListMessenger(this); -RichTbPhysicsList::~RichTbPhysicsList() -{ + // G4cout << " End of RichTbPhyslist constructor" << std::endl; } +RichTbPhysicsList::~RichTbPhysicsList() {} -void RichTbPhysicsList::ConstructParticle() -{ - // In this method, static member functions should be called - // for all particles which you want to use. - // This ensures that objects of these particle types will be - // created in the program. - - ConstructBosons(); - ConstructLeptons(); - ConstructMesons(); - ConstructBaryons(); - +void RichTbPhysicsList::ConstructParticle() { + // In this method, static member functions should be called + // for all particles which you want to use. + // This ensures that objects of these particle types will be + // created in the program. + ConstructBosons(); + ConstructLeptons(); + ConstructMesons(); + ConstructBaryons(); } +void RichTbPhysicsList::ConstructBosons() { + // pseudo-particles + G4Geantino::GeantinoDefinition(); + G4ChargedGeantino::ChargedGeantinoDefinition(); -void RichTbPhysicsList::ConstructBosons() -{ - // pseudo-particles - G4Geantino::GeantinoDefinition(); - G4ChargedGeantino::ChargedGeantinoDefinition(); - - // gamma - G4Gamma::GammaDefinition(); + // gamma + G4Gamma::GammaDefinition(); - // optical photon - G4OpticalPhoton::OpticalPhotonDefinition(); + // optical photon + G4OpticalPhoton::OpticalPhotonDefinition(); } - -void RichTbPhysicsList::ConstructLeptons() -{ - // leptons - G4Electron::ElectronDefinition(); - G4Positron::PositronDefinition(); - G4NeutrinoE::NeutrinoEDefinition(); - G4AntiNeutrinoE::AntiNeutrinoEDefinition(); - G4MuonPlus::MuonPlusDefinition(); - G4MuonMinus::MuonMinusDefinition(); - G4NeutrinoMu::NeutrinoMuDefinition(); - G4AntiNeutrinoMu::AntiNeutrinoMuDefinition(); - - RichTbPhotoElectron::PhotoElectronDefinition(); - +void RichTbPhysicsList::ConstructLeptons() { + // leptons + G4Electron::ElectronDefinition(); + G4Positron::PositronDefinition(); + G4NeutrinoE::NeutrinoEDefinition(); + G4AntiNeutrinoE::AntiNeutrinoEDefinition(); + G4MuonPlus::MuonPlusDefinition(); + G4MuonMinus::MuonMinusDefinition(); + G4NeutrinoMu::NeutrinoMuDefinition(); + G4AntiNeutrinoMu::AntiNeutrinoMuDefinition(); + + RichTbPhotoElectron::PhotoElectronDefinition(); } - -void RichTbPhysicsList::ConstructMesons() -{ - // mesons - G4PionPlus::PionPlusDefinition(); - G4PionMinus::PionMinusDefinition(); - G4PionZero::PionZeroDefinition(); +void RichTbPhysicsList::ConstructMesons() { + // mesons + G4PionPlus::PionPlusDefinition(); + G4PionMinus::PionMinusDefinition(); + G4PionZero::PionZeroDefinition(); } - -void RichTbPhysicsList::ConstructBaryons() -{ - // barions - G4Proton::ProtonDefinition(); - G4AntiProton::AntiProtonDefinition(); - G4Neutron::NeutronDefinition(); - G4AntiNeutron::AntiNeutronDefinition(); +void RichTbPhysicsList::ConstructBaryons() { + // barions + G4Proton::ProtonDefinition(); + G4AntiProton::AntiProtonDefinition(); + G4Neutron::NeutronDefinition(); + G4AntiNeutron::AntiNeutronDefinition(); } - -void RichTbPhysicsList::ConstructProcess() -{ - AddTransportation(); - ConstructGeneral(); - ConstructEM(); - ConstructOp(); +void RichTbPhysicsList::ConstructProcess() { + AddTransportation(); + ConstructGeneral(); + ConstructEM(); + ConstructOp(); } - #include "Geant4/G4Decay.hh" -void RichTbPhysicsList::ConstructGeneral() -{ - G4Decay *theDecayProcess = new G4Decay(); - // theParticleTable = G4ParticleTable::GetParticleTable(); +void RichTbPhysicsList::ConstructGeneral() { + G4Decay *theDecayProcess = new G4Decay(); + // theParticleTable = G4ParticleTable::GetParticleTable(); - // theParticleTable-> DumpTable("ALL"); - // G4cout << "part iter " << theParticleTable-> GetIterator() << std::endl; - theParticleIterator->reset(); - - while ((*theParticleIterator) ()) { - G4ParticleDefinition *particle = theParticleIterator->value(); - G4ProcessManager *pmanager = particle->GetProcessManager(); - if (theDecayProcess->IsApplicable(*particle)) { - pmanager->AddDiscreteProcess(theDecayProcess); - pmanager->SetProcessOrdering(theDecayProcess, idxPostStep); - pmanager->SetProcessOrdering(theDecayProcess, idxAtRest); + // theParticleTable-> DumpTable("ALL"); + // G4cout << "part iter " << theParticleTable-> GetIterator() << std::endl; + theParticleIterator->reset(); - } + while ((*theParticleIterator)()) { + G4ParticleDefinition *particle = theParticleIterator->value(); + G4ProcessManager *pmanager = particle->GetProcessManager(); + if (theDecayProcess->IsApplicable(*particle)) { + pmanager->AddDiscreteProcess(theDecayProcess); + pmanager->SetProcessOrdering(theDecayProcess, idxPostStep); + pmanager->SetProcessOrdering(theDecayProcess, idxAtRest); } + } } - - #include "Geant4/G4ComptonScattering.hh" #include "Geant4/G4GammaConversion.hh" #include "Geant4/G4PhotoElectricEffect.hh" //#include "Geant4/G4MultipleScattering.hh" +#include "Geant4/G4MuMultipleScattering.hh" #include "Geant4/G4eMultipleScattering.hh" #include "Geant4/G4hMultipleScattering.hh" -#include "Geant4/G4MuMultipleScattering.hh" - -#include "Geant4/G4eIonisation.hh" #include "Geant4/G4eBremsstrahlung.hh" +#include "Geant4/G4eIonisation.hh" #include "Geant4/G4eplusAnnihilation.hh" -#include "Geant4/G4MuIonisation.hh" #include "Geant4/G4MuBremsstrahlung.hh" +#include "Geant4/G4MuIonisation.hh" #include "Geant4/G4MuPairProduction.hh" #include "Geant4/G4hIonisation.hh" -void RichTbPhysicsList::ConstructEM() -{ +void RichTbPhysicsList::ConstructEM() { G4cout << " Now creating EM processes" << G4endl; theParticleIterator->reset(); - while( (*theParticleIterator)() ){ - G4ParticleDefinition* particle = theParticleIterator->value(); - G4ProcessManager* pmanager = particle->GetProcessManager(); + while ((*theParticleIterator)()) { + G4ParticleDefinition *particle = theParticleIterator->value(); + G4ProcessManager *pmanager = particle->GetProcessManager(); G4String particleName = particle->GetParticleName(); if (particleName == "gamma") { - // gamma + // gamma // Construct processes for gamma - pmanager->AddDiscreteProcess(new G4GammaConversion("conv")); - pmanager->AddDiscreteProcess(new G4ComptonScattering("compt")); -// pmanager->AddDiscreteProcess(new G4PhotoElectricEffect()); + pmanager->AddDiscreteProcess(new G4GammaConversion("conv")); + pmanager->AddDiscreteProcess(new G4ComptonScattering("compt")); + // pmanager->AddDiscreteProcess(new G4PhotoElectricEffect()); } else if (particleName == "e-") { - //electron + // electron // Construct processes for electron - pmanager->AddProcess(new G4eMultipleScattering(),-1, 1, 1); - pmanager->AddProcess(new G4eIonisation(), -1, 2, 2); - pmanager->AddProcess(new G4eBremsstrahlung(), -1,-1, 3); + pmanager->AddProcess(new G4eMultipleScattering(), -1, 1, 1); + pmanager->AddProcess(new G4eIonisation(), -1, 2, 2); + pmanager->AddProcess(new G4eBremsstrahlung(), -1, -1, 3); } else if (particleName == "e+") { - //positron + // positron // Construct processes for positron - pmanager->AddProcess(new G4eMultipleScattering(),-1, 1, 1); - pmanager->AddProcess(new G4eIonisation(), -1, 2, 2); - pmanager->AddProcess(new G4eBremsstrahlung(), -1,-1, 3); - pmanager->AddProcess(new G4eplusAnnihilation("annihil"), 0,-1, 4); - } else if( particleName == "mu+" || - particleName == "mu-" ) { - //muon - // Construct processes for muon - pmanager->AddProcess(new G4MuMultipleScattering(),-1, 1, 1); - pmanager->AddProcess(new G4MuIonisation(), -1, 2, 2); - pmanager->AddProcess(new G4MuBremsstrahlung(), -1,-1, 3); - pmanager->AddProcess(new G4MuPairProduction(), -1,-1, 4); + pmanager->AddProcess(new G4eMultipleScattering(), -1, 1, 1); + pmanager->AddProcess(new G4eIonisation(), -1, 2, 2); + pmanager->AddProcess(new G4eBremsstrahlung(), -1, -1, 3); + pmanager->AddProcess(new G4eplusAnnihilation("annihil"), 0, -1, 4); + } else if (particleName == "mu+" || particleName == "mu-") { + // muon + // Construct processes for muon + pmanager->AddProcess(new G4MuMultipleScattering(), -1, 1, 1); + pmanager->AddProcess(new G4MuIonisation(), -1, 2, 2); + pmanager->AddProcess(new G4MuBremsstrahlung(), -1, -1, 3); + pmanager->AddProcess(new G4MuPairProduction(), -1, -1, 4); } else { - if ((particle->GetPDGCharge() != 0.0) && - (particle->GetParticleName() != "chargedgeantino") && - (particle->GetParticleName() != "pe-" )) { - // all others charged particles except geantino - pmanager->AddProcess(new G4hMultipleScattering(),-1,1,1); - pmanager->AddProcess(new G4hIonisation(), -1,2,2); - + if ((particle->GetPDGCharge() != 0.0) && (particle->GetParticleName() != "chargedgeantino") && + (particle->GetParticleName() != "pe-")) { + // all others charged particles except geantino + pmanager->AddProcess(new G4hMultipleScattering(), -1, 1, 1); + pmanager->AddProcess(new G4hIonisation(), -1, 2, 2); } } } G4cout << " End of creating EM processes" << G4endl; - } #include "RichTbMiscNames.hh" #include "RichTbRunConfig.hh" -#include "RichTbG4Cerenkov.hh" #include "Geant4/G4Scintillation.hh" +#include "HpdSiEnergyLoss.hh" +#include "PixelHpdPhotoElectricEffect.hh" +#include "PmtAnodeEnergyLoss.hh" +#include "PmtPhotoElectricEffect.hh" +#include "RichTbG4Cerenkov.hh" #include "RichTbG4OpAbsorption.hh" -#include "RichTbG4OpRayleigh.hh" #include "RichTbG4OpBoundaryProcess.hh" -#include "PmtPhotoElectricEffect.hh" -#include "PmtAnodeEnergyLoss.hh" -#include "PixelHpdPhotoElectricEffect.hh" -#include "HpdSiEnergyLoss.hh" - - -void RichTbPhysicsList::ConstructOp() - { - // G4cout << " Now creating Optical processes" << G4endl; - - // G4cout << " Now creating Cherenkov process" << G4endl; - RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); - G4int aRadiatorConfiguration = rConfig ->getRadiatorConfiguration(); - - - RichTbG4Cerenkov* theCerenkovProcess = new RichTbG4Cerenkov("RichTbCerenkov"); - PmtAnodeEnergyLoss* thePmtAnodeEnergyLossProcess = new PmtAnodeEnergyLoss("PmtAnodeEnergyLoss"); +#include "RichTbG4OpRayleigh.hh" - HpdSiEnergyLoss * theHpdSiEnergyLossProcess = (aRadiatorConfiguration == 2 ) ? - new HpdSiEnergyLoss("HpdSiEnergyLoss") : 0; +void RichTbPhysicsList::ConstructOp() { + // G4cout << " Now creating Optical processes" << G4endl; + // G4cout << " Now creating Cherenkov process" << G4endl; + RichTbRunConfig *rConfig = RichTbRunConfig::getRunConfigInstance(); + G4int aRadiatorConfiguration = rConfig->getRadiatorConfiguration(); - // G4Scintillation* theScintillationProcess = - // new G4Scintillation("Scintillation"); - // G4cout << " Now creating Absorption process" << G4endl; - RichTbG4OpAbsorption* theAbsorptionProcess = - new RichTbG4OpAbsorption(); - // used even in 2004 testbeam, although only neglibible effect expected. - // G4cout << " Now creating Rayleigh process" <<G4endl; - // - RichTbG4OpRayleigh* theRayleighScatteringProcess = - new RichTbG4OpRayleigh("RichTbG4OpRayleigh"); - // G4cout << " Now creating Boundary process" << G4endl; - RichTbG4OpBoundaryProcess* theBoundaryProcess = - new RichTbG4OpBoundaryProcess("RichTbG4BoundaryProcess"); + RichTbG4Cerenkov *theCerenkovProcess = new RichTbG4Cerenkov("RichTbCerenkov"); + PmtAnodeEnergyLoss *thePmtAnodeEnergyLossProcess = new PmtAnodeEnergyLoss("PmtAnodeEnergyLoss"); - // G4cout << " Now creating PmtPhotoElectric process" << G4endl; - PmtPhotoElectricEffect* thePmtPhotoElectricProcess= - new PmtPhotoElectricEffect(PmtPhotElectProc); + HpdSiEnergyLoss *theHpdSiEnergyLossProcess = + (aRadiatorConfiguration == 2) ? new HpdSiEnergyLoss("HpdSiEnergyLoss") : 0; - PixelHpdPhotoElectricEffect * theHpdPhotoElectricProcess= (aRadiatorConfiguration == 2 ) ? - new PixelHpdPhotoElectricEffect(HpdPhotElectProc) : 0; + // G4Scintillation* theScintillationProcess = + // new G4Scintillation("Scintillation"); + // G4cout << " Now creating Absorption process" << G4endl; + RichTbG4OpAbsorption *theAbsorptionProcess = new RichTbG4OpAbsorption(); + // used even in 2004 testbeam, although only neglibible effect expected. + // G4cout << " Now creating Rayleigh process" <<G4endl; + // + RichTbG4OpRayleigh *theRayleighScatteringProcess = new RichTbG4OpRayleigh("RichTbG4OpRayleigh"); + // G4cout << " Now creating Boundary process" << G4endl; + RichTbG4OpBoundaryProcess *theBoundaryProcess = new RichTbG4OpBoundaryProcess("RichTbG4BoundaryProcess"); + // G4cout << " Now creating PmtPhotoElectric process" << G4endl; + PmtPhotoElectricEffect *thePmtPhotoElectricProcess = new PmtPhotoElectricEffect(PmtPhotElectProc); + PixelHpdPhotoElectricEffect *theHpdPhotoElectricProcess = + (aRadiatorConfiguration == 2) ? new PixelHpdPhotoElectricEffect(HpdPhotElectProc) : 0; // theCerenkovProcess->SetMaxNumPhotonsPerStep(300); - theCerenkovProcess->SetMaxNumPhotonsPerStep(2000); - theCerenkovProcess->SetTrackSecondariesFirst(true); - // theScintillationProcess->SetScintillationYieldFactor(1.); - // theScintillationProcess->SetTrackSecondariesFirst(true); - - // G4OpticalSurfaceModel themodel = unified; - G4OpticalSurfaceModel themodel = glisur; - theBoundaryProcess->SetModel(themodel); -// -//there seems to be a problem with the definition of -// sigma_c++ particle. Until that is solved, avoid -// creating the Cherekov process for this particle and -// avoid make tests on its process manager. -// this is to avoid a crash from the process index check. -// SE 12-1-04. - - theParticleIterator->reset(); - while( (*theParticleIterator)() ){ - G4ParticleDefinition* particle = theParticleIterator->value(); - G4ProcessManager* pmanager = particle->GetProcessManager(); - // pmanager->DumpInfo(); - G4String particleName = particle->GetParticleName(); - if(particleName != "sigma_c++") { - //G4ProcessVector* aList= pmanager-> GetProcessList(); - // - // G4cout<<" Particle name numproc Procvectsize "<<particleName - // <<" "<<pmanager-> GetProcessListLength() - // <<" "<< aList->size() <<G4endl; - // for(G4int ii=0; ii< (int) aList->size() ;ii++) { - - // G4cout<<"Proc num name Indexes "<<ii<< " " - // << ( *aList ) [ii]->GetProcessName() - // << " "<<G4endl; - - // } - - - if (theCerenkovProcess->IsApplicable(*particle)) { - pmanager->AddContinuousProcess(theCerenkovProcess); - } - - // pmanager->AddProcess(theCerenkovProcess,-1,2,-1); - if( thePmtAnodeEnergyLossProcess-> IsApplicable(*particle)){ - pmanager-> AddProcess(thePmtAnodeEnergyLossProcess,-1,2,2); - } - - if(theHpdSiEnergyLossProcess) { - if(theHpdSiEnergyLossProcess -> IsApplicable(*particle)){ - pmanager-> AddProcess(theHpdSiEnergyLossProcess,-1,2,2); - } - - } - - - - + theCerenkovProcess->SetMaxNumPhotonsPerStep(2000); + theCerenkovProcess->SetTrackSecondariesFirst(true); + // theScintillationProcess->SetScintillationYieldFactor(1.); + // theScintillationProcess->SetTrackSecondariesFirst(true); + + // G4OpticalSurfaceModel themodel = unified; + G4OpticalSurfaceModel themodel = glisur; + theBoundaryProcess->SetModel(themodel); + // + // there seems to be a problem with the definition of + // sigma_c++ particle. Until that is solved, avoid + // creating the Cherekov process for this particle and + // avoid make tests on its process manager. + // this is to avoid a crash from the process index check. + // SE 12-1-04. + theParticleIterator->reset(); + while ((*theParticleIterator)()) { + G4ParticleDefinition *particle = theParticleIterator->value(); + G4ProcessManager *pmanager = particle->GetProcessManager(); + // pmanager->DumpInfo(); + G4String particleName = particle->GetParticleName(); + if (particleName != "sigma_c++") { + // G4ProcessVector* aList= pmanager-> GetProcessList(); + // + // G4cout<<" Particle name numproc Procvectsize "<<particleName + // <<" "<<pmanager-> GetProcessListLength() + // <<" "<< aList->size() <<G4endl; + // for(G4int ii=0; ii< (int) aList->size() ;ii++) { + + // G4cout<<"Proc num name Indexes "<<ii<< " " + // << ( *aList ) [ii]->GetProcessName() + // << " "<<G4endl; + + // } + + if (theCerenkovProcess->IsApplicable(*particle)) { + pmanager->AddContinuousProcess(theCerenkovProcess); + } + // pmanager->AddProcess(theCerenkovProcess,-1,2,-1); + if (thePmtAnodeEnergyLossProcess->IsApplicable(*particle)) { + pmanager->AddProcess(thePmtAnodeEnergyLossProcess, -1, 2, 2); + } + if (theHpdSiEnergyLossProcess) { + if (theHpdSiEnergyLossProcess->IsApplicable(*particle)) { + pmanager->AddProcess(theHpdSiEnergyLossProcess, -1, 2, 2); + } + } - // G4cout<<" End of adding Cherenkov process "<<G4endl; - - // if (theScintillationProcess->IsApplicable(*particle)) { - // pmanager->AddProcess(theScintillationProcess); - // pmanager->SetProcessOrderingToLast(theScintillationProcess, idxAtRest); - // pmanager->SetProcessOrderingToLast(theScintillationProcess, idxPostStep); - // } - if (particleName == "opticalphoton") { - // G4cout << " AddDiscreteProcess to OpticalPhoton " << G4endl; - pmanager->AddDiscreteProcess(theAbsorptionProcess); - pmanager->AddDiscreteProcess(theRayleighScatteringProcess); - pmanager->AddDiscreteProcess(theBoundaryProcess); - pmanager->AddDiscreteProcess(thePmtPhotoElectricProcess); - if(theHpdPhotoElectricProcess) pmanager->AddDiscreteProcess(theHpdPhotoElectricProcess); - - - } - } - - - - - - // G4cout << " End of creating Optical processes" << G4endl; - - } - - } - - -void RichTbPhysicsList::SetCuts() -{ - if (verboseLevel > 1) { - G4cout << "RichTbPhysicsList::SetCuts:"; + // G4cout<<" End of adding Cherenkov process "<<G4endl; + + // if (theScintillationProcess->IsApplicable(*particle)) { + // pmanager->AddProcess(theScintillationProcess); + // pmanager->SetProcessOrderingToLast(theScintillationProcess, idxAtRest); + // pmanager->SetProcessOrderingToLast(theScintillationProcess, idxPostStep); + // } + if (particleName == "opticalphoton") { + // G4cout << " AddDiscreteProcess to OpticalPhoton " << G4endl; + pmanager->AddDiscreteProcess(theAbsorptionProcess); + pmanager->AddDiscreteProcess(theRayleighScatteringProcess); + pmanager->AddDiscreteProcess(theBoundaryProcess); + pmanager->AddDiscreteProcess(thePmtPhotoElectricProcess); + if (theHpdPhotoElectricProcess) + pmanager->AddDiscreteProcess(theHpdPhotoElectricProcess); + } } - // " G4VUserPhysicsList::SetCutsWithDefault" method sets - // the default cut value for all particle types - SetCutsWithDefault(); - if (verboseLevel>0) DumpCutValuesTable(); + // G4cout << " End of creating Optical processes" << G4endl; + } +} + +void RichTbPhysicsList::SetCuts() { + if (verboseLevel > 1) { + G4cout << "RichTbPhysicsList::SetCuts:"; + } + // " G4VUserPhysicsList::SetCutsWithDefault" method sets + // the default cut value for all particle types + SetCutsWithDefault(); + if (verboseLevel > 0) + DumpCutValuesTable(); } diff --git a/LHCbG4Tests/G4RichTbSimHTest/src/srcph/RichTbPrimaryGeneratorAction.cc b/LHCbG4Tests/G4RichTbSimHTest/src/srcph/RichTbPrimaryGeneratorAction.cc index 0ef539813d316748d7052a45adb9f30f0ee3fdd8..b7448e5d1002952eddf4820db077a25f3a80bbce 100644 --- a/LHCbG4Tests/G4RichTbSimHTest/src/srcph/RichTbPrimaryGeneratorAction.cc +++ b/LHCbG4Tests/G4RichTbSimHTest/src/srcph/RichTbPrimaryGeneratorAction.cc @@ -1,138 +1,124 @@ #include "RichTbPrimaryGeneratorAction.hh" -#include "Geant4/globals.hh" #include "Geant4/G4Event.hh" +#include "Geant4/G4ParticleDefinition.hh" #include "Geant4/G4ParticleGun.hh" #include "Geant4/G4ParticleTable.hh" -#include "Geant4/G4ParticleDefinition.hh" -#include "RichTbMaterialParameters.hh" #include "Geant4/Randomize.hh" -#include "RichTbRunConfig.hh" -#include "RichTbGeometryParameters.hh" -#include <math.h> -#include "RichTbBeamProperty.hh" +#include "Geant4/globals.hh" #include "RichTbAnalysisManager.hh" +#include "RichTbBeamProperty.hh" +#include "RichTbGeometryParameters.hh" +#include "RichTbMaterialParameters.hh" +#include "RichTbRunConfig.hh" +#include <math.h> -RichTbPrimaryGeneratorAction::RichTbPrimaryGeneratorAction() -{ - //RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); - - G4int n_particle = 1; - particleGun = new G4ParticleGun(n_particle); +RichTbPrimaryGeneratorAction::RichTbPrimaryGeneratorAction() { + // RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); + G4int n_particle = 1; + particleGun = new G4ParticleGun(n_particle); } - -RichTbPrimaryGeneratorAction::~RichTbPrimaryGeneratorAction() -{ - if( particleGun != 0 ) delete particleGun; +RichTbPrimaryGeneratorAction::~RichTbPrimaryGeneratorAction() { + if (particleGun != 0) + delete particleGun; } - -void RichTbPrimaryGeneratorAction::GeneratePrimaries(G4Event * anEvent) -{ - RichTbBeamProperty* aBeamProperty = - RichTbBeamProperty:: getRichTbBeamPropertyInstance(); +void RichTbPrimaryGeneratorAction::GeneratePrimaries(G4Event *anEvent) { + RichTbBeamProperty *aBeamProperty = RichTbBeamProperty::getRichTbBeamPropertyInstance(); aBeamProperty->ResetBeamProperty(); - RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); + RichTbRunConfig *rConfig = RichTbRunConfig::getRunConfigInstance(); G4int NumPart = rConfig->getRichTbNumPartEvent(); - for(G4int ip=0; ip< NumPart ; ip++){ - CurrentBeamParticle= SetParticleType(); - particleGun->SetParticleTime(0.0*CLHEP::ns); + for (G4int ip = 0; ip < NumPart; ip++) { + CurrentBeamParticle = SetParticleType(); + particleGun->SetParticleTime(0.0 * CLHEP::ns); SetParticleStartPos(); SetParticleDirection(); SetParticleKineticEnergy(CurrentBeamParticle); particleGun->GeneratePrimaryVertex(anEvent); } - } -G4ParticleDefinition* RichTbPrimaryGeneratorAction::SetParticleType() -{ - RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); - RichTbBeamProperty* aBeamProperty = - RichTbBeamProperty:: getRichTbBeamPropertyInstance(); +G4ParticleDefinition *RichTbPrimaryGeneratorAction::SetParticleType() { + RichTbRunConfig *rConfig = RichTbRunConfig::getRunConfigInstance(); + RichTbBeamProperty *aBeamProperty = RichTbBeamProperty::getRichTbBeamPropertyInstance(); G4int patype = rConfig->getRichTbParticleTypeCode(); // default is with patyp =0 which is for pi-. // the pi- beam is set to be not a mixture, for now. // the pi+ beam is a mixture of pi+ and protons. - G4String particleName="pi-"; + G4String particleName = "pi-"; - if(patype == 1 ) { - particleName="opticalphoton"; + if (patype == 1) { + particleName = "opticalphoton"; - }else if(patype == 2) { - G4double PosFr = rConfig-> getPosBeamFraction(); + } else if (patype == 2) { + G4double PosFr = rConfig->getPosBeamFraction(); G4double randomQut1 = G4UniformRand(); - if(randomQut1 > PosFr ) { - particleName="pi+"; - }else { - particleName="proton"; + if (randomQut1 > PosFr) { + particleName = "pi+"; + } else { + particleName = "proton"; } - }else if(patype == 3) { + } else if (patype == 3) { - G4double ElnFr = rConfig-> getPosBeamFraction(); + G4double ElnFr = rConfig->getPosBeamFraction(); G4double randomQut1 = G4UniformRand(); - if(randomQut1 > ElnFr ) { - particleName="pi-"; - }else { - particleName="e-"; + if (randomQut1 > ElnFr) { + particleName = "pi-"; + } else { + particleName = "e-"; } - } else if(patype == 4) { + } else if (patype == 4) { - G4double KaonFr = rConfig-> getPosBeamFraction(); + G4double KaonFr = rConfig->getPosBeamFraction(); G4double randomQutk = G4UniformRand(); - if(randomQutk > KaonFr ) { - particleName="pi-"; - }else { - particleName="kaon-"; + if (randomQutk > KaonFr) { + particleName = "pi-"; + } else { + particleName = "kaon-"; } - }else if(patype == 5) { + } else if (patype == 5) { - G4double KaonFrp = rConfig-> getPosBeamFraction(); + G4double KaonFrp = rConfig->getPosBeamFraction(); G4double randomQutp = G4UniformRand(); - if(randomQutp > KaonFrp ) { - particleName="pi+"; - }else { - particleName="kaon+"; + if (randomQutp > KaonFrp) { + particleName = "pi+"; + } else { + particleName = "kaon+"; } - }else if(patype == 6) { - particleName="proton"; - }else if(patype == 7) { - particleName="mu-"; + } else if (patype == 6) { + particleName = "proton"; + } else if (patype == 7) { + particleName = "mu-"; } - G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); - G4ParticleDefinition* particle= - particleTable->FindParticle(particleName); - - particleGun->SetParticleDefinition(particle); - //G4cout<<" Current Beam particle is "<<particleName<<G4endl; - - // now store the info. - aBeamProperty->setBeamPartDef(particle); - aBeamProperty-> setBeamPartName(particleName); + G4ParticleTable *particleTable = G4ParticleTable::GetParticleTable(); + G4ParticleDefinition *particle = particleTable->FindParticle(particleName); - return particle; + particleGun->SetParticleDefinition(particle); + // G4cout<<" Current Beam particle is "<<particleName<<G4endl; + // now store the info. + aBeamProperty->setBeamPartDef(particle); + aBeamProperty->setBeamPartName(particleName); + return particle; } void RichTbPrimaryGeneratorAction::SetParticleStartPos() { - RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); - RichTbBeamProperty* aBeamProperty = - RichTbBeamProperty:: getRichTbBeamPropertyInstance(); - G4ThreeVector positionStd= aBeamProperty->getNominalBeamPosition() ; + RichTbRunConfig *rConfig = RichTbRunConfig::getRunConfigInstance(); + RichTbBeamProperty *aBeamProperty = RichTbBeamProperty::getRichTbBeamPropertyInstance(); + G4ThreeVector positionStd = aBeamProperty->getNominalBeamPosition(); - - G4int PosCode=rConfig->getRichTbParticleStartPosCode(); + G4int PosCode = rConfig->getRichTbParticleStartPosCode(); // standard positon is at PosCode =0. // G4double beamPosXStd = AgelTileXLocation[0]; // G4double beamPosYStd = AgelTileYLocation[0]+0.5*RichTbVesselYSize; @@ -144,251 +130,225 @@ void RichTbPrimaryGeneratorAction::SetParticleStartPos() { // <<positionStd.x()<<" "<<positionStd.y()<<" "<<positionStd.z() // <<G4endl; - - if(PosCode == 0 ) { + if (PosCode == 0) { particleGun->SetParticlePosition(positionStd); - // store the positon for writeOut. - - aBeamProperty-> setBeamPosition( positionStd); - - }else if (PosCode == 1 ) { - - G4double aBeamXShift = rConfig->getBeamXPosShift(); - G4double aBeamYShift = rConfig->getBeamYPosShift(); - G4double aBeamPosX = positionStd.x() + aBeamXShift; - G4double aBeamPosY = positionStd.y() + aBeamYShift; - G4double aBeamPosZ = positionStd.z(); + // store the positon for writeOut. - G4ThreeVector aBeamPosition(aBeamPosX,aBeamPosY, aBeamPosZ); - particleGun->SetParticlePosition(aBeamPosition); - // store the positon for writeOut. - //G4cout<<" Current beam part start pos is " - // << aBeamPosX<<" "<< aBeamPosY<<" "<< aBeamPosZ<<G4endl; + aBeamProperty->setBeamPosition(positionStd); - aBeamProperty-> setBeamPosition(aBeamPosition ); + } else if (PosCode == 1) { - } else if ( PosCode == 2 ) { - // + G4double aBeamXShift = rConfig->getBeamXPosShift(); + G4double aBeamYShift = rConfig->getBeamYPosShift(); + G4double aBeamPosX = positionStd.x() + aBeamXShift; + G4double aBeamPosY = positionStd.y() + aBeamYShift; + G4double aBeamPosZ = positionStd.z(); - G4double aSpBeamX= rConfig->getBeamSpecialXPos(); - G4double aSpBeamY= rConfig->getBeamSpecialYPos(); - G4double aSpBeamZ= rConfig->getBeamSpecialZPos(); + G4ThreeVector aBeamPosition(aBeamPosX, aBeamPosY, aBeamPosZ); + particleGun->SetParticlePosition(aBeamPosition); + // store the positon for writeOut. + // G4cout<<" Current beam part start pos is " + // << aBeamPosX<<" "<< aBeamPosY<<" "<< aBeamPosZ<<G4endl; - G4ThreeVector aSpBeam( aSpBeamX, aSpBeamY, aSpBeamZ); - particleGun->SetParticlePosition( aSpBeam ); + aBeamProperty->setBeamPosition(aBeamPosition); - // store the positon for writeOut. + } else if (PosCode == 2) { + // - //G4cout<<" Current beam part start pos is " - // << aSpBeamX<<" "<< aSpBeamY<<" "<< aSpBeamZ<<G4endl; + G4double aSpBeamX = rConfig->getBeamSpecialXPos(); + G4double aSpBeamY = rConfig->getBeamSpecialYPos(); + G4double aSpBeamZ = rConfig->getBeamSpecialZPos(); - aBeamProperty-> setBeamPosition(aSpBeam ); + G4ThreeVector aSpBeam(aSpBeamX, aSpBeamY, aSpBeamZ); + particleGun->SetParticlePosition(aSpBeam); - } else if (PosCode == 3 ) { + // store the positon for writeOut. - // make random beam pos along X axis to study the Gap betwen aerogel tiles. - G4double aSpBeamXInit= rConfig->getBeamSpecialXPos(); - G4double aSpBeamYInit= rConfig->getBeamSpecialYPos(); - G4double aSpBeamZInit= rConfig->getBeamSpecialZPos(); + // G4cout<<" Current beam part start pos is " + // << aSpBeamX<<" "<< aSpBeamY<<" "<< aSpBeamZ<<G4endl; - // G4double aSpBeamXRange = 8.0*CLHEP::mm; - G4double aSpBeamXRange = rConfig->getBeamSpecialXRange(); - G4double rands = G4UniformRand(); - // set up a flat random number from -1 to 1. - G4double aSpBeamXCurrent = aSpBeamXInit+((rands-0.5)*2.0)*aSpBeamXRange; - G4ThreeVector aSpBeam( aSpBeamXCurrent, aSpBeamYInit, aSpBeamZInit); - particleGun->SetParticlePosition( aSpBeam ); - // store the positon for writeOut. - //G4cout<<" Current beam part start pos is " - // << aSpBeamXCurrent<<" "<< aSpBeamYInit<<" " - // << aSpBeamZInit<<G4endl; + aBeamProperty->setBeamPosition(aSpBeam); - aBeamProperty-> setBeamPosition(aSpBeam ); + } else if (PosCode == 3) { + // make random beam pos along X axis to study the Gap betwen aerogel tiles. + G4double aSpBeamXInit = rConfig->getBeamSpecialXPos(); + G4double aSpBeamYInit = rConfig->getBeamSpecialYPos(); + G4double aSpBeamZInit = rConfig->getBeamSpecialZPos(); - } + // G4double aSpBeamXRange = 8.0*CLHEP::mm; + G4double aSpBeamXRange = rConfig->getBeamSpecialXRange(); + G4double rands = G4UniformRand(); + // set up a flat random number from -1 to 1. + G4double aSpBeamXCurrent = aSpBeamXInit + ((rands - 0.5) * 2.0) * aSpBeamXRange; + G4ThreeVector aSpBeam(aSpBeamXCurrent, aSpBeamYInit, aSpBeamZInit); + particleGun->SetParticlePosition(aSpBeam); + // store the positon for writeOut. + // G4cout<<" Current beam part start pos is " + // << aSpBeamXCurrent<<" "<< aSpBeamYInit<<" " + // << aSpBeamZInit<<G4endl; + aBeamProperty->setBeamPosition(aSpBeam); + } } -void RichTbPrimaryGeneratorAction::SetParticleKineticEnergy -(G4ParticleDefinition* CurPart ) -{ - RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); +void RichTbPrimaryGeneratorAction::SetParticleKineticEnergy(G4ParticleDefinition *CurPart) { + RichTbRunConfig *rConfig = RichTbRunConfig::getRunConfigInstance(); // RichTbAnalysisManager* rAnalysis = RichTbAnalysisManager::getInstance(); // G4double paMass = CurPart->GetPDGMass(); // G4cout<<"Cur beam paticle mass " <<paMass<<G4endl; - G4int PEnergyCode=rConfig->getRichTbParticleEnergyCode(); + G4int PEnergyCode = rConfig->getRichTbParticleEnergyCode(); G4int curpatype = rConfig->getRichTbParticleTypeCode(); G4double paMass = 0.0; - if( curpatype != 1 ) { + if (curpatype != 1) { - paMass = CurPart->GetPDGMass(); + paMass = CurPart->GetPDGMass(); } - if( PEnergyCode == 0 ) { - - G4double particleMom =(rConfig-> getRichTbParticleMomentum())*CLHEP::GeV; - G4double PKineticEnergy= - pow((particleMom*particleMom+paMass*paMass),0.5) - paMass; - particleGun->SetParticleEnergy(PKineticEnergy); + if (PEnergyCode == 0) { - // G4cout<<"Current beam Name momentum mass and KE are " - // <<CurPart->GetParticleName()<<" "<< particleMom - // <<" "<<paMass <<" "<< PKineticEnergy <<G4endl; + G4double particleMom = (rConfig->getRichTbParticleMomentum()) * CLHEP::GeV; + G4double PKineticEnergy = pow((particleMom * particleMom + paMass * paMass), 0.5) - paMass; + particleGun->SetParticleEnergy(PKineticEnergy); + // G4cout<<"Current beam Name momentum mass and KE are " + // <<CurPart->GetParticleName()<<" "<< particleMom + // <<" "<<paMass <<" "<< PKineticEnergy <<G4endl; - } else if (PEnergyCode == 1 && curpatype == 1 ) { + } else if (PEnergyCode == 1 && curpatype == 1) { // for photons get the wavelength. - G4double particlewlen = ( rConfig->getConstPhotWlenBeam()) *CLHEP::nanometer; - - G4double photonparticleMom = 3.0*CLHEP::eV; - if ( particlewlen != 0.0 ) { - photonparticleMom = ( PhotWaveLengthToMom / particlewlen); + G4double particlewlen = (rConfig->getConstPhotWlenBeam()) * CLHEP::nanometer; + G4double photonparticleMom = 3.0 * CLHEP::eV; + if (particlewlen != 0.0) { + photonparticleMom = (PhotWaveLengthToMom / particlewlen); } - G4double PhotonKineticEnergy= photonparticleMom; + G4double PhotonKineticEnergy = photonparticleMom; particleGun->SetParticleEnergy(PhotonKineticEnergy); // G4cout<<"Current beam Photon momentum and wlen are " // <<" "<< photonparticleMom <<" "<< particlewlen <<G4endl; + } else if (PEnergyCode == 2 && curpatype == 1) { - } else if ( PEnergyCode == 2 && curpatype == 1 ) { - - G4double photonparticleMinMom = 1.3*CLHEP::eV; - G4double photonparticleMaxMom = 6.5*CLHEP::eV; - G4double photonMinWlen = ( rConfig->getPhotWlenMinBeam()) * CLHEP::nanometer; - G4double photonMaxWlen = ( rConfig->getPhotWlenMaxBeam())* CLHEP::nanometer; - if( photonMinWlen != 0.0 ) { - photonparticleMaxMom = PhotWaveLengthToMom/ photonMinWlen; - - } - if( photonMaxWlen != 0.0 ) { - photonparticleMinMom = PhotWaveLengthToMom/ photonMaxWlen; - - } - - G4double randa = G4UniformRand(); - G4double CurPhotMom = photonparticleMinMom+ - randa* ( photonparticleMaxMom - photonparticleMinMom); - G4double curPhotonKineticEnergy= CurPhotMom; - - particleGun->SetParticleEnergy( curPhotonKineticEnergy ); + G4double photonparticleMinMom = 1.3 * CLHEP::eV; + G4double photonparticleMaxMom = 6.5 * CLHEP::eV; + G4double photonMinWlen = (rConfig->getPhotWlenMinBeam()) * CLHEP::nanometer; + G4double photonMaxWlen = (rConfig->getPhotWlenMaxBeam()) * CLHEP::nanometer; + if (photonMinWlen != 0.0) { + photonparticleMaxMom = PhotWaveLengthToMom / photonMinWlen; + } + if (photonMaxWlen != 0.0) { + photonparticleMinMom = PhotWaveLengthToMom / photonMaxWlen; + } - // G4double curPhotonWlenNano = 0.0; - // if( CurPhotMom != 0.0 ) { + G4double randa = G4UniformRand(); + G4double CurPhotMom = photonparticleMinMom + randa * (photonparticleMaxMom - photonparticleMinMom); + G4double curPhotonKineticEnergy = CurPhotMom; - // curPhotonWlenNano = PhotMomToWaveLength /(CurPhotMom*CLHEP::nanometer); - // } + particleGun->SetParticleEnergy(curPhotonKineticEnergy); - // if( rAnalysis ->getfhistoWClarityProduced() ) { - // rAnalysis ->getfhistoWClarityProduced()->fill(curPhotonWlenNano,1.0); + // G4double curPhotonWlenNano = 0.0; + // if( CurPhotMom != 0.0 ) { - // } + // curPhotonWlenNano = PhotMomToWaveLength /(CurPhotMom*CLHEP::nanometer); + // } - // G4cout<<"Current beam Photon momentum and wavlength are " - // <<" "<< CurPhotMom <<" "<<curPhotonWlenNano<<G4endl; + // if( rAnalysis ->getfhistoWClarityProduced() ) { + // rAnalysis ->getfhistoWClarityProduced()->fill(curPhotonWlenNano,1.0); + // } + // G4cout<<"Current beam Photon momentum and wavlength are " + // <<" "<< CurPhotMom <<" "<<curPhotonWlenNano<<G4endl; } - - - - } -void RichTbPrimaryGeneratorAction::SetParticleDirection() -{ - RichTbRunConfig* rConfig = RichTbRunConfig::getRunConfigInstance(); - RichTbBeamProperty* aBeamProperty = - RichTbBeamProperty:: getRichTbBeamPropertyInstance(); +void RichTbPrimaryGeneratorAction::SetParticleDirection() { + RichTbRunConfig *rConfig = RichTbRunConfig::getRunConfigInstance(); + RichTbBeamProperty *aBeamProperty = RichTbBeamProperty::getRichTbBeamPropertyInstance(); // default direction code is 0 for 001 direction with no // misalignment or divergence. - G4int DirCode=rConfig->getRichTbParticleDirectionCode(); + G4int DirCode = rConfig->getRichTbParticleDirectionCode(); // G4ThreeVector direction(0.0,0.0,1.0) - G4ThreeVector directionStd= - aBeamProperty ->getNominalBeamDirectionCos(); + G4ThreeVector directionStd = aBeamProperty->getNominalBeamDirectionCos(); G4ThreeVector direction = directionStd; - G4double aBeamDirX= rConfig->getBeamDirX(); - G4double aBeamDirY= rConfig->getBeamDirY(); - G4double aBeamDiverX = rConfig->getBeamDivergenceX(); - G4double aBeamDiverY = rConfig->getBeamDivergenceY(); + G4double aBeamDirX = rConfig->getBeamDirX(); + G4double aBeamDirY = rConfig->getBeamDirY(); + G4double aBeamDiverX = rConfig->getBeamDivergenceX(); + G4double aBeamDiverY = rConfig->getBeamDivergenceY(); - if(DirCode == 1 ) { - G4ThreeVector aDirection( directionStd.x(), - directionStd.y() ,-1.0*directionStd.z() ); - direction=aDirection; - }else if ( DirCode == 2 ) { + if (DirCode == 1) { + G4ThreeVector aDirection(directionStd.x(), directionStd.y(), -1.0 * directionStd.z()); + direction = aDirection; + } else if (DirCode == 2) { // with misalignment and no divergence. - G4ThreeVector bDirection( aBeamDirX,aBeamDirY,1.0); - direction=bDirection; + G4ThreeVector bDirection(aBeamDirX, aBeamDirY, 1.0); + direction = bDirection; - } else if (DirCode == 3 ) { + } else if (DirCode == 3) { // with misalignment and divergence. - G4double pxBeA = G4RandGauss::shoot( aBeamDirX ,aBeamDiverX); - G4double pyBeA = G4RandGauss::shoot(aBeamDirY , aBeamDiverY); - G4double thetaBeam=pow( (pxBeA*pxBeA + pyBeA*pyBeA),0.5); - G4double phiBeam = 0.0; + G4double pxBeA = G4RandGauss::shoot(aBeamDirX, aBeamDiverX); + G4double pyBeA = G4RandGauss::shoot(aBeamDirY, aBeamDiverY); + G4double thetaBeam = pow((pxBeA * pxBeA + pyBeA * pyBeA), 0.5); + G4double phiBeam = 0.0; - if (thetaBeam != 0.) { - phiBeam = acos(pxBeA/thetaBeam); - if ( pyBeA < 0.) phiBeam = -phiBeam; - } - G4double pxBe = sin(thetaBeam) * cos(phiBeam); - G4double pyBe = sin(thetaBeam) * sin(phiBeam); - G4double pzBe = cos(thetaBeam); - - G4ThreeVector cDirection(pxBe,pyBe,pzBe); - direction=cDirection; - - } else if (DirCode == 4 ) { + if (thetaBeam != 0.) { + phiBeam = acos(pxBeA / thetaBeam); + if (pyBeA < 0.) + phiBeam = -phiBeam; + } + G4double pxBe = sin(thetaBeam) * cos(phiBeam); + G4double pyBe = sin(thetaBeam) * sin(phiBeam); + G4double pzBe = cos(thetaBeam); + G4ThreeVector cDirection(pxBe, pyBe, pzBe); + direction = cDirection; - G4double aslpx=aBeamDirX/1.0; - G4double aslpy=aBeamDirY/1.0; + } else if (DirCode == 4) { - G4double rslpX = G4RandGauss::shoot( aslpx ,aBeamDiverX); - G4double rslpY = G4RandGauss::shoot( aslpy ,aBeamDiverY); + G4double aslpx = aBeamDirX / 1.0; + G4double aslpy = aBeamDirY / 1.0; - G4double rsfc = pow( (1.0+rslpX*rslpX+rslpY*rslpY),0.5); - G4double pxBe=0.0; G4double pyBe=0.0; G4double pzBe=1.0; - if( rsfc !=0.0) { - pzBe= 1.0/rsfc; - pxBe= rslpX/rsfc; - pyBe= rslpY/rsfc; - } - G4ThreeVector cDirection(pxBe,pyBe,pzBe); - direction=cDirection; + G4double rslpX = G4RandGauss::shoot(aslpx, aBeamDiverX); + G4double rslpY = G4RandGauss::shoot(aslpy, aBeamDiverY); + G4double rsfc = pow((1.0 + rslpX * rslpX + rslpY * rslpY), 0.5); + G4double pxBe = 0.0; + G4double pyBe = 0.0; + G4double pzBe = 1.0; + if (rsfc != 0.0) { + pzBe = 1.0 / rsfc; + pxBe = rslpX / rsfc; + pyBe = rslpY / rsfc; + } + G4ThreeVector cDirection(pxBe, pyBe, pzBe); + direction = cDirection; } - particleGun->SetParticleMomentumDirection(direction.unit()); + particleGun->SetParticleMomentumDirection(direction.unit()); - //G4cout<<" Current Beam direction is "<<direction.x() - // <<" "<<direction.y()<<" "<<direction.z()<<G4endl; + // G4cout<<" Current Beam direction is "<<direction.x() + // <<" "<<direction.y()<<" "<<direction.z()<<G4endl; - G4int patypa = rConfig->getRichTbParticleTypeCode(); + G4int patypa = rConfig->getRichTbParticleTypeCode(); - if(patypa == 1 ) { - G4double rand = G4UniformRand(); - G4double phi = 2*M_PI*rand; - G4double sx= cos(phi); - G4double sy =sin(phi); - G4double sz=0.0; - G4ThreeVector polarization(sx,sy,sz); + if (patypa == 1) { + G4double rand = G4UniformRand(); + G4double phi = 2 * M_PI * rand; + G4double sx = cos(phi); + G4double sy = sin(phi); + G4double sz = 0.0; + G4ThreeVector polarization(sx, sy, sz); - particleGun->SetParticlePolarization(polarization); + particleGun->SetParticlePolarization(polarization); } // store the beam direction for writeOut. - aBeamProperty-> setBeamDirection(direction); - - + aBeamProperty->setBeamDirection(direction); } - -