BLCMDtrace Class Reference

Inheritance diagram for BLCMDtrace:

BLCommand BLManager::SteppingAction BLManager::TrackingAction BLCollectiveComputation

List of all members.


Detailed Description

class BLCMDtrace implements the trace command.

Public Member Functions

 BLCMDtrace ()
 Constructor.
 BLCMDtrace (const BLCMDtrace &r)
G4String commandName ()
int command (BLArgumentVector &argv, BLArgumentMap &namedArgs)
void defineNamedArgs ()
void help (bool detailed)
 help() prints help text.
void newTrace (const G4Track *firstTrack)
void UserSteppingAction (const G4Step *step)
 UserSteppingAction() from BLManager::SteppingAction.
void PreUserTrackingAction (const G4Track *track)
 PreUserTrackingAction() from BLManager::TrackingAction.
void PostUserTrackingAction (const G4Track *track)
 PostUserTrackingAction() from BLManager::TrackingAction.
virtual void beginCollectiveTracking (std::vector< BLTrackData > &v)
 from BLCollectiveComputation
virtual void collectiveStep (std::vector< BLTrackData > &v)
virtual void endCollectiveTracking (std::vector< BLTrackData > &v)

Private Attributes

int nTrace
G4String format
G4int oneNTuple
G4int primaryOnly
G4String filename
G4String require
G4String coordinates
BLCoordinateType coordinateType
bool doTrace
TraceNTupletrace
BLEvaluatoreval
bool init
BLManagermanager
BLRunManagerrunManager

Static Private Attributes

static TraceNTupleallTrace = 0
static TraceNTupletuneTrace = 0
static TraceNTuplereferenceTrace = 0

Friends

class TraceNTuple

Constructor & Destructor Documentation

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 }


Member Function Documentation

G4String BLCMDtrace::commandName (  )  [inline, virtual]

Implements BLCommand.

00099 { return "trace"; }

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]

from BLCollectiveComputation

Reimplemented from BLCollectiveComputation.

00368 {
00369         (void)v;
00370 }

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]

Reimplemented from BLCollectiveComputation.

00391 {
00392         (void)v;
00393 }


Friends And Related Function Documentation

friend class TraceNTuple [friend]

Referenced by newTrace().


Member Data Documentation

int BLCMDtrace::nTrace [private]

G4String BLCMDtrace::format [private]

G4int BLCMDtrace::oneNTuple [private]

G4int BLCMDtrace::primaryOnly [private]

G4String BLCMDtrace::filename [private]

G4String BLCMDtrace::require [private]

G4String BLCMDtrace::coordinates [private]

bool BLCMDtrace::doTrace [private]

Referenced by BLCMDtrace(), command(), and newTrace().

bool BLCMDtrace::init [private]

Referenced by BLCMDtrace(), and command().

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().


The documentation for this class was generated from the following file:
g4beamline