/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Simulation/BOOST/BesSim/BesSim-00-01-24/src/BesEventAction.cc

Go to the documentation of this file.
00001 #include "BesEventAction.hh"
00002 #include "G4Event.hh"
00003 #include "G4TrajectoryContainer.hh"
00004 #include "G4Trajectory.hh"
00005 #include "G4VVisManager.hh"
00006 
00007 #include "G4DigiManager.hh"
00008 #include "BesMdcDigitizer.hh"
00009 #include "BesTofDigitizer.hh"
00010 #include "BesMucDigitizer.hh"
00011 #include "BesEmcDigitizer.hh"
00012 
00013 #include "BesRunAction.hh"
00014 #include "G4RunManager.hh"
00015 #include "BesAsciiIO.hh"
00016 #include "BesMdcHit.hh"
00017 #include "BesRootIO.hh"
00018 #include "BesTDSWriter.hh"
00019 #include "BesTuningIO.hh"
00020 
00021 #include "BesSensitiveManager.hh"
00022 #include "BesTruthTrack.hh"
00023 #include "BesTruthVertex.hh"
00024 #include <fstream>
00025 
00026 #include "GaudiKernel/SvcFactory.h"
00027 #include "GaudiKernel/ISvcLocator.h"
00028 #include "GaudiKernel/SmartDataPtr.h"
00029 #include "GaudiKernel/Bootstrap.h"
00030 
00031 using namespace std;
00032 
00033 #include "ReadBoostRoot.hh"
00034 #include "G4UImanager.hh"
00035 
00036 BesEventAction::BesEventAction(BesRunAction* runAction)
00037         :m_runAction(runAction)
00038 {
00039     ISvcLocator* svcLocator = Gaudi::svcLocator();
00040     IRealizationSvc *tmpReal;
00041     StatusCode sc = svcLocator->service("RealizationSvc",tmpReal);
00042     if (!sc.isSuccess())
00043     {
00044         std::cout << " Could not initialize Realization Service in BesEventAction" << std::endl;
00045     } else {
00046         m_RealizationSvc=dynamic_cast<RealizationSvc*>(tmpReal);
00047     }
00048 
00049     m_DM = G4DigiManager::GetDMpointer();
00050 
00051     if (ReadBoostRoot::GetMdc())
00052     {
00053         BesMdcDigitizer* mdcDM = new BesMdcDigitizer("BesMdcDigitizer");
00054         m_DM->AddNewModule(mdcDM);
00055     }
00056     if (ReadBoostRoot::GetTof())
00057     {
00058         BesTofDigitizer* tofDM = new BesTofDigitizer("BesTofDigitizer");
00059         m_DM->AddNewModule(tofDM);
00060     }
00061     if (ReadBoostRoot::GetEmc())
00062     {
00063         BesEmcDigitizer* emcDM = new BesEmcDigitizer("BesEmcDigitizer");
00064         m_DM->AddNewModule(emcDM);
00065     }
00066     if (ReadBoostRoot::GetMuc())
00067     {
00068         BesMucDigitizer* mucDM = new BesMucDigitizer("BesMucDigitizer");
00069         m_DM->AddNewModule(mucDM);
00070     }
00071 
00072 }
00073 
00074 BesEventAction::~BesEventAction()
00075 {
00076   delete m_DM;
00077 }
00078 
00079 void BesEventAction::BeginOfEventAction(const G4Event* evt)
00080 {
00081 
00082     G4int eventId = evt->GetEventID();
00083     //if (eventId%5000==0)
00084     //    G4cout<<"---> Begin of event: "<<eventId<<G4endl;
00085 
00086     G4UImanager* uiMgr = G4UImanager::GetUIpointer();
00087     //if(eventId == 46 || eventId == 75)
00088     // uiMgr->ApplyCommand("/tracking/verbose 1");
00089     //else
00090     //  uiMgr->ApplyCommand("/tracking/verbose 0");
00091 
00092     //mc truth
00093     if (m_runAction)
00094         if (m_runAction->GetMCTruthFlag()!=0)
00095         {
00096             BesSensitiveManager* sensitiveManager = BesSensitiveManager::GetSensitiveManager();
00097             sensitiveManager->BeginOfTruthEvent(evt);
00098         }
00099 }
00100 
00101 void BesEventAction::EndOfEventAction(const G4Event* evt)
00102 {
00103     if (G4VVisManager::GetConcreteInstance())
00104     {
00105         G4TrajectoryContainer* trajectoryContainer = evt->GetTrajectoryContainer();
00106         G4int n_trajectories = 0;
00107         if (trajectoryContainer) n_trajectories = trajectoryContainer->entries();
00108 
00109         for (G4int i=0; i<n_trajectories; i++)
00110         {
00111             G4Trajectory* trj = (G4Trajectory*)
00112                                 ((*(evt->GetTrajectoryContainer()))[i]);
00113 
00114             trj->DrawTrajectory(50);
00115 
00116         }
00117     }
00118 
00119     //mc truth
00120     BesSensitiveManager* sensitiveManager = BesSensitiveManager::GetSensitiveManager();
00121     if (m_runAction)
00122         if (m_runAction->GetMCTruthFlag()!=0)
00123         {
00124             sensitiveManager->EndOfTruthEvent(evt);
00125         }
00126 
00127     if (ReadBoostRoot::GetHitOut()){
00128         if (m_runAction)
00129         {
00130             //Ascii I/O, output hit collections
00131             BesAsciiIO* asciiIO = m_runAction->GetAsciiIO();
00132             if (asciiIO) {
00133                 if (m_RealizationSvc->UseDBFlag() == true) asciiIO->SaveHitAsciiEvents(m_RealizationSvc->getRunId(), evt);
00134                 else asciiIO->SaveHitAsciiEvents(m_runAction->GetRunId(), evt);
00135             }
00136 
00137             //Root I/O,  output MdcHit collections
00138             BesRootIO* rootIO = m_runAction->GetRootIO();
00139             if (rootIO){
00140                 //emc digitization
00141                 if (ReadBoostRoot::GetEmc()) m_DM->Digitize("BesEmcDigitizer");
00142 
00143                 if (m_RealizationSvc->UseDBFlag() == true) rootIO->SaveHitRootEvent(m_RealizationSvc->getRunId(), evt);
00144                 else rootIO->SaveHitRootEvent(m_runAction->GetRunId(), evt);
00145             }
00146         }
00147     }else{
00148         //Tuning I/O
00149         if (ReadBoostRoot::GetTuning()){
00150             if (m_runAction)
00151             {
00152                 BesTuningIO* tuningIO = m_runAction->GetTuningIO();
00153                 if (tuningIO){
00154                     if (ReadBoostRoot::GetFormatAR())
00155                     {
00156                         tuningIO->GetRootEvent(evt->GetEventID());
00157                     }
00158                     else{
00159                         tuningIO->GetNextEvents();
00160                     }
00161                 }
00162 
00163             }
00164         }
00165         //mdc digitization
00166 
00167         if (ReadBoostRoot::GetMdc())
00168             m_DM->Digitize("BesMdcDigitizer");
00169 
00170         //tof digitization
00171         if (ReadBoostRoot::GetTof())
00172             m_DM->Digitize("BesTofDigitizer");
00173 
00174         //emc digitization
00175         if ((!ReadBoostRoot::GetTuning())&&ReadBoostRoot::GetEmc())
00176             m_DM->Digitize("BesEmcDigitizer");
00177 
00178         //muc digitization
00179         if (ReadBoostRoot::GetMuc())
00180             m_DM->Digitize("BesMucDigitizer");
00181 
00182 
00183         if (m_runAction)
00184         {
00185         //Ascii I/O, output digi collections
00186             BesAsciiIO* asciiIO = m_runAction->GetAsciiIO();
00187             if (asciiIO)
00188             {
00189                 if (m_RealizationSvc->UseDBFlag() == true) asciiIO->SaveAsciiEvents(m_RealizationSvc->getRunId(), evt);
00190                 else asciiIO->SaveAsciiEvents(m_runAction->GetRunId(), evt);
00191             }
00192               
00193         // Root I/O,output digi collections
00194             BesTDSWriter* tdsWriter =  m_runAction->GetTDSWriter();
00195             if (tdsWriter)
00196             {
00197                 if (m_RealizationSvc->UseDBFlag() == true) tdsWriter->SaveAll(evt, m_RealizationSvc->getRunId() );
00198                 else tdsWriter->SaveAll(evt, m_runAction->GetRunId() );
00199             }
00200         }
00201     }
00202 
00203     sensitiveManager->ClearEvent();
00204     //HepRandom::saveEngineStatus("EndSimCurrEvt.rndm");
00205 }
00206 
00207 
00208 
00209 
00210 
00211 
00212 
00213 
00214 
00215 
00216 
00217 
00218 

Generated on Tue Nov 29 23:14:23 2016 for BOSS_7.0.2 by  doxygen 1.4.7