BLCMDtrace::BLCMDtrace | ( | ) |
Constructor.
References BLCMDTYPE_DATA, BLCOORD_CENTERLINE, coordinates, coordinateType, doTrace, eval, filename, format, init, manager, nTrace, oneNTuple, primaryOnly, BLCommand::registerCommand(), require, runManager, BLCommand::setDescription(), BLCommand::setSynopsis(), and trace.
00133 : BLCommand(), BLManager::SteppingAction(), 00134 BLManager::TrackingAction(), BLCollectiveComputation(), 00135 format() 00136 { 00137 registerCommand(BLCMDTYPE_DATA); 00138 setSynopsis("Specifies tracing of tracks."); 00139 setDescription("Generates a separate NTuple for each track, with 1\n" 00140 "row per step, unless oneNTuple is nonzero (in which case " 00141 "all tracks are put into a single NTuple).\n" 00142 "So format=ascii generates one file per track with names\n" 00143 "generated by the pattern in filename (first %d is replaced " 00144 "by event #, second %d is replaced by trackId); for " 00145 "oneNTuple, the default filename is AllTracks.txt.\n" 00146 "\nNote that without a trace command no traces are generated, " 00147 "so to trace just the tune and reference particles include " 00148 "a trace command with no arguments.\n\n" 00149 "In collective tracking mode, oneNTuple must be nonzero, and " 00150 "the entries will be generated only at collective steps " 00151 "(usually at a specified deltaT).\n\n" 00152 "Unlike other NTuple commands, the require expression applies " 00153 "to entire tracks, not individual entries.\n\n" 00154 "The standard NTuple fields are:\n" 00155 " x,y,z (mm)\n" 00156 " Px,Py,Pz (MeV/c)\n" 00157 " t (ns)\n" 00158 " PDGid (11=e-, 13=mu-, 22=gamma, 211=pi+, 2212=proton, ...)\n" 00159 " EventID (may be inexact above 16,777,215)\n" 00160 " TrackID\n" 00161 " ParentID (0 => primary particle)\n" 00162 " Weight (defaults to 1.0)\n" 00163 "The trace includes the following fields:\n" 00164 " Bx, By, Bz (Tesla)\n" 00165 " Ex, Ey, Ez (Megavolts/meter)\n\n" 00166 "The following additional fields are appended for " 00167 "format=Extended, format=asciiExtended, and " 00168 "format=rootExtended:\n" 00169 " ProperTime (ns)\n" 00170 " PathLength (mm)\n" 00171 " PolX, PolY, PolZ (polarization)\n" 00172 " InitialKE (MeV when track was created)\n\n" 00173 "Valid Formats (ignore case): "); 00174 nTrace = 0; 00175 format = "root"; 00176 oneNTuple = 0; 00177 primaryOnly = 0; 00178 filename = ""; 00179 require = ""; 00180 coordinates = "Centerline"; 00181 coordinateType = BLCOORD_CENTERLINE; 00182 doTrace = true; 00183 trace = 0; 00184 eval = 0; 00185 init = false; 00186 manager = 0; // too early to set these -- see command() 00187 runManager = 0; 00188 }
BLCMDtrace::BLCMDtrace | ( | const BLCMDtrace & | r | ) |
References coordinates, coordinateType, doTrace, eval, filename, format, init, manager, nTrace, oneNTuple, primaryOnly, require, runManager, and trace.
00190 : BLCommand(r), 00191 BLManager::SteppingAction(), BLManager::TrackingAction(), 00192 BLCollectiveComputation(), format() 00193 { 00194 nTrace = r.nTrace; 00195 format = r.format; 00196 oneNTuple = r.oneNTuple; 00197 primaryOnly = r.primaryOnly; 00198 filename = r.filename; 00199 require = r.require; 00200 coordinates = r.coordinates; 00201 coordinateType = r.coordinateType; 00202 doTrace = r.doTrace; 00203 trace = r.trace; 00204 eval = 0; 00205 init = r.init; 00206 manager = r.manager; 00207 runManager = r.runManager; 00208 }
G4String BLCMDtrace::commandName | ( | ) | [inline, virtual] |
int BLCMDtrace::command | ( | BLArgumentVector & | argv, | |
BLArgumentMap & | namedArgs | |||
) | [virtual] |
Implements BLCommand.
References coordinates, coordinateType, eval, filename, format, BLCoordinates::getCoordinateType(), BLRunManager::getObject(), BLManager::getObject(), BLCommand::handleNamedArgs(), init, manager, oneNTuple, BLCommand::print(), BLRunManager::registerCollectiveComputation(), BLManager::registerSteppingAction(), BLManager::registerTrackingAction(), require, and runManager.
00211 { 00212 manager = BLManager::getObject(); 00213 runManager = BLRunManager::getObject(); 00214 00215 int retval = handleNamedArgs(namedArgs); 00216 00217 if(!init) { 00218 init = true; 00219 manager->registerSteppingAction(this); 00220 manager->registerTrackingAction(this); 00221 runManager->registerCollectiveComputation(this); 00222 } 00223 00224 if(filename == "") 00225 filename = (oneNTuple!=0 ? "AllTracks" : "Ev%dTrk%d"); 00226 00227 coordinateType = BLCoordinates::getCoordinateType(coordinates); 00228 // requir applies per track, not per step; handled in newTrace() 00229 if(require != "") eval = new BLEvaluator(); 00230 00231 // handle format 00232 for(G4String::size_type i=0; i<format.size(); ++i) 00233 format[i] = tolower(format[i]); 00234 G4String::size_type j=format.find("trace"); 00235 if(j == format.npos) { 00236 j = format.find("extended"); 00237 if(j == format.npos) format += "Trace"; 00238 } 00239 00240 print(""); 00241 00242 return retval; 00243 }
void BLCMDtrace::defineNamedArgs | ( | ) | [virtual] |
Reimplemented from BLCommand.
References BLCommand::argInt(), BLCommand::argString(), coordinates, filename, format, nTrace, oneNTuple, primaryOnly, and require.
00246 { 00247 argInt(nTrace,"nTrace","Number of tracks to trace."); 00248 argString(format,"format","Format of the NTuple (see above for list)."); 00249 argInt(oneNTuple,"oneNTuple","Nonzero to put all traces into a single NTuple."); 00250 argInt(primaryOnly,"primaryOnly","Nonzero to trace only primary tracks."); 00251 argString(filename,"filename","Filename (Ev%dTrk%d.txt or AllTracks.txt)."); 00252 argString(filename,"file","synonym for filename."); 00253 argString(require,"require","Expression which must be nonzero to trace the track (default=1)",false); 00254 argString(coordinates,"coordinates","Coordinates: global, centerline, or reference (default=c)."); 00255 }
void BLCMDtrace::help | ( | bool | detailed | ) | [inline, virtual] |
help() prints help text.
Reimplemented from BLCommand.
References BLCommand::description, BLTrackNTuple::getFormatList(), and BLCommand::help().
00106 { 00107 if(description[description.size()-2] == ':') 00108 description += BLTrackNTuple::getFormatList(); 00109 BLCommand::help(detailed); 00110 }
void BLCMDtrace::newTrace | ( | const G4Track * | firstTrack | ) |
References allTrace, TraceNTuple::close(), coordinateType, eval, BLEvaluator::evaluate(), filename, format, BLManager::getExternalTrackID(), BLEvaluator::isOK(), manager, oneNTuple, BLCommand::printError(), referenceTrace, require, BLEvaluator::setTrackVariables(), snprintf, trace, TraceNTuple, and tuneTrace.
Referenced by PreUserTrackingAction().
00258 { 00259 int evNum = G4RunManager::GetRunManager()->GetCurrentEvent()->GetEventID(); 00260 int trkId = manager->getExternalTrackID(firstTrack); 00261 00262 if(oneNTuple != 0) { 00263 if(!allTrace) allTrace = new TraceNTuple(format,"AllTracks", 00264 filename, coordinateType); 00265 } else if(evNum == -2) { 00266 if(!tuneTrace) tuneTrace = new TraceNTuple(format, 00267 "TuneParticle","TuneParticle",coordinateType); 00268 } else if(evNum == -1) { 00269 if(!referenceTrace) referenceTrace = new TraceNTuple(format, 00270 "ReferenceParticle","ReferenceParticle",coordinateType); 00271 } else { 00272 if(trace) trace->close(); 00273 } 00274 trace = 0; 00275 00276 if(eval) { 00277 eval->setTrackVariables(firstTrack,coordinateType); 00278 G4double v = eval->evaluate(require); 00279 if(!eval->isOK()) { 00280 BLCommand::printError("trace: invalid expression require='%s'\n", 00281 require.c_str()); 00282 delete eval; 00283 eval = 0; 00284 v = 1.0; 00285 } 00286 if(v == 0.0) return; 00287 } 00288 00289 if(allTrace != 0) { 00290 trace = allTrace; 00291 } else if(evNum == -2) { 00292 trace = tuneTrace; 00293 } else if(evNum == -1) { 00294 trace = referenceTrace; 00295 } else if(evNum >= 0) { 00296 char tmp[128]; 00297 snprintf(tmp,128,filename.c_str(),evNum,trkId); 00298 trace = new TraceNTuple(format,tmp,tmp,coordinateType); 00299 } 00300 }
void BLCMDtrace::UserSteppingAction | ( | const G4Step * | step | ) | [virtual] |
UserSteppingAction() from BLManager::SteppingAction.
Implements BLManager::SteppingAction.
References TraceNTuple::appendTrace(), doTrace, BLRunManager::getCollectiveMode(), BLManager::getState(), manager, runManager, SPECIAL, and trace.
00304 { 00305 if(manager->getState() == SPECIAL || runManager->getCollectiveMode()) 00306 return; 00307 00308 if(!trace || !doTrace) return; 00309 00310 G4Track *track = step->GetTrack(); 00311 trace->appendTrace(track); 00312 }
void BLCMDtrace::PreUserTrackingAction | ( | const G4Track * | track | ) | [virtual] |
PreUserTrackingAction() from BLManager::TrackingAction.
Implements BLManager::TrackingAction.
References TraceNTuple::annotate(), BLCOORD_REFERENCE, TraceNTuple::close(), coordinateType, doTrace, BLRunManager::getCollectiveMode(), manager, newTrace(), nTrace, oneNTuple, primaryOnly, runManager, and trace.
00315 { 00316 int evNum = runManager->GetCurrentEvent()->GetEventID(); 00317 00318 doTrace = false; 00319 00320 if(evNum < 0) { 00321 // cannot use reference coordinates for tune or reference 00322 doTrace = (coordinateType != BLCOORD_REFERENCE); 00323 if(doTrace) newTrace(track); 00324 } else if(runManager->getCollectiveMode() && nTrace > 0) { 00325 if(oneNTuple == 0) { 00326 G4Exception("trace","Collective mode, oneNTuple=0", 00327 FatalException,"oneNTuple must be nonzero"); 00328 } 00329 newTrace(track); 00330 } else if(nTrace > 0) { 00331 doTrace = ((primaryOnly == 0) || (track->GetParentID() == 0)); 00332 if(doTrace) { 00333 --nTrace; 00334 newTrace(track); 00335 } 00336 } else { 00337 if(trace) { 00338 trace->close(); 00339 trace = 0; 00340 } 00341 } 00342 00343 if(trace && doTrace && 00344 !runManager->getCollectiveMode()) { 00345 char tmp[64]; 00346 sprintf(tmp,"# Event %d Track %d",evNum,manager-> 00347 getExternalTrackID(track)); 00348 trace->annotate(tmp); 00349 } 00350 }
void BLCMDtrace::PostUserTrackingAction | ( | const G4Track * | track | ) | [virtual] |
PostUserTrackingAction() from BLManager::TrackingAction.
Implements BLManager::TrackingAction.
References TraceNTuple::annotate(), TraceNTuple::close(), doTrace, BLRunManager::getCollectiveMode(), oneNTuple, runManager, and trace.
00353 { 00354 if(!trace) return; 00355 00356 if(doTrace && !runManager->getCollectiveMode()) 00357 trace->annotate(""); 00358 00359 int evNum = G4RunManager::GetRunManager()->GetCurrentEvent()-> 00360 GetEventID(); 00361 if(oneNTuple == 0 && evNum >= 0) { 00362 trace->close(); 00363 trace = 0; 00364 } 00365 }
void BLCMDtrace::beginCollectiveTracking | ( | std::vector< BLTrackData > & | v | ) | [virtual] |
void BLCMDtrace::collectiveStep | ( | std::vector< BLTrackData > & | v | ) | [virtual] |
Implements BLCollectiveComputation.
References TraceNTuple::appendTrace(), primaryOnly, runManager, BLRunManager::setCurrentEvent(), and trace.
00373 { 00374 if(trace) { 00375 for(unsigned i=0; i<v.size(); ++i) { 00376 G4Track *track = v[i].track; 00377 G4Event *event = v[i].event; 00378 runManager->setCurrentEvent(event); 00379 G4TrackStatus trackStatus = track->GetTrackStatus(); 00380 if(trackStatus != fAlive && 00381 trackStatus != fStopButAlive) 00382 continue; 00383 if(primaryOnly != 0 && track->GetParentID() > 0) 00384 continue; 00385 trace->appendTrace(track); 00386 } 00387 } 00388 }
void BLCMDtrace::endCollectiveTracking | ( | std::vector< BLTrackData > & | v | ) | [virtual] |
friend class TraceNTuple [friend] |
Referenced by newTrace().
int BLCMDtrace::nTrace [private] |
Referenced by BLCMDtrace(), defineNamedArgs(), and PreUserTrackingAction().
G4String BLCMDtrace::format [private] |
Referenced by BLCMDtrace(), command(), defineNamedArgs(), and newTrace().
G4int BLCMDtrace::oneNTuple [private] |
Referenced by BLCMDtrace(), command(), defineNamedArgs(), newTrace(), PostUserTrackingAction(), and PreUserTrackingAction().
G4int BLCMDtrace::primaryOnly [private] |
Referenced by BLCMDtrace(), collectiveStep(), defineNamedArgs(), and PreUserTrackingAction().
G4String BLCMDtrace::filename [private] |
Referenced by BLCMDtrace(), command(), defineNamedArgs(), and newTrace().
G4String BLCMDtrace::require [private] |
Referenced by BLCMDtrace(), command(), defineNamedArgs(), and newTrace().
G4String BLCMDtrace::coordinates [private] |
Referenced by BLCMDtrace(), command(), and defineNamedArgs().
BLCoordinateType BLCMDtrace::coordinateType [private] |
Referenced by BLCMDtrace(), command(), newTrace(), and PreUserTrackingAction().
bool BLCMDtrace::doTrace [private] |
Referenced by BLCMDtrace(), PostUserTrackingAction(), PreUserTrackingAction(), and UserSteppingAction().
TraceNTuple* BLCMDtrace::trace [private] |
Referenced by BLCMDtrace(), collectiveStep(), newTrace(), PostUserTrackingAction(), PreUserTrackingAction(), and UserSteppingAction().
BLEvaluator* BLCMDtrace::eval [private] |
Referenced by BLCMDtrace(), command(), and newTrace().
bool BLCMDtrace::init [private] |
Referenced by BLCMDtrace(), and command().
BLManager* BLCMDtrace::manager [private] |
Referenced by BLCMDtrace(), command(), newTrace(), PreUserTrackingAction(), and UserSteppingAction().
BLRunManager* BLCMDtrace::runManager [private] |
Referenced by BLCMDtrace(), collectiveStep(), command(), PostUserTrackingAction(), PreUserTrackingAction(), and UserSteppingAction().
TraceNTuple * BLCMDtrace::allTrace = 0 [static, private] |
Referenced by newTrace().
TraceNTuple * BLCMDtrace::tuneTrace = 0 [static, private] |
Referenced by newTrace().
TraceNTuple * BLCMDtrace::referenceTrace = 0 [static, private] |
Referenced by newTrace().