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

Go to the documentation of this file.
00001 #include "RootEventData/TMcHitTof.h"
00002 #include "RootEventData/TMcHitEvent.h"
00003 #include "RootEventData/TMcDigiEmc.h"
00004 #include "BesMdcHit.hh"
00005 #include "BesTofHit.hh"
00006 #include "BesEmcDigi.hh"
00007 #include "BesEventAction.hh"
00008 #include "G4RunManager.hh"
00009 #include "BesTruthTrack.hh"
00010 #include "BesTruthVertex.hh"
00011 #include "BesSensitiveManager.hh"
00012 #include "G4HCofThisEvent.hh"
00013 #include "G4SDManager.hh"
00014 #include "G4PrimaryVertex.hh"
00015 #include "G4PrimaryParticle.hh"
00016 
00017 #include "TFile.h"
00018 #include "TTree.h"
00019 #include "BesRootIO.hh"
00020 
00021 #include "G4ThreeVector.hh"
00022 
00023 #include "AsciiDmp/AsciiData.hh"
00024 #include "G4DigiManager.hh"
00025 #include <iostream>
00026 //#include <vector>
00027 using namespace std;
00028 //using std::vector;
00029 
00030 #include "GaudiKernel/IDataProviderSvc.h"
00031 #include "GaudiKernel/ISvcLocator.h"
00032 #include "GaudiKernel/Bootstrap.h"
00033 #include "GaudiKernel/RegistryEntry.h"
00034 #include "GaudiKernel/MsgStream.h"
00035 #include "GaudiKernel/SmartDataPtr.h"
00036 
00037 #include "G4Svc/IG4Svc.h"
00038 #include "G4Svc/G4Svc.h"   
00039 
00040 BesRootIO::BesRootIO(
00041     G4int mdcTruFlag,G4int mdcDigiFlag,
00042     G4int tofTruFlag, G4int tofDigiFlag,
00043     G4int emcTruFlag, G4int emcDigiFlag,
00044     G4int mucTruFlag, G4int mucDigiFlag,G4String name)
00045         :m_mdcTruFlag(mdcTruFlag),m_mdcDigiFlag(mdcDigiFlag),
00046         m_tofTruFlag(tofTruFlag),m_tofDigiFlag(tofDigiFlag),
00047         m_emcTruFlag(emcTruFlag),m_emcDigiFlag(emcDigiFlag),
00048         m_mucTruFlag(mucTruFlag),m_mucDigiFlag(mucDigiFlag),m_rootFile(name)
00049 {
00050     m_DigiMan = G4DigiManager::GetDMpointer();
00051 
00052     f = new TFile(m_rootFile,"RECREATE");
00053     //create a MdcHit TTree
00054     m_TMcHitEvent = new TMcHitEvent();
00055     HitTree = new TTree("HitTree","staff data from HitCollection");
00056 
00057     HitTree->Branch("TMcHitEvent", "TMcHitEvent", &m_TMcHitEvent, 32000, 99);
00058 }
00059 
00060 BesRootIO::~BesRootIO()
00061 {
00062     f->Write();
00063 }
00064 
00065 void BesRootIO::SaveHitRootEvent(G4int runId, const G4Event* evt)
00066 {
00067     //std::cout << "Save Hit Root Event" << std::endl;
00068     if (m_mdcDigiFlag)
00069     {
00070         SaveMdcHitRoot();
00071     }
00072     if (m_tofDigiFlag)
00073     {
00074         SaveTofHitRoot();
00075     }
00076     if (m_emcDigiFlag){
00077         SaveEmcDigiRootEvent();
00078     }
00079 
00080     HitTree->Fill();
00081     
00082     m_TMcHitEvent->Clear();
00083 }
00084 
00085 void BesRootIO::SaveEmcDigiRootEvent(){
00086   //std::cout << "SaveEmcDigiRootEvent" << std::endl;
00087   G4int emcDigiCollID = -1;
00088   emcDigiCollID = m_DigiMan->GetDigiCollectionID("BesEmcDigitsCollection");
00089   if(emcDigiCollID>=0)
00090   {
00091     BesEmcDigitsCollection* emcDC = (BesEmcDigitsCollection*)m_DigiMan->GetDigiCollection(emcDigiCollID);
00092     G4int nHits = emcDC->entries();
00093     //std::cout << "nHits: " << nHits << std::endl;
00094 
00095     if(nHits>0){
00096       BesEmcDigi* emcDigi;
00097       for (int i = 0; i < nHits; i++) {
00098         emcDigi=(*emcDC)[i];
00099         TMcDigiEmc* tEmcDigi = new TMcDigiEmc();
00100 
00101         tEmcDigi->SetPartId(emcDigi->GetPartId());    
00102         tEmcDigi->SetThetaNb(emcDigi->GetThetaNb());
00103         tEmcDigi->SetPhiNb(emcDigi->GetPhiNb());   
00104         tEmcDigi->SetEnergy(emcDigi->GetEnergy());
00105         tEmcDigi->SetTime(emcDigi->GetTime());
00106         tEmcDigi->SetTrackIndex(emcDigi->GetTrackIndex());
00107         //emcDigi->Print();
00108         //std::cout << "SetEnergy" <<  emcDigi->GetEnergy() << std::endl;
00109 
00110         m_TMcHitEvent->addMcDigiEmc(tEmcDigi);
00111        //std::cout << "addMcDigiEmc" << std::endl;
00112       }
00113     }
00114   }
00115 }
00116 
00117 void BesRootIO::SaveMdcHitRoot()
00118 {   
00119   //std::cout << "SaveMdcHitRoot" << std::endl;
00120     G4int THCID = -1;
00121     THCID = m_DigiMan->GetHitsCollectionID("BesMdcHitsCollection");
00122     if (THCID>=0)
00123     {
00124         BesMdcHitsCollection* mdcDC = (BesMdcHitsCollection*) (m_DigiMan->GetHitsCollection(THCID));
00125         G4int nHits = mdcDC->entries();
00126         //std::cout << "nHits: " << nHits << std::endl;
00127         if (nHits>0)
00128         {
00129             BesMdcHit* mdcHit;
00130             for (int i=0;i<nHits;i++)
00131             {
00132                 mdcHit=(*mdcDC)[i];
00133                 TMcHitMdc* tMdcHit = new TMcHitMdc();
00134                 tMdcHit->SetTrackID(mdcHit->GetTrackID());       
00135                 tMdcHit->SetLayerNo(mdcHit->GetLayerNo()); 
00136                 tMdcHit->SetCellNo(mdcHit->GetCellNo());
00137                 tMdcHit->SetEdep(mdcHit->GetEdep()); 
00138                 tMdcHit->SetDriftD(mdcHit->GetDriftD());
00139                 tMdcHit->SetDriftT(mdcHit->GetDriftT());
00140                 tMdcHit->SetGlobalT(mdcHit->GetGlobalT());
00141                 tMdcHit->SetTheta(mdcHit->GetTheta());
00142                 tMdcHit->SetEnterAngle(mdcHit->GetEnterAngle());
00143                 tMdcHit->SetPosFlag(mdcHit->GetPosFlag());
00144 
00145                 G4ThreeVector gTemp = mdcHit->GetPos();
00146                 TVector3 tTemp = TVector3(gTemp.x(), gTemp.y(), gTemp.z());
00147                 tMdcHit->SetPos(tTemp);
00148 
00149                 //mdcHit->Print();
00150                 m_TMcHitEvent->addMcHitMdc(tMdcHit);
00151             }
00152         }
00153     }
00154 
00155 
00156 }
00157 
00158 void BesRootIO::SaveTofHitRoot()
00159 {
00160    //retrieve G4Svc
00161     ISvcLocator* svcLocator = Gaudi::svcLocator();
00162     IG4Svc* tmpSvc;
00163     StatusCode sc = svcLocator->service("G4Svc", tmpSvc);
00164     G4Svc*  m_G4Svc = dynamic_cast<G4Svc *>(tmpSvc);
00165     double m_beamTime = m_G4Svc->GetBeamTime() * ns;
00166     m_TMcHitEvent->setBeamTime(m_beamTime);
00167     //std::cout << "beamtime: " << m_beamTime << std::endl;
00168 
00169     G4int THCID = -1;
00170     THCID = m_DigiMan->GetHitsCollectionID("BesTofHitsCollection");
00171     if (THCID>=0)
00172     {
00173         BesTofHitsCollection* tofDC = (BesTofHitsCollection*) (m_DigiMan->GetHitsCollection(THCID));
00174         G4int nHits = tofDC->entries();
00175         //std::cout << "nHits: " << nHits << std::endl;
00176         if (nHits>0)
00177         {
00178             BesTofHit* tofHit;
00179             for (int i=0;i<nHits;i++)
00180             {
00181                 tofHit=(*tofDC)[i];
00182                 TMcHitTof* tTofHit = new TMcHitTof();
00183                 tTofHit->SetTrackIndex(tofHit->GetTrackIndex());
00184                 tTofHit->SetG4Index(tofHit->GetG4Index());
00185                 tTofHit->SetPartId(tofHit->GetPartId());
00186                 tTofHit->SetScinNb(tofHit->GetScinNb());
00187                 tTofHit->SetEdep(tofHit->GetEdep());
00188                 tTofHit->SetStepL(tofHit->GetStepL());
00189                 tTofHit->SetTrackL(tofHit->GetTrackL());
00190                 tTofHit->SetTime(tofHit->GetTime());
00191                 tTofHit->SetDeltaT(tofHit->GetDeltaT());
00192                 tTofHit->SetCharge(tofHit->GetCharge());
00193 
00194                 G4ThreeVector gTemp = tofHit->GetPos();
00195                 TVector3 tTemp(gTemp.x(), gTemp.y(), gTemp.z());
00196                 tTofHit->SetPos(tTemp);
00197 
00198                 gTemp = tofHit->GetPDirection();
00199                 tTemp = TVector3(gTemp.x(), gTemp.y(), gTemp.z());
00200                 tTofHit->SetPDirection(tTemp);
00201 
00202                 gTemp = tofHit->GetMomentum();
00203                 tTemp = TVector3(gTemp.x(), gTemp.y(), gTemp.z());
00204                 tTofHit->SetMomentum(tTemp);
00205 
00206                 //tofHit->Print();
00207                 m_TMcHitEvent->addMcHitTof(tTofHit);
00208             }
00209         }
00210     }
00211 
00212 }

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