#include <BesMcTruthWriter.hh>
Public Member Functions | |
BesMcTruthWriter () | |
~BesMcTruthWriter () | |
void | SaveMcTruth () |
void | SaveMcParticle () |
void | AddMother (Event::McParticle *, Event::McParticleCol *) |
void | SaveDecayMode () |
void | SaveMdcTruth () |
void | SaveTofTruth () |
void | SaveEmcTruth () |
void | SaveMucTruth () |
Private Attributes | |
G4DigiManager * | m_DigiMan |
BesMdcGeoParameter * | mdcGeoPointer |
IDataProviderSvc * | m_evtSvc |
Definition at line 23 of file BesMcTruthWriter.hh.
BesMcTruthWriter::BesMcTruthWriter | ( | ) |
Definition at line 49 of file BesMcTruthWriter.cc.
References m_DigiMan.
00050 { 00051 m_DigiMan = G4DigiManager::GetDMpointer(); 00052 //mdcGeoPointer=BesMdcGeoParameter::GetGeo(); 00053 }
BesMcTruthWriter::~BesMcTruthWriter | ( | ) |
void BesMcTruthWriter::AddMother | ( | Event::McParticle * | , | |
Event::McParticleCol * | ||||
) |
Definition at line 288 of file BesMcTruthWriter.cc.
References iter(), Event::McParticle::leafParticle(), and Event::McParticle::vertexIndex1().
Referenced by SaveMcParticle().
00289 { 00290 if (currentParticle->leafParticle()) { 00291 return; 00292 } 00293 Event::McParticleCol::iterator iter; 00294 bool found = false; 00295 for ( iter = particleCol->begin(); iter != particleCol->end(); iter++) { 00296 if (currentParticle->vertexIndex1() == (*iter)->vertexIndex0()) { 00297 found = true; 00298 (*iter)->setMother(currentParticle); 00299 currentParticle->addDaughter(*iter); 00300 AddMother((*iter), particleCol); 00301 } 00302 } 00303 if (!found) std::cout << "AddMother: inconsistency was found!" << std::endl; 00304 00305 }
void BesMcTruthWriter::SaveDecayMode | ( | ) |
Definition at line 307 of file BesMcTruthWriter.cc.
References m_evtSvc, and DecayMode::putData().
Referenced by SaveMcTruth().
00308 { 00309 SmartDataPtr<DecayMode> decayMode(m_evtSvc,"/Event/MC/DecayMode"); 00310 if(!decayMode) 00311 { 00312 //G4cout<<"Could not retrieve DecayMode"<<G4endl; 00313 DecayMode* aDecayMode = new DecayMode; 00314 //register Decay Mode to TDS 00315 int dm[10]={0,0,0,0,0,0,0,0,0,0}; 00316 aDecayMode->putData(dm,10); 00317 StatusCode scDM = m_evtSvc->registerObject("/Event/MC/DecayMode", aDecayMode); 00318 if(scDM!=StatusCode::SUCCESS) 00319 G4cout<< "Could not register DecayMode" <<G4endl; 00320 } 00321 }
void BesMcTruthWriter::SaveEmcTruth | ( | ) |
Definition at line 487 of file BesMcTruthWriter.cc.
References BesEmcTruthHit::Begin(), EmcID::crystal_id(), BesEmcTruthHit::End(), BesEmcTruthHit::GetEDep(), BesEmcHit::GetEdepCrystal(), BesEmcTruthHit::GetHitEmc(), BesEmcTruthHit::GetIdentify(), BesEmcHit::GetMomentum(), BesEmcTruthHit::GetMomentum(), BesEmcHit::GetNumPhiCrystal(), BesEmcHit::GetNumThetaCrystal(), BesEmcHit::GetPartId(), BesEmcTruthHit::GetPDGCharge(), BesEmcTruthHit::GetPDGCode(), BesEmcHit::GetPosCrystal(), BesEmcTruthHit::GetPosition(), BesEmcTruthHit::GetTime(), BesEmcHit::GetTrackIndex(), BesEmcTruthHit::GetTrackIndex(), genRecEmupikp::i, ganga-rec::j, m_DigiMan, m_evtSvc, Event::EmcMcHit::setHitEmc(), Event::EmcMcHit::setHitMap(), Event::EmcMcHit::setPDGCharge(), Event::EmcMcHit::setPDGCode(), and Event::EmcMcHit::setTime().
Referenced by SaveMcTruth().
00488 { 00489 //Emc McHit collection defined in BOSS 00490 Event::EmcMcHitCol* aEmcMcHitCol = new Event::EmcMcHitCol; 00491 00492 G4int fullMc = 1; 00493 if(fullMc==1) { //full Mc Truth 00494 G4int HCID = -1; 00495 HCID = m_DigiMan->GetHitsCollectionID("BesEmcTruthHitsList"); 00496 if(HCID>0) 00497 { 00498 BesEmcTruthHitsCollection* HC = 0; 00499 HC = (BesEmcTruthHitsCollection*) (m_DigiMan->GetHitsCollection(HCID)); 00500 G4int n_hit = HC->entries(); 00501 if(n_hit>0) 00502 { 00503 //arrange hits in hits collection in order of trackIndex 00504 BesEmcTruthHit* hit; 00505 vector<BesEmcTruthHit*>* vecHC = HC->GetVector(); 00506 for(int i=0;i<n_hit-1;i++) { 00507 for(int j=i+1;j<n_hit;j++) { 00508 if((*vecHC)[i]->GetTrackIndex()>(*vecHC)[j]->GetTrackIndex()) { 00509 hit = (*vecHC)[i]; 00510 (*vecHC)[i] = (*vecHC)[j]; 00511 (*vecHC)[j] = hit; 00512 } 00513 } 00514 } 00515 00516 for(G4int i=0;i<n_hit;i++) 00517 { 00518 BesEmcTruthHit* hit; 00519 hit = (*HC)[i]; 00520 00521 std::map<Identifier,double> hitMap; 00522 std::map<Identifier,double>::const_iterator iHitMap; 00523 hitMap.clear(); 00524 for(iHitMap=hit->Begin();iHitMap!=hit->End();iHitMap++) { 00525 hitMap[iHitMap->first]=iHitMap->second; 00526 } 00527 00528 Event::EmcMcHit* emcMcHit = new Event::EmcMcHit(hit->GetIdentify(), hit->GetTrackIndex(), 00529 hit->GetPosition().x(), hit->GetPosition().y(), hit->GetPosition().z(), 00530 hit->GetMomentum().x(), hit->GetMomentum().y(), hit->GetMomentum().z(), 00531 hit->GetEDep() ); 00532 00533 emcMcHit->setHitEmc(hit->GetHitEmc()); 00534 emcMcHit->setPDGCode(hit->GetPDGCode()); 00535 emcMcHit->setPDGCharge(hit->GetPDGCharge()); 00536 emcMcHit->setTime(hit->GetTime()); 00537 emcMcHit->setHitMap(hitMap); 00538 00539 aEmcMcHitCol->push_back(emcMcHit); 00540 } 00541 } 00542 } 00543 } else { //simple Mc Truth 00544 G4int HCID = -1; 00545 HCID = m_DigiMan->GetHitsCollectionID("BesEmcHitsList"); 00546 if(HCID>0) 00547 { 00548 BesEmcHitsCollection* HC = 0; 00549 HC = (BesEmcHitsCollection*) (m_DigiMan->GetHitsCollection(HCID)); 00550 G4int n_hit = HC->entries(); 00551 if(n_hit>0) 00552 { 00553 //arrange hits in hits collection in order of trackIndex 00554 BesEmcHit* hit; 00555 vector<BesEmcHit*>* vecHC = HC->GetVector(); 00556 for(int i=0;i<n_hit-1;i++) 00557 for(int j=i+1;j<n_hit;j++) 00558 if((*vecHC)[i]->GetTrackIndex()>(*vecHC)[j]->GetTrackIndex()) 00559 { 00560 hit = (*vecHC)[i]; 00561 (*vecHC)[i] = (*vecHC)[j]; 00562 (*vecHC)[j] = hit; 00563 } 00564 00565 //Emc McHit collection defined in BOSS 00566 Event::EmcMcHitCol* aEmcMcHitCol = new Event::EmcMcHitCol; 00567 00568 for(G4int i=0;i<n_hit;i++) 00569 { 00570 hit = (*HC)[i]; 00571 Identifier ident = EmcID::crystal_id ( hit->GetPartId(), hit->GetNumThetaCrystal(), hit->GetNumPhiCrystal() ); 00572 00573 std::map<Identifier,double> hitMap; 00574 Event::EmcMcHit* emcMcHit = new Event::EmcMcHit(ident, hit->GetTrackIndex(), 00575 hit->GetPosCrystal().x(), hit->GetPosCrystal().y(), hit->GetPosCrystal().z(), 00576 hit->GetMomentum().x(), hit->GetMomentum().y(), hit->GetMomentum().z(), 00577 hit->GetEdepCrystal() ); 00578 00579 aEmcMcHitCol->push_back(emcMcHit); 00580 } 00581 } 00582 } 00583 } 00584 00585 //register EMC McTruth collection to TDS 00586 StatusCode scEmc = m_evtSvc->registerObject("/Event/MC/EmcMcHitCol", aEmcMcHitCol); 00587 if(scEmc!=StatusCode::SUCCESS) 00588 G4cout<< "Could not register EMC McTruth collection" <<G4endl; 00589 00590 //retrieve EMC McTruth from TDS 00591 /*SmartDataPtr<Event::EmcMcHitCol> aMcHitCol(m_evtSvc,"/Event/MC/EmcMcHitCol"); 00592 if(!aMcHitCol) 00593 G4cout<<"Could not retrieve EMC McTruth collection"<<G4endl; 00594 00595 Event::EmcMcHitCol::iterator iMcHitCol; 00596 for(iMcHitCol=aMcHitCol->begin(); iMcHitCol!=aMcHitCol->end(); iMcHitCol++) 00597 { 00598 const Identifier ident = (*iMcHitCol)->identify(); 00599 G4cout<<(*iMcHitCol)->getTrackIndex(); 00600 G4cout<<" "<<EmcID::barrel_ec(ident); 00601 G4cout<<" "<<EmcID::theta_module(ident); 00602 G4cout<<" "<<EmcID::phi_module(ident); 00603 G4cout<<" "<<(*iMcHitCol)->getPositionX(); 00604 G4cout<<" "<<(*iMcHitCol)->getPositionY(); 00605 G4cout<<" "<<(*iMcHitCol)->getPositionZ(); 00606 G4cout<<" "<<(*iMcHitCol)->getPx(); 00607 G4cout<<" "<<(*iMcHitCol)->getPy(); 00608 G4cout<<" "<<(*iMcHitCol)->getPz(); 00609 G4cout<<" "<<(*iMcHitCol)->getDepositEnergy(); 00610 G4cout<<G4endl; 00611 } 00612 G4cout<<"end of retrieve EMC McTruth"<<G4endl; 00613 */ 00614 }
void BesMcTruthWriter::SaveMcParticle | ( | ) |
Definition at line 84 of file BesMcTruthWriter.cc.
References AddMother(), Event::McParticle::DECAYED, Event::McParticle::DECAYFLT, Event::McParticle::ERROR, BesTruthTrack::GetDaughterIndexes(), BesTruthTrack::GetIndex(), BesTruthVertex::GetIndex(), BesTruthTrack::GetP4(), BesTruthVertex::GetParentTrack(), BesTruthTrack::GetPDGCode(), BesTruthVertex::GetPosition(), BesSensitiveManager::GetSensitiveManager(), BesTruthTrack::GetSource(), BesTruthTrack::GetTerminalVertex(), BesTruthVertex::GetTime(), BesSensitiveManager::GetTrackList(), BesTruthTrack::GetVertex(), BesSensitiveManager::GetVertexList(), genRecEmupikp::i, ganga-rec::j, Event::McParticle::LEAF, m_evtSvc, and Event::McParticle::PRIMARY.
Referenced by SaveMcTruth().
00085 { 00086 BesSensitiveManager* sensitiveManager = BesSensitiveManager::GetSensitiveManager(); 00087 vector<BesTruthTrack*>* trackList = sensitiveManager->GetTrackList(); 00088 G4int nTrack = trackList->size(); 00089 BesTruthTrack* track; 00090 00091 vector<BesTruthVertex*>* vertexList = sensitiveManager->GetVertexList(); 00092 G4int nVertex = vertexList->size(); 00093 BesTruthVertex* vertex; 00094 00095 //arrange TruthTrack in trackList in order of trackIndex 00096 for(int i=0;i<nTrack-1;i++) 00097 for(int j=i+1;j<nTrack;j++) 00098 if((*trackList)[i]->GetIndex()>(*trackList)[j]->GetIndex()) 00099 { 00100 track=(*trackList)[i]; 00101 (*trackList)[i]=(*trackList)[j]; 00102 (*trackList)[j]=track; 00103 } 00104 00105 Event::McParticleCol *particleCol = new Event::McParticleCol; 00106 00107 //loop over tracks 00108 for(int i=0;i<nTrack;i++) 00109 { 00110 track = (*trackList) [i]; 00111 00112 // find out the start point 00113 bool isPrimary = false; 00114 bool startPointFound = false; 00115 BesTruthVertex* startPoint; 00116 00117 for (int i=0;i<nVertex;i++) 00118 { 00119 vertex = (*vertexList) [i]; 00120 if ( track->GetVertex()->GetIndex() == vertex->GetIndex() ) 00121 { 00122 if (!vertex->GetParentTrack()) isPrimary = true; 00123 startPointFound = true; 00124 startPoint = vertex; 00125 break; 00126 } 00127 } 00128 00129 if (!startPointFound) 00130 std::cout << "error in finding the start point of a track" <<std::endl; 00131 00132 00133 bool endPointFound = false; 00134 // find out the end point 00135 for (int i=0;i<nVertex;i++) 00136 { 00137 vertex = (*vertexList) [i]; 00138 if( track->GetTerminalVertex() ) 00139 { 00140 if (track->GetTerminalVertex()->GetIndex() == vertex->GetIndex() ) 00141 { 00142 //create the mc particle 00143 Event::McParticle* mcParticle = new Event::McParticle; 00144 00145 // initialization 00146 HepLorentzVector initialMomentum(track->GetP4().x()/1000., track->GetP4().y()/1000., track->GetP4().z()/1000., track->GetP4().t()/1000.); 00147 00148 HepLorentzVector initialPosition(startPoint->GetPosition().x()/10., startPoint->GetPosition().y()/10., startPoint->GetPosition().z()/10.,startPoint->GetTime()); 00149 00150 mcParticle->initialize(track->GetPDGCode(), 0, initialMomentum, initialPosition); 00151 00152 // Set track index 00153 mcParticle->setTrackIndex( track->GetIndex() ); 00154 00155 // Adding status flag 00156 if (isPrimary ) mcParticle->addStatusFlag(Event::McParticle::PRIMARY); 00157 00158 if (track->GetDaughterIndexes().size()==0) 00159 mcParticle->addStatusFlag(Event::McParticle::LEAF); 00160 00161 //std::cout<<"pdg:"<<track->GetPDGCode()<<" " 00162 // <<"source:"<<track->GetSource()<<" " 00163 // <<std::endl; 00164 if (track->GetSource()=="FromGenerator") 00165 mcParticle->addStatusFlag(Event::McParticle::DECAYED); 00166 else if(track->GetSource()=="FromG4") 00167 mcParticle->addStatusFlag(Event::McParticle::DECAYFLT); 00168 else 00169 mcParticle->addStatusFlag(Event::McParticle::ERROR); 00170 00171 //std::cout<<"status:"<<mcParticle->statusFlags()<<" " 00172 // <<"FGN:"<<mcParticle->decayFromGenerator()<<" " 00173 // <<"FG4:"<<mcParticle->decayInFlight()<<std::endl; 00174 // Adding vertex index 00175 mcParticle->setVertexIndex0(startPoint->GetIndex()); 00176 mcParticle->setVertexIndex1(vertex->GetIndex()); 00177 00178 // Set the final position 00179 HepLorentzVector finalPosition(vertex->GetPosition().x()/10., vertex->GetPosition().y()/10., vertex->GetPosition().z()/10., vertex->GetTime()); 00180 mcParticle->finalize(finalPosition); 00181 00182 // push back 00183 particleCol->push_back(mcParticle); 00184 00185 endPointFound = true; 00186 } 00187 } 00188 } 00189 00190 if (!endPointFound) 00191 { 00192 //std::cout << "warning in finding the end point of a track" <<std::endl; 00193 if (track->GetDaughterIndexes().size()==0) 00194 { 00195 // create the mc particle 00196 Event::McParticle* mcParticle = new Event::McParticle; 00197 // initialization 00198 HepLorentzVector initialMomentum( track->GetP4().x()/1000., track->GetP4().y()/1000., track->GetP4().z()/1000., track->GetP4().t()/1000.); 00199 HepLorentzVector initialPosition(startPoint->GetPosition().x()/10., startPoint->GetPosition().y()/10., startPoint->GetPosition().z()/10., startPoint->GetTime()); 00200 00201 mcParticle->initialize(track->GetPDGCode(), 0, initialMomentum, initialPosition); 00202 00203 // Set track index 00204 mcParticle->setTrackIndex( track->GetIndex() ); 00205 00206 // Adding status flag 00207 mcParticle->addStatusFlag(Event::McParticle::LEAF); 00208 if (isPrimary ) mcParticle->addStatusFlag(Event::McParticle::PRIMARY); 00209 00210 // Adding vertex index 00211 mcParticle->setVertexIndex0( startPoint->GetIndex() ); 00212 mcParticle->setVertexIndex1( -99 ); 00213 00214 //std::cout<<"pdg:"<<track->GetPDGCode()<<" " 00215 // <<"source:"<<track->GetSource()<<" " 00216 // <<std::endl; 00217 if (track->GetSource()=="FromGenerator") 00218 mcParticle->addStatusFlag(Event::McParticle::DECAYED); 00219 else if(track->GetSource()=="FromG4") 00220 mcParticle->addStatusFlag(Event::McParticle::DECAYFLT); 00221 else 00222 mcParticle->addStatusFlag(Event::McParticle::ERROR); 00223 00224 //std::cout<<"status:"<<mcParticle->statusFlags()<<" " 00225 // <<"FGN:"<<mcParticle->decayFromGenerator()<<" " 00226 // <<"FG4:"<<mcParticle->decayInFlight()<<std::endl; 00227 00228 // push back 00229 particleCol->push_back(mcParticle); 00230 continue; 00231 } 00232 } 00233 } 00234 00235 // Get primary McParticles 00236 SmartRefVector<Event::McParticle> primaryParticleCol; 00237 Event::McParticleCol::iterator iter_particle; 00238 for ( iter_particle = particleCol->begin(); 00239 iter_particle != particleCol->end(); iter_particle++) { 00240 00241 if ((*iter_particle)->primaryParticle()) { 00242 Event::McParticle* mcPart = (Event::McParticle*)(*iter_particle); 00243 primaryParticleCol.push_back(mcPart); 00244 } 00245 } 00246 00247 if (primaryParticleCol.empty()) 00248 std::cout << "no primary particle found!" << std::endl; 00249 00250 // Add mother particle recursively 00251 SmartRefVector<Event::McParticle>::iterator iter_primary; 00252 for ( iter_primary = primaryParticleCol.begin(); 00253 iter_primary != primaryParticleCol.end(); iter_primary++) { 00254 if ( !((*iter_primary)->leafParticle()) ) 00255 AddMother((*iter_primary), particleCol); 00256 } 00257 00258 //register McParticle collection to TDS 00259 StatusCode sc = m_evtSvc->registerObject("/Event/MC/McParticleCol", particleCol); 00260 if(sc!=StatusCode::SUCCESS) 00261 G4cout<< "Could not register McParticle collection" <<G4endl; 00262 00263 //retrive McParticle from TDS 00264 /*SmartDataPtr<Event::McParticleCol> mcParticleCol(m_evtSvc,"/Event/MC/McParticleCol"); 00265 if(!mcParticleCol) 00266 G4cout<<"Could not retrieve McParticelCol"<<G4endl; 00267 Event::McParticleCol::iterator iter_mc = mcParticleCol->begin(); 00268 for (;iter_mc != mcParticleCol->end(); iter_mc++) 00269 { 00270 G4cout<<(*iter_mc)->getTrackIndex(); 00271 G4cout<<" "<<(*iter_mc)->particleProperty(); 00272 G4cout<<" "<<(*iter_mc)->getVertexIndex0(); 00273 G4cout<<" "<<(*iter_mc)->getVertexIndex1(); 00274 G4cout<<" "<<(*iter_mc)->initialFourMomentum().x(); 00275 G4cout<<" "<<(*iter_mc)->initialFourMomentum().y(); 00276 G4cout<<" "<<(*iter_mc)->initialFourMomentum().z(); 00277 G4cout<<" "<<(*iter_mc)->initialFourMomentum().t(); 00278 G4cout<<" "<<(*iter_mc)->initialPosition().x(); 00279 G4cout<<" "<<(*iter_mc)->initialPosition().y(); 00280 G4cout<<" "<<(*iter_mc)->initialPosition().z(); 00281 G4cout<<G4endl; 00282 } 00283 G4cout<<"end of retrieve McParticle from TDS"<<G4endl; 00284 */ 00285 00286 }
void BesMcTruthWriter::SaveMcTruth | ( | ) |
Definition at line 59 of file BesMcTruthWriter.cc.
References m_evtSvc, SaveDecayMode(), SaveEmcTruth(), SaveMcParticle(), SaveMdcTruth(), SaveMucTruth(), and SaveTofTruth().
Referenced by BesTDSWriter::SaveAll().
00060 { 00061 //interface to event data service 00062 ISvcLocator* svcLocator = Gaudi::svcLocator(); 00063 StatusCode sc=svcLocator->service("EventDataSvc", m_evtSvc); 00064 if (sc.isFailure()) 00065 G4cout<<"Could not accesss EventDataSvc!"<<G4endl; 00066 00067 DataObject *aMcEvent; 00068 m_evtSvc->findObject("/Event/MC",aMcEvent); 00069 if(aMcEvent==NULL) { 00070 McEvent* aMcEvent = new McEvent; 00071 sc = m_evtSvc->registerObject("/Event/MC",aMcEvent); 00072 if(sc!=StatusCode::SUCCESS) 00073 G4cout<< "Could not register McEvent" <<G4endl; 00074 } 00075 00076 SaveMcParticle(); 00077 SaveDecayMode(); 00078 SaveMdcTruth(); 00079 SaveTofTruth(); 00080 SaveEmcTruth(); 00081 SaveMucTruth(); 00082 }
void BesMcTruthWriter::SaveMdcTruth | ( | ) |
Definition at line 323 of file BesMcTruthWriter.cc.
References BesMdcHit::GetCellNo(), BesMdcHit::GetDriftD(), BesMdcHit::GetEdep(), BesMdcHit::GetLayerNo(), BesMdcHit::GetPos(), BesMdcHit::GetPosFlag(), BesMdcHit::GetTrackID(), genRecEmupikp::i, ganga-rec::j, m_DigiMan, m_evtSvc, and MdcID::wire_id().
Referenced by SaveMcTruth().
00324 { 00325 //Mdc McHit collection defined in BOSS 00326 Event::MdcMcHitCol* aMdcMcHitCol = new Event::MdcMcHitCol; 00327 00328 G4int HCID = -1; 00329 HCID = m_DigiMan->GetHitsCollectionID("BesMdcTruthCollection"); 00330 if(HCID>0) 00331 { 00332 BesMdcHitsCollection* HC = 0; 00333 HC = (BesMdcHitsCollection*) (m_DigiMan->GetHitsCollection(HCID)); 00334 G4int n_hit = HC->entries(); 00335 if(n_hit>0) 00336 { 00337 //arrange hits in hits collection in order of trackIndex 00338 BesMdcHit* hit; 00339 vector<BesMdcHit*>* vecHC = HC->GetVector(); 00340 for(int i=0;i<n_hit-1;i++) 00341 for(int j=i+1;j<n_hit;j++) 00342 if((*vecHC)[i]->GetTrackID()>(*vecHC)[j]->GetTrackID()) 00343 { 00344 hit = (*vecHC)[i]; 00345 (*vecHC)[i] = (*vecHC)[j]; 00346 (*vecHC)[j] = hit; 00347 } 00348 00349 //push back MdcMcHits to MdcMcHitCol in TDS 00350 for(G4int i=0;i<n_hit;i++) 00351 { 00352 hit = (*HC)[i]; 00353 const Identifier ident = MdcID::wire_id ( hit->GetLayerNo(), hit->GetCellNo() ); 00354 Event::MdcMcHit* mdcMcHit = new Event::MdcMcHit(ident, hit->GetTrackID(), 00355 hit->GetPos().x(), hit->GetPos().y(), hit->GetPos().z(), 00356 hit->GetDriftD(), hit->GetEdep(),hit->GetPosFlag() ); 00357 aMdcMcHitCol->push_back(mdcMcHit); 00358 } 00359 00360 } 00361 } 00362 00363 //register MDC McTruth collection to TDS 00364 StatusCode scMdc = m_evtSvc->registerObject("/Event/MC/MdcMcHitCol", aMdcMcHitCol); 00365 if(scMdc!=StatusCode::SUCCESS) 00366 G4cout<< "Could not register MDC McTruth collection" <<G4endl; 00367 00368 //retrieve MDC McTruth from TDS 00369 /*SmartDataPtr<Event::MdcMcHitCol> aMcHitCol(m_evtSvc,"/Event/MC/MdcMcHitCol"); 00370 if(!aMcHitCol) 00371 G4cout<<"Could not retrieve MDC McTruth collection"<<G4endl; 00372 00373 Event::MdcMcHitCol::iterator iMcHitCol; 00374 for(iMcHitCol=aMcHitCol->begin(); iMcHitCol!=aMcHitCol->end(); iMcHitCol++) 00375 { 00376 const Identifier ident = (*iMcHitCol)->identify(); 00377 G4cout<<(*iMcHitCol)->getTrackIndex(); 00378 G4cout<<" "<<MdcID::layer(ident); 00379 G4cout<<" "<<MdcID::wire(ident); 00380 G4cout<<" "<<(*iMcHitCol)->getDepositEnergy(); 00381 G4cout<<" "<<(*iMcHitCol)->getDriftDistance(); 00382 G4cout<<" "<<(*iMcHitCol)->getPositionX(); 00383 G4cout<<" "<<(*iMcHitCol)->getPositionY(); 00384 G4cout<<" "<<(*iMcHitCol)->getPositionZ(); 00385 G4cout<<G4endl; 00386 } 00387 G4cout<<"end of retrieve MDC McTruth collection"<<G4endl; 00388 */ 00389 }
void BesMcTruthWriter::SaveMucTruth | ( | ) |
Definition at line 616 of file BesMcTruthWriter.cc.
References MucID::channel_id(), BesMucHit::GetGap(), BesMucHit::GetMomentum(), BesMucHit::GetPart(), BesMucHit::GetPos(), BesMucHit::GetSeg(), BesMucHit::GetStrip(), BesMucHit::GetTrackIndex(), genRecEmupikp::i, ganga-rec::j, m_DigiMan, and m_evtSvc.
Referenced by SaveMcTruth().
00617 { 00618 //Muc McHit collection defined in BOSS 00619 Event::MucMcHitCol* aMucMcHitCol = new Event::MucMcHitCol; 00620 00621 G4int HCID = -1; 00622 HCID = m_DigiMan->GetHitsCollectionID("BesMucHitsList"); 00623 if(HCID>0) 00624 { 00625 BesMucHitsCollection* HC = 0; 00626 HC = (BesMucHitsCollection*) (m_DigiMan->GetHitsCollection(HCID)); 00627 G4int n_hit = HC->entries(); 00628 if(n_hit>0) 00629 { 00630 //arrange hits in hits collection in order of trackIndex 00631 BesMucHit* hit; 00632 vector<BesMucHit*>* vecHC = HC->GetVector(); 00633 for(int i=0;i<n_hit-1;i++) 00634 for(int j=i+1;j<n_hit;j++) 00635 if((*vecHC)[i]->GetTrackIndex()>(*vecHC)[j]->GetTrackIndex()) 00636 { 00637 hit = (*vecHC)[i]; 00638 (*vecHC)[i] = (*vecHC)[j]; 00639 (*vecHC)[j] = hit; 00640 } 00641 00642 for(G4int i=0;i<n_hit;i++) 00643 { 00644 hit = (*HC)[i]; 00645 Identifier ident = MucID::channel_id ( hit->GetPart(), hit->GetSeg(), hit->GetGap(), 00646 hit->GetStrip() ); 00647 Event::MucMcHit* mucMcHit = new Event::MucMcHit(ident, hit->GetTrackIndex(), 00648 hit->GetPos().x(), hit->GetPos().y(), hit->GetPos().z(), hit->GetMomentum().x(), 00649 hit->GetMomentum().y(), hit->GetMomentum().z() ); 00650 aMucMcHitCol->push_back(mucMcHit); 00651 } 00652 00653 } 00654 } 00655 00656 //register MUC McTruth collection to TDS 00657 StatusCode scMuc = m_evtSvc->registerObject("/Event/MC/MucMcHitCol", aMucMcHitCol); 00658 if(scMuc!=StatusCode::SUCCESS) 00659 G4cout<< "Could not register MUC McTruth collection" <<G4endl; 00660 00661 //retrieve MUC McTruth from TDS 00662 /*SmartDataPtr<Event::MucMcHitCol> aMcHitCol(m_evtSvc,"/Event/MC/MucMcHitCol"); 00663 if(!aMcHitCol) 00664 G4cout<<"Could not retrieve MUC McTruth collection"<<G4endl; 00665 00666 Event::MucMcHitCol::iterator iMcHitCol; 00667 for(iMcHitCol=aMcHitCol->begin(); iMcHitCol!=aMcHitCol->end(); iMcHitCol++) 00668 { 00669 const Identifier ident = (*iMcHitCol)->identify(); 00670 G4cout<<(*iMcHitCol)->getTrackIndex(); 00671 G4cout<<" "<<MucID::part(ident); 00672 G4cout<<" "<<MucID::seg(ident); 00673 G4cout<<" "<<MucID::gap(ident); 00674 G4cout<<" "<<MucID::strip(ident); 00675 G4cout<<" "<<(*iMcHitCol)->getPositionX(); 00676 G4cout<<" "<<(*iMcHitCol)->getPositionY(); 00677 G4cout<<" "<<(*iMcHitCol)->getPositionZ(); 00678 G4cout<<" "<<(*iMcHitCol)->getPx(); 00679 G4cout<<" "<<(*iMcHitCol)->getPy(); 00680 G4cout<<" "<<(*iMcHitCol)->getPz(); 00681 G4cout<<G4endl; 00682 } 00683 G4cout<<"end of retrieve MUC McTruth"<<G4endl; 00684 */ 00685 }
void BesMcTruthWriter::SaveTofTruth | ( | ) |
Definition at line 391 of file BesMcTruthWriter.cc.
References TofID::cell_id(), BesTofHit::GetModule(), BesTofHit::GetMomentum(), BesTofHit::GetPartId(), TofID::getPHI_BARREL_MAX(), BesTofHit::GetPos(), BesTofHit::GetScinNb(), BesTofHit::GetStrip(), BesTofHit::GetTime(), BesTofHit::GetTrackIndex(), BesTofHit::GetTrackL(), genRecEmupikp::i, TofID::is_barrel(), TofID::is_scin(), ganga-rec::j, m_DigiMan, and m_evtSvc.
Referenced by SaveMcTruth().
00392 { 00393 //Tof McHit collection defined in BOSS 00394 Event::TofMcHitCol* aTofMcHitCol = new Event::TofMcHitCol; 00395 00396 G4int HCID = -1; 00397 HCID = m_DigiMan->GetHitsCollectionID("BesTofHitsList"); 00398 if(HCID>0) 00399 { 00400 BesTofHitsCollection* HC = 0; 00401 HC = (BesTofHitsCollection*) (m_DigiMan->GetHitsCollection(HCID)); 00402 G4int n_hit = HC->entries(); 00403 if(n_hit>0) 00404 { 00405 //arrange hits in hits collection in order of trackIndex 00406 BesTofHit* hit; 00407 vector<BesTofHit*>* vecHC = HC->GetVector(); 00408 for( int i=0; i<n_hit-1; i++ ) { 00409 for( int j=i+1; j<n_hit; j++ ) { 00410 if((*vecHC)[i]->GetTrackIndex()>(*vecHC)[j]->GetTrackIndex()) { 00411 hit = (*vecHC)[i]; 00412 (*vecHC)[i] = (*vecHC)[j]; 00413 (*vecHC)[j] = hit; 00414 } 00415 } 00416 } 00417 00418 //push back TofMcHit collection to TDS 00419 for( G4int i=0; i<n_hit; i++ ) { 00420 hit = (*HC)[i]; 00421 Identifier ident; 00422 unsigned int barrel_ec = hit->GetPartId(); 00423 // for Scintillator 00424 if( TofID::is_scin( barrel_ec ) ) { 00425 unsigned int scinNum = hit->GetScinNb(); 00426 unsigned int layer = 0; 00427 if( TofID::is_barrel(barrel_ec) && scinNum>TofID::getPHI_BARREL_MAX()) { 00428 layer = 1; 00429 scinNum = scinNum - TofID::getPHI_BARREL_MAX() - 1; 00430 } 00431 ident = TofID::cell_id ( barrel_ec, layer, scinNum, 0); 00432 } 00433 // for ETF(MRPC) 00434 else { // for ETF(MRPC) 00435 if( barrel_ec==3 || barrel_ec==4 ) { 00436 unsigned int endcap = 0; 00437 unsigned int module = hit->GetModule(); 00438 unsigned int strip = hit->GetStrip(); 00439 if( barrel_ec==4 ) { // west end cap 00440 endcap = 1; 00441 } 00442 ident = TofID::cell_id( 3, endcap, module, strip, 0 ); 00443 } 00444 } 00445 if( barrel_ec>=0 && barrel_ec<=4 ) { 00446 Event::TofMcHit* tofMcHit = new Event::TofMcHit( ident, hit->GetTrackIndex(), 00447 hit->GetPos().x(), hit->GetPos().y(), hit->GetPos().z(), hit->GetMomentum().x(), 00448 hit->GetMomentum().y(), hit->GetMomentum().z(), hit->GetTrackL(), hit->GetTime() ); 00449 aTofMcHitCol->push_back(tofMcHit); 00450 } 00451 } 00452 } 00453 } 00454 00455 //register TOF McTruth collection to TDS 00456 StatusCode scTof = m_evtSvc->registerObject("/Event/MC/TofMcHitCol", aTofMcHitCol); 00457 if(scTof!=StatusCode::SUCCESS) 00458 G4cout<< "Could not register TOF McTruth collection" <<G4endl; 00459 00460 //retrieve TOF McTruth from TDS 00461 /*SmartDataPtr<Event::TofMcHitCol> aMcHitCol(m_evtSvc,"/Event/MC/TofMcHitCol"); 00462 if(!aMcHitCol) 00463 G4cout<<"Could not retrieve TOF McTruth collection"<<G4endl; 00464 00465 Event::TofMcHitCol::iterator iMcHitCol; 00466 for(iMcHitCol=aMcHitCol->begin(); iMcHitCol!=aMcHitCol->end(); iMcHitCol++) 00467 { 00468 const Identifier ident = (*iMcHitCol)->identify(); 00469 G4cout<<(*iMcHitCol)->getTrackIndex(); 00470 G4cout<<" "<<TofID::barrel_ec(ident);; 00471 G4cout<<" "<<TofID::layer(ident); 00472 G4cout<<" "<<TofID::phi_module(ident); 00473 G4cout<<" "<<(*iMcHitCol)->getPositionX(); 00474 G4cout<<" "<<(*iMcHitCol)->getPositionY(); 00475 G4cout<<" "<<(*iMcHitCol)->getPositionZ(); 00476 G4cout<<" "<<(*iMcHitCol)->getPx(); 00477 G4cout<<" "<<(*iMcHitCol)->getPy(); 00478 G4cout<<" "<<(*iMcHitCol)->getPz(); 00479 G4cout<<" "<<(*iMcHitCol)->getTrackLength(); 00480 G4cout<<" "<<(*iMcHitCol)->getFlightTime(); 00481 G4cout<<G4endl; 00482 } 00483 G4cout<<"end of retrieve TOF McTruth"<<G4endl; 00484 */ 00485 }
G4DigiManager* BesMcTruthWriter::m_DigiMan [private] |
Definition at line 42 of file BesMcTruthWriter.hh.
Referenced by BesMcTruthWriter(), SaveEmcTruth(), SaveMdcTruth(), SaveMucTruth(), and SaveTofTruth().
IDataProviderSvc* BesMcTruthWriter::m_evtSvc [private] |
Definition at line 44 of file BesMcTruthWriter.hh.
Referenced by SaveDecayMode(), SaveEmcTruth(), SaveMcParticle(), SaveMcTruth(), SaveMdcTruth(), SaveMucTruth(), and SaveTofTruth().
Definition at line 43 of file BesMcTruthWriter.hh.