/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Simulation/BOOST/MucSim/MucSim-00-01-03/src/BesMucDigitizer.cc

Go to the documentation of this file.
00001 //---------------------------------------------------------------------------//
00002 //      BOOST --- BESIII Object_Oriented Simulation Tool                     //
00003 //---------------------------------------------------------------------------//
00004 //Description:
00005 //Author: Youzy
00006 //Created: Mar, 2004
00007 //Modified:
00008 //Comment:
00009 //---------------------------------------------------------------------------//
00010 //$Id: BesMucDigitizer.cc
00011 
00012 #include "BesMucDigitizer.hh"
00013 #include "BesMucDigit.hh"
00014 #include "BesMucDigi.hh"
00015 #include "BesMucHit.hh"
00016 #include "G4DigiManager.hh"
00017 #include "Randomize.hh"
00018 
00019 #include "GaudiKernel/ISvcLocator.h"
00020 #include "GaudiKernel/Bootstrap.h"
00021 #include "GaudiKernel/IDataProviderSvc.h"
00022 #include "G4Svc/IG4Svc.h"
00023 #include "G4Svc/G4Svc.h"
00024 
00025 
00026 const G4int BesMucDigitizer::m_nPartMax;
00027 const G4int BesMucDigitizer::m_nSegMax;
00028 const G4int BesMucDigitizer::m_nGapMax;
00029 const G4int BesMucDigitizer::m_nStripMax;
00030 
00031 BesMucDigitizer::BesMucDigitizer(G4String modName)
00032 :G4VDigitizerModule(modName)
00033 {
00034   collectionName.push_back("BesMucDigisCollection");
00035   m_besMucDigisCollection=0;
00036 
00037   //Standard unit: length in mm; time in ns; energy in MeV; att in mm;
00038   //Here: att in mm; vel in m/s; threshold in MeV; mucRes in ps; 
00039   
00040 
00041   //retrieve G4Svc
00042   ISvcLocator* svcLocator = Gaudi::svcLocator();
00043   IG4Svc* tmpSvc;
00044   StatusCode sc=svcLocator->service("G4Svc", tmpSvc);
00045   m_G4Svc=dynamic_cast<G4Svc *>(tmpSvc);
00046 
00047   //get Muc Ntuple from G4Svc
00048   if(m_G4Svc->MucRootFlag())
00049   {
00050     m_tupleMuc = m_G4Svc->GetTupleMuc();
00051     sc = m_tupleMuc->addItem("part",m_part);
00052     sc = m_tupleMuc->addItem("seg",m_seg);
00053     sc = m_tupleMuc->addItem("gap",m_gap);
00054     sc = m_tupleMuc->addItem("strip",m_strip);
00055 
00056   }
00057 
00058 
00059 
00060 
00061   Initialize();  
00062 }
00063 
00064 BesMucDigitizer::~BesMucDigitizer()
00065 {
00066 }
00067 
00068 void BesMucDigitizer::Initialize()
00069 {
00070   for(G4int i = 0; i < m_nPartMax; i++) {
00071     for(G4int j = 0; j < m_nSegMax; j++) {
00072       for(G4int k = 0; k < m_nGapMax; k++) {
00073         for(G4int l = 0; l < m_nStripMax; l++) {
00074           m_stripID[i][j][k][l] = 0;
00075         }
00076       }
00077     }
00078   }
00079 }
00080 
00081 
00082 void BesMucDigitizer::Digitize()
00083 {
00084   Initialize();
00085   
00086   m_besMucDigisCollection = new BesMucDigisCollection(moduleName, collectionName[0]);
00087   G4DigiManager* DigiMan = G4DigiManager::GetDMpointer();
00088   
00089   //hits collection ID
00090   G4int THCID;
00091   THCID = DigiMan->GetHitsCollectionID("BesMucHitsCollection");
00092   
00093   //hits collection
00094   BesMucHitsCollection* THC = 0;
00095   THC = (BesMucHitsCollection*) (DigiMan->GetHitsCollection(THCID));
00096 
00097   if(THC) {
00098     G4int trackIndex, part, seg, gap, strip;
00099     BesMucDigit *aDigit = new BesMucDigit();
00100 
00101     G4int n_hit = THC->entries();
00102     for(G4int i = 0; i < n_hit; i++) {
00103       aDigit->SetHit((*THC)[i]);
00104       trackIndex = aDigit->GetTrackIndex();
00105       part  = aDigit->GetPart();
00106       seg   = aDigit->GetSeg();
00107       gap   = aDigit->GetGap();
00108       strip = aDigit->GetNearestStripNo();
00109      
00110       //fill muc Ntuple
00111       if(m_G4Svc->MucRootFlag())
00112         {
00113           m_part = part;
00114           m_seg = seg;
00115           m_gap = gap;
00116           m_strip = strip;
00117           
00118           m_tupleMuc->write();
00119         }
00120 
00121       (*THC)[i]->SetPart(part);
00122       (*THC)[i]->SetSeg(seg);
00123       (*THC)[i]->SetGap(gap);
00124       (*THC)[i]->SetStrip(strip);
00125       if(m_stripID[part][seg][gap][strip] == 0) {
00126         NewDigi(trackIndex, part, seg, gap, strip);
00127       }
00128       else { 
00129         OldDigi();
00130       }
00131     } 
00132     //Smear();  
00133     StoreDigiCollection(m_besMucDigisCollection);       
00134     delete aDigit;
00135   }
00136 }
00137 
00138 void BesMucDigitizer::NewDigi(G4int trackIndex, G4int part, G4int seg, G4int gap, G4int strip)
00139 {
00140   BesMucDigi *digi = new BesMucDigi();
00141   digi->SetTrackIndex(trackIndex);
00142   digi->SetPartId(part);
00143   digi->SetSegId(seg);
00144   digi->SetGapId(gap);
00145   digi->SetStripId(strip);
00146   m_besMucDigisCollection->insert(digi);        
00147 
00148   m_stripID[part][seg][gap][strip] = 1;
00149 }
00150 
00151 void BesMucDigitizer::OldDigi()
00152 { }
00153 
00154 void BesMucDigitizer::Smear()
00155 { }

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