Message: Re: Unit Problems Not Logged In (login)
 Next-in-Thread Next-in-Thread
 Next-in-Forum Next-in-Forum

None Re: Unit Problems 

Forum: Hits, Digitization and Pileup
Re: Question Unit Problems (Ibrahim)
Date: 04 Feb, 2010
From: Marc Verderi <Marc Verderi>

Hello Ibrahim,

In Geant4, if you want some quantities to be displayed using always the 
same units, just do, for example if you want to write energies in MeV:

G4cout << "E deposition : " << Edep / MeV << " MeV " << G4endl;

Units are as you may expect eV, keV, MeV, GeV, cm, km, etc... please see 
the guide for "Application Developer", section "3.3 System of units".

G4BestUnit is to help the reading of quantities than span from small to 
large values (eg nanometers to kilometers) in order to avoid having to 
figure out how much are things like 1.372e-11 km,  4.57e8 eV etc...

Cheers,
Marc


Ibrahim a écrit :
> *** Discussion title: Hits, Digitization and Pileup
>
> Hi,
>
> I am silmulating the response of my detector. I got the energy
> deposition in the detector versus x, y and z. But the unities of this x,
> y, z and dEp are given automatically( x, y and z are given in cm
> mm,..and dEp is given in eV and keV ..). I want to get position (x,y,z)
> in cm and dEp in keV. I think I have to introduce some modification on
> the following lines. Does anybody konow how can I do it. I tried but I
> did get the desired units.
>
> void ExN02SteppingVerbose::StepInfo()
> {
>   CopyState();
>
>   G4int prec = G4cout.precision(3);
>
>   if( verboseLevel >= 1 ){
>     if( verboseLevel >= 4 ) VerboseTrack();
>     if( verboseLevel >= 3 ){
>       G4cout << G4endl;    
>       G4cout << std::setw( 5) << "#Step#"     << " "
>              << std::setw( 6) << "X"          << "    "
>              << std::setw( 6) << "Y"          << "    "  
>              << std::setw( 6) << "Z"          << "    "
>              << std::setw( 9) << "KineE"      << " "
>              << std::setw( 9) << "dEStep"     << " "  
>              << std::setw(10) << "StepLeng"     
>              << std::setw(10) << "TrakLeng" 
>              << std::setw(10) << "Volume"    << "  "
>              << std::setw(10) << "Process"   << G4endl;           
>     }
>
>     G4cout << std::setw(5) << fTrack->GetCurrentStepNumber() << " "
>         << std::setw(6) << G4BestUnit(fTrack->GetPosition().x(),"Length")
>         << std::setw(6) << G4BestUnit(fTrack->GetPosition().y(),"Length")
>         << std::setw(6) << G4BestUnit(fTrack->GetPosition().z(),"Length")
>         << std::setw(6) << G4BestUnit(fTrack->GetKineticEnergy(),"Energy")
>         << std::setw(6) << G4BestUnit(fStep->GetTotalEnergyDeposit(),"Energy")
>         << std::setw(6) << G4BestUnit(fStep->GetStepLength(),"Length")
>         << std::setw(6) << G4BestUnit(fTrack->GetTrackLength(),"Length")
>         << "  ";
>
>     // if( fStepStatus != fWorldBoundary){ 
>     if( fTrack->GetNextVolume() != 0 ) { 
>       G4cout << std::setw(10) << fTrack->GetVolume()->GetName();
>     } else {
>       G4cout << std::setw(10) << "OutOfWorld";
>     }
>
>     if(fStep->GetPostStepPoint()->GetProcessDefinedStep() != NULL){
>       G4cout << "  " 
>         << std::setw(10) << fStep->GetPostStepPoint()->GetProcessDefinedStep()
>                                         ->GetProcessName();
>     } else {
>       G4cout << "   UserLimit";
>     }
>
>     G4cout << G4endl;
>
>     if( verboseLevel == 2 ){
>       G4int tN2ndariesTot = fN2ndariesAtRestDoIt +
>                             fN2ndariesAlongStepDoIt +
>                             fN2ndariesPostStepDoIt;
>       if(tN2ndariesTot>0){
>         G4cout << "    :----- List of 2ndaries - "
>                << "#SpawnInStep=" << std::setw(3) << tN2ndariesTot 
>                << "(Rest="  << std::setw(2) << fN2ndariesAtRestDoIt
>                << ",Along=" << std::setw(2) << fN2ndariesAlongStepDoIt
>                << ",Post="  << std::setw(2) << fN2ndariesPostStepDoIt
>                << "), "
>                << "#SpawnTotal=" << std::setw(3) << (*fSecondary).size()
>                << " ---------------"
>                << G4endl;
>
>         for(size_t lp1=(*fSecondary).size()-tN2ndariesTot; 
>                         lp1<(*fSecondary).size(); lp1++){
>           G4cout << "    : "
>                  << std::setw(6)
>                  << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(),"Length")
>                  << std::setw(6)
>                  << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(),"Length")
>                  << std::setw(6)
>                  << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(),"Length")
>                  << std::setw(6)
>                  << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(),"Energy")
>                  << std::setw(10)
>                  << (*fSecondary)[lp1]->GetDefinition()->GetParticleName();
>           G4cout << G4endl;
>         }
>
>         G4cout << "    :-----------------------------"
>                << "----------------------------------"
>                << "-- EndOf2ndaries Info ---------------"
>                << G4endl;
>       }
>     }
>
>   }
>   G4cout.precision(prec);
> }
>
> //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
>
> void ExN02SteppingVerbose::TrackingStarted() {
>
>   CopyState();
> G4int prec = G4cout.precision(3);
>   if( verboseLevel > 0 ){
>
>     G4cout << std::setw( 5) << "Step#"      << " "
>            << std::setw( 6) << "X"          << "    "
>            << std::setw( 6) << "Y"          << "    "  
>            << std::setw( 6) << "Z"          << "    "
>            << std::setw( 9) << "KineE"      << " "
>            << std::setw( 9) << "dEStep"     << " "  
>            << std::setw(10) << "StepLeng"  
>            << std::setw(10) << "TrakLeng"
>            << std::setw(10) << "Volume"     << "  "
>            << std::setw(10) << "Process"    << G4endl;       
>
>     G4cout << std::setw(5) << fTrack->GetCurrentStepNumber() << " "
>         << std::setw(6) << G4BestUnit(fTrack->GetPosition().x(),"Length")
>         << std::setw(6) << G4BestUnit(fTrack->GetPosition().y(),"Length")
>         << std::setw(6) << G4BestUnit(fTrack->GetPosition().z(),"Length")
>         << std::setw(6) << G4BestUnit(fTrack->GetKineticEnergy(),"Energy")
>         << std::setw(6) << G4BestUnit(fStep->GetTotalEnergyDeposit(),"Energy")
>         << std::setw(6) << G4BestUnit(fStep->GetStepLength(),"Length")
>         << std::setw(6) << G4BestUnit(fTrack->GetTrackLength(),"Length")
>         << "  ";
>
>     if(fTrack->GetNextVolume()){
>       G4cout << std::setw(10) << fTrack->GetVolume()->GetName();
>     } else {
>       G4cout << std::setw(10) << "OutOfWorld";
>     }
>     G4cout  << "    initStep" << G4endl;
>   }
>   G4cout.precision(prec);
> }
>
> Many thanks for any help !
>
> ball the best
>
> -------------------------------------------------------------
> Visit this GEANT4 at hypernews.slac.stanford.edu message (to reply or unsubscribe) at: 
> http://hypernews.slac.stanford.edu/HyperNews/geant4/get/hitsdigits/236.html 
>   

 Add Message Add Message
to: "Re: Unit Problems"

 Subscribe Subscribe

This site runs SLAC HyperNews version 1.11-slac-98, derived from the original HyperNews


[ Geant 4 Home | Geant 4 HyperNews | Search | Request New Forum | Feedback ]