44 #ifdef CEXMC_USE_CUSTOM_FILTER    47 #include <boost/variant/get.hpp>    54     const std::string  CexmcCFVarEvent( 
"event" );
    55     const std::string  CexmcCFVarOpCosThetaSCM( 
"op_cosTh_SCM" );
    56     const std::string  CexmcCFVarEDT( 
"edt" );
    57     const std::string  CexmcCFVarTPT( 
"tpt" );
    58     const std::string  CexmcCFVarMon( 
"mon" );
    59     const std::string  CexmcCFVarMonED( 
"monED" );
    60     const std::string  CexmcCFVarVclED( 
"vclED" );
    61     const std::string  CexmcCFVarVcrED( 
"vcrED" );
    62     const std::string  CexmcCFVarClED( 
"clED" );
    63     const std::string  CexmcCFVarCrED( 
"crED" );
    64     const std::string  CexmcCFVarClEDCol( 
"clEDcol" );
    65     const std::string  CexmcCFVarCrEDCol( 
"crEDcol" );
    66     const std::string  CexmcCFVarBpMonPosL( 
"bp_mon_posl" );
    67     const std::string  CexmcCFVarBpMonPosW( 
"bp_mon_posw" );
    68     const std::string  CexmcCFVarBpMonDirL( 
"bp_mon_dirl" );
    69     const std::string  CexmcCFVarBpMonDirW( 
"bp_mon_dirw" );
    70     const std::string  CexmcCFVarBpMonMom( 
"bp_mon_mom" );
    71     const std::string  CexmcCFVarBpMonTid( 
"bp_mon_tid" );
    72     const std::string  CexmcCFVarBpTgtPosL( 
"bp_tgt_posl" );
    73     const std::string  CexmcCFVarBpTgtPosW( 
"bp_tgt_posw" );
    74     const std::string  CexmcCFVarBpTgtDirL( 
"bp_tgt_dirl" );
    75     const std::string  CexmcCFVarBpTgtDirW( 
"bp_tgt_dirw" );
    76     const std::string  CexmcCFVarBpTgtMom( 
"bp_tgt_mom" );
    77     const std::string  CexmcCFVarBpTgtTid( 
"bp_tgt_tid" );
    78     const std::string  CexmcCFVarOpTgtPosL( 
"op_tgt_posl" );
    79     const std::string  CexmcCFVarOpTgtPosW( 
"op_tgt_posw" );
    80     const std::string  CexmcCFVarOpTgtDirL( 
"op_tgt_dirl" );
    81     const std::string  CexmcCFVarOpTgtDirW( 
"op_tgt_dirw" );
    82     const std::string  CexmcCFVarOpTgtMom( 
"op_tgt_mom" );
    83     const std::string  CexmcCFVarOpTgtTid( 
"op_tgt_tid" );
    84     const std::string  CexmcCFVarNpTgtPosL( 
"np_tgt_posl" );
    85     const std::string  CexmcCFVarNpTgtPosW( 
"np_tgt_posw" );
    86     const std::string  CexmcCFVarNpTgtDirL( 
"np_tgt_dirl" );
    87     const std::string  CexmcCFVarNpTgtDirW( 
"np_tgt_dirw" );
    88     const std::string  CexmcCFVarNpTgtMom( 
"np_tgt_mom" );
    89     const std::string  CexmcCFVarNpTgtTid( 
"np_tgt_tid" );
    90     const std::string  CexmcCFVarOpdp1TgtPosL( 
"opdp1_tgt_posl" );
    91     const std::string  CexmcCFVarOpdp1TgtPosW( 
"opdp1_tgt_posw" );
    92     const std::string  CexmcCFVarOpdp1TgtDirL( 
"opdp1_tgt_dirl" );
    93     const std::string  CexmcCFVarOpdp1TgtDirW( 
"opdp1_tgt_dirw" );
    94     const std::string  CexmcCFVarOpdp1TgtMom( 
"opdp1_tgt_mom" );
    95     const std::string  CexmcCFVarOpdp1TgtTid( 
"opdp1_tgt_tid" );
    96     const std::string  CexmcCFVarOpdp2TgtPosL( 
"opdp2_tgt_posl" );
    97     const std::string  CexmcCFVarOpdp2TgtPosW( 
"opdp2_tgt_posw" );
    98     const std::string  CexmcCFVarOpdp2TgtDirL( 
"opdp2_tgt_dirl" );
    99     const std::string  CexmcCFVarOpdp2TgtDirW( 
"opdp2_tgt_dirw" );
   100     const std::string  CexmcCFVarOpdp2TgtMom( 
"opdp2_tgt_mom" );
   101     const std::string  CexmcCFVarOpdp2TgtTid( 
"opdp2_tgt_tid" );
   102     const std::string  CexmcCFVarOpdpVclPosL( 
"opdp_vcl_posl" );
   103     const std::string  CexmcCFVarOpdpVclPosW( 
"opdp_vcl_posw" );
   104     const std::string  CexmcCFVarOpdpVclDirL( 
"opdp_vcl_dirl" );
   105     const std::string  CexmcCFVarOpdpVclDirW( 
"opdp_vcl_dirw" );
   106     const std::string  CexmcCFVarOpdpVclMom( 
"opdp_vcl_mom" );
   107     const std::string  CexmcCFVarOpdpVclTid( 
"opdp_vcl_tid" );
   108     const std::string  CexmcCFVarOpdpVcrPosL( 
"opdp_vcr_posl" );
   109     const std::string  CexmcCFVarOpdpVcrPosW( 
"opdp_vcr_posw" );
   110     const std::string  CexmcCFVarOpdpVcrDirL( 
"opdp_vcr_dirl" );
   111     const std::string  CexmcCFVarOpdpVcrDirW( 
"opdp_vcr_dirw" );
   112     const std::string  CexmcCFVarOpdpVcrMom( 
"opdp_vcr_mom" );
   113     const std::string  CexmcCFVarOpdpVcrTid( 
"opdp_vcr_tid" );
   114     const std::string  CexmcCFVarOpdpClPosL( 
"opdp_cl_posl" );
   115     const std::string  CexmcCFVarOpdpClPosW( 
"opdp_cl_posw" );
   116     const std::string  CexmcCFVarOpdpClDirL( 
"opdp_cl_dirl" );
   117     const std::string  CexmcCFVarOpdpClDirW( 
"opdp_cl_dirw" );
   118     const std::string  CexmcCFVarOpdpClMom( 
"opdp_cl_mom" );
   119     const std::string  CexmcCFVarOpdpClTid( 
"opdp_cl_tid" );
   120     const std::string  CexmcCFVarOpdpCrPosL( 
"opdp_cr_posl" );
   121     const std::string  CexmcCFVarOpdpCrPosW( 
"opdp_cr_posw" );
   122     const std::string  CexmcCFVarOpdpCrDirL( 
"opdp_cr_dirl" );
   123     const std::string  CexmcCFVarOpdpCrDirW( 
"opdp_cr_dirw" );
   124     const std::string  CexmcCFVarOpdpCrMom( 
"opdp_cr_mom" );
   125     const std::string  CexmcCFVarOpdpCrTid( 
"opdp_cr_tid" );
   126     const std::string  CexmcCFVarIpSCM( 
"ipSCM" );
   127     const std::string  CexmcCFVarIpLAB( 
"ipLAB" );
   128     const std::string  CexmcCFVarNpSCM( 
"npSCM" );
   129     const std::string  CexmcCFVarNpLAB( 
"npLAB" );
   130     const std::string  CexmcCFVarOpSCM( 
"opSCM" );
   131     const std::string  CexmcCFVarOpLAB( 
"opLAB" );
   132     const std::string  CexmcCFVarNopSCM( 
"nopSCM" );
   133     const std::string  CexmcCFVarNopLAB( 
"nopLAB" );
   134     const std::string  CexmcCFVarIpId( 
"ipId" );
   135     const std::string  CexmcCFVarNpId( 
"npId" );
   136     const std::string  CexmcCFVarOpId( 
"opId" );
   137     const std::string  CexmcCFVarNopId( 
"nopId" );
   138     const std::string  CexmcCFVarConst_eV( 
"eV" );
   139     const std::string  CexmcCFVarConst_keV( 
"keV" );
   140     const std::string  CexmcCFVarConst_MeV( 
"MeV" );
   141     const std::string  CexmcCFVarConst_GeV( 
"GeV" );
   142     const std::string  CexmcCFVarConst_mm( 
"mm" );
   143     const std::string  CexmcCFVarConst_cm( 
"cm" );
   144     const std::string  CexmcCFVarConst_m( 
"m" );
   151 CexmcASTEval::CexmcASTEval( 
const CexmcEventFastSObject *  evFastSObject,
   152                             const CexmcEventSObject *  evSObject ) :
   153     evFastSObject( evFastSObject ), evSObject( evSObject )
   158 CexmcAST::BasicEval::ScalarValueType  CexmcASTEval::GetFunScalarValue(
   159                                         const CexmcAST::Subtree &  ast )
 const   161     const CexmcAST::Function &  fun( boost::get< CexmcAST::Function >(
   167         GetEDCollectionValue( ast.children[ 0 ], edCol );
   171         for ( CexmcEnergyDepositCalorimeterCollection::iterator
   172                                     k( edCol.begin() ); k != edCol.end(); ++k )
   174             result += std::accumulate( k->begin(), k->end(), 
G4double( 0. ) );
   180     bool             evalResult( 
false );
   181     ScalarValueType  result( GetBasicFunScalarValue( ast, evalResult ) );
   192 CexmcAST::BasicEval::ScalarValueType  CexmcASTEval::GetVarScalarValue(
   193                                         const CexmcAST::Variable &  var )
 const   195     if ( evFastSObject == NULL || evSObject == NULL )
   202     const double * 
const *  addr( boost::get< const double * >( &var.addr ) );
   211         const int * 
const &  addr( boost::get< const int * >( var.addr ) );
   219     VarAddrMap::const_iterator  found( varAddrMap.find( var.name ) );
   221     if ( found != varAddrMap.end() )
   224                 boost::get< const CexmcEnergyDepositCalorimeterCollection * >(
   230                 if ( ( *addr )->size() == 0 )
   232                 if ( var.index1 == 0 || var.index2 == 0 )
   234                 return ( *addr )->at( var.index1 - 1 ).at( var.index2 - 1 );
   239             const bool * 
const &  addr( boost::get< const bool * >(
   248     if ( var.name == CexmcCFVarTPT )
   250         return int( evSObject->targetTPOutputParticle.trackId !=
   260 void  CexmcASTEval::GetEDCollectionValue( 
const CexmcAST::Node &  node,
   263     if ( evSObject == NULL )
   266     const CexmcAST::Subtree *  ast( boost::get< CexmcAST::Subtree >( &node ) );
   270         const CexmcAST::Function &  fun( boost::get< CexmcAST::Function >(
   273         if ( fun == 
"Inner" )
   275             GetEDCollectionValue( ast->children[ 0 ], edCol );
   277             edCol.erase( edCol.begin() );
   278             for ( CexmcEnergyDepositCalorimeterCollection::iterator
   279                             k( edCol.begin() ); k != edCol.end(); ++k )
   282                 k->erase( k->begin() );
   286         if ( fun == 
"Outer" )
   288             GetEDCollectionValue( ast->children[ 0 ], edCol );
   289             if ( edCol.size() < 3 )
   291             for ( CexmcEnergyDepositCalorimeterCollection::iterator
   292                             k( edCol.begin() + 1 ); k != edCol.end() - 1; ++k )
   296                 k->erase( k->begin() + 1, k->end() - 1 );
   303         const CexmcAST::Leaf &      leaf( boost::get< CexmcAST::Leaf >(
   305         const CexmcAST::Variable &  var( boost::get< CexmcAST::Variable >(
   308         if ( var.index1 != 0 || var.index2 != 0 )
   311         VarAddrMap::const_iterator  found( varAddrMap.find( var.name ) );
   313         if ( found == varAddrMap.end() )
   317                 boost::get< const CexmcEnergyDepositCalorimeterCollection * >(
   333 void  CexmcASTEval::BindAddresses( CexmcAST::Subtree &  ast )
   335     if ( evFastSObject == NULL || evSObject == NULL )
   338     for ( std::vector< CexmcAST::Node >::iterator  k( ast.children.begin() );
   339                                                   k != ast.children.end(); ++k )
   341         CexmcAST::Subtree *  subtree( boost::get< CexmcAST::Subtree >( &*k ) );
   345             BindAddresses( *subtree );
   349             CexmcAST::Leaf &      leaf( boost::get< CexmcAST::Leaf >( *k ) );
   350             CexmcAST::Variable *  var( boost::get< CexmcAST::Variable >(
   355             const int * 
const *   intVarAddr(
   356                                     boost::get< const int * >( &var->addr ) );
   364                 const double * 
const &  doubleVarAddr(
   365                                     boost::get< const double * >( var->addr ) );
   370             VarAddrMap::const_iterator  found( varAddrMap.find( var->name ) );
   372             if ( found != varAddrMap.end() )
   377                 if ( var->name == CexmcCFVarEvent )
   379                     var->addr = &evFastSObject->eventId;
   382                 if ( var->name == CexmcCFVarOpCosThetaSCM )
   384                     var->addr = &evFastSObject->opCosThetaSCM;
   387                 if ( var->name == CexmcCFVarEDT )
   389                     varAddrMap.insert( VarAddrMapData( var->name,
   390                                    &evFastSObject->edDigitizerHasTriggered ) );
   393                 if ( var->name == CexmcCFVarMon )
   395                     varAddrMap.insert( VarAddrMapData( var->name,
   396                            &evFastSObject->edDigitizerMonitorHasTriggered ) );
   399                 if ( var->name == CexmcCFVarMonED )
   401                     var->addr = &evSObject->monitorED;
   404                 if ( var->name == CexmcCFVarVclED )
   406                     var->addr = &evSObject->vetoCounterEDLeft;
   409                 if ( var->name == CexmcCFVarVcrED )
   411                     var->addr = &evSObject->vetoCounterEDRight;
   414                 if ( var->name == CexmcCFVarClED )
   416                     var->addr = &evSObject->calorimeterEDLeft;
   419                 if ( var->name == CexmcCFVarCrED )
   421                     var->addr = &evSObject->calorimeterEDRight;
   424                 if ( var->name == CexmcCFVarClEDCol )
   426                     varAddrMap.insert( VarAddrMapData( var->name,
   427                                 &evSObject->calorimeterEDLeftCollection ) );
   430                 if ( var->name == CexmcCFVarCrEDCol )
   432                     varAddrMap.insert( VarAddrMapData( var->name,
   433                                 &evSObject->calorimeterEDRightCollection ) );
   436                 if ( var->name == CexmcCFVarBpMonPosL )
   438                     var->addr = GetThreeVectorElementAddrByIndex(
   439                             evSObject->monitorTP.positionLocal, var->index1 );
   442                 if ( var->name == CexmcCFVarBpMonPosW )
   444                     var->addr = GetThreeVectorElementAddrByIndex(
   445                             evSObject->monitorTP.positionWorld, var->index1 );
   448                 if ( var->name == CexmcCFVarBpMonDirL )
   450                     var->addr = GetThreeVectorElementAddrByIndex(
   451                             evSObject->monitorTP.directionLocal, var->index1 );
   454                 if ( var->name == CexmcCFVarBpMonDirW )
   456                     var->addr = GetThreeVectorElementAddrByIndex(
   457                             evSObject->monitorTP.directionWorld, var->index1 );
   460                 if ( var->name == CexmcCFVarBpMonMom )
   462                     var->addr = &evSObject->monitorTP.momentumAmp;
   465                 if ( var->name == CexmcCFVarBpMonTid )
   467                     var->addr = &evSObject->monitorTP.trackId;
   470                 if ( var->name == CexmcCFVarBpTgtPosL )
   472                     var->addr = GetThreeVectorElementAddrByIndex(
   473                             evSObject->targetTPBeamParticle.positionLocal,
   477                 if ( var->name == CexmcCFVarBpTgtPosW )
   479                     var->addr = GetThreeVectorElementAddrByIndex(
   480                             evSObject->targetTPBeamParticle.positionWorld,
   484                 if ( var->name == CexmcCFVarBpTgtDirL )
   486                     var->addr = GetThreeVectorElementAddrByIndex(
   487                             evSObject->targetTPBeamParticle.directionLocal,
   491                 if ( var->name == CexmcCFVarBpTgtDirW )
   493                     var->addr = GetThreeVectorElementAddrByIndex(
   494                             evSObject->targetTPBeamParticle.directionWorld,
   498                 if ( var->name == CexmcCFVarBpTgtMom )
   500                     var->addr = &evSObject->targetTPBeamParticle.momentumAmp;
   503                 if ( var->name == CexmcCFVarBpTgtTid )
   505                     var->addr = &evSObject->targetTPBeamParticle.trackId;
   508                 if ( var->name == CexmcCFVarOpTgtPosL )
   510                     var->addr = GetThreeVectorElementAddrByIndex(
   511                             evSObject->targetTPOutputParticle.positionLocal,
   515                 if ( var->name == CexmcCFVarOpTgtPosW )
   517                     var->addr = GetThreeVectorElementAddrByIndex(
   518                             evSObject->targetTPOutputParticle.positionWorld,
   522                 if ( var->name == CexmcCFVarOpTgtDirL )
   524                     var->addr = GetThreeVectorElementAddrByIndex(
   525                             evSObject->targetTPOutputParticle.directionLocal,
   529                 if ( var->name == CexmcCFVarOpTgtDirW )
   531                     var->addr = GetThreeVectorElementAddrByIndex(
   532                             evSObject->targetTPOutputParticle.directionWorld,
   536                 if ( var->name == CexmcCFVarOpTgtMom )
   538                     var->addr = &evSObject->targetTPOutputParticle.momentumAmp;
   541                 if ( var->name == CexmcCFVarOpTgtTid )
   543                     var->addr = &evSObject->targetTPOutputParticle.trackId;
   546                 if ( var->name == CexmcCFVarNpTgtPosL )
   548                     var->addr = GetThreeVectorElementAddrByIndex(
   549                             evSObject->targetTPNucleusParticle.positionLocal,
   553                 if ( var->name == CexmcCFVarNpTgtPosW )
   555                     var->addr = GetThreeVectorElementAddrByIndex(
   556                             evSObject->targetTPNucleusParticle.positionWorld,
   560                 if ( var->name == CexmcCFVarNpTgtDirL )
   562                     var->addr = GetThreeVectorElementAddrByIndex(
   563                             evSObject->targetTPNucleusParticle.directionLocal,
   567                 if ( var->name == CexmcCFVarNpTgtDirW )
   569                     var->addr = GetThreeVectorElementAddrByIndex(
   570                             evSObject->targetTPNucleusParticle.directionWorld,
   574                 if ( var->name == CexmcCFVarNpTgtMom )
   576                     var->addr = &evSObject->targetTPNucleusParticle.momentumAmp;
   579                 if ( var->name == CexmcCFVarNpTgtTid )
   581                     var->addr = &evSObject->targetTPNucleusParticle.trackId;
   584                 if ( var->name == CexmcCFVarOpdp1TgtPosL )
   586                     var->addr = GetThreeVectorElementAddrByIndex(
   587                         evSObject->targetTPOutputParticleDecayProductParticle1.
   592                 if ( var->name == CexmcCFVarOpdp1TgtPosW )
   594                     var->addr = GetThreeVectorElementAddrByIndex(
   595                         evSObject->targetTPOutputParticleDecayProductParticle1.
   600                 if ( var->name == CexmcCFVarOpdp1TgtDirL )
   602                     var->addr = GetThreeVectorElementAddrByIndex(
   603                         evSObject->targetTPOutputParticleDecayProductParticle1.
   608                 if ( var->name == CexmcCFVarOpdp1TgtDirW )
   610                     var->addr = GetThreeVectorElementAddrByIndex(
   611                         evSObject->targetTPOutputParticleDecayProductParticle1.
   616                 if ( var->name == CexmcCFVarOpdp1TgtMom )
   618                     var->addr = &evSObject->
   619                         targetTPOutputParticleDecayProductParticle1.momentumAmp;
   622                 if ( var->name == CexmcCFVarOpdp1TgtTid )
   624                     var->addr = &evSObject->
   625                         targetTPOutputParticleDecayProductParticle1.trackId;
   628                 if ( var->name == CexmcCFVarOpdp2TgtPosL )
   630                     var->addr = GetThreeVectorElementAddrByIndex(
   631                         evSObject->targetTPOutputParticleDecayProductParticle2.
   636                 if ( var->name == CexmcCFVarOpdp2TgtPosW )
   638                     var->addr = GetThreeVectorElementAddrByIndex(
   639                         evSObject->targetTPOutputParticleDecayProductParticle2.
   644                 if ( var->name == CexmcCFVarOpdp2TgtDirL )
   646                     var->addr = GetThreeVectorElementAddrByIndex(
   647                         evSObject->targetTPOutputParticleDecayProductParticle2.
   652                 if ( var->name == CexmcCFVarOpdp2TgtDirW )
   654                     var->addr = GetThreeVectorElementAddrByIndex(
   655                         evSObject->targetTPOutputParticleDecayProductParticle2.
   660                 if ( var->name == CexmcCFVarOpdp2TgtMom )
   662                     var->addr = &evSObject->
   663                         targetTPOutputParticleDecayProductParticle2.momentumAmp;
   666                 if ( var->name == CexmcCFVarOpdp2TgtTid )
   668                     var->addr = &evSObject->
   669                         targetTPOutputParticleDecayProductParticle2.trackId;
   672                 if ( var->name == CexmcCFVarOpdpVclPosL )
   674                     var->addr = GetThreeVectorElementAddrByIndex(
   675                             evSObject->vetoCounterTPLeft.positionLocal,
   679                 if ( var->name == CexmcCFVarOpdpVclPosW )
   681                     var->addr = GetThreeVectorElementAddrByIndex(
   682                             evSObject->vetoCounterTPLeft.positionWorld,
   686                 if ( var->name == CexmcCFVarOpdpVclDirL )
   688                     var->addr = GetThreeVectorElementAddrByIndex(
   689                             evSObject->vetoCounterTPLeft.directionLocal,
   693                 if ( var->name == CexmcCFVarOpdpVclDirW )
   695                     var->addr = GetThreeVectorElementAddrByIndex(
   696                             evSObject->vetoCounterTPLeft.directionWorld,
   700                 if ( var->name == CexmcCFVarOpdpVclMom )
   702                     var->addr = &evSObject->vetoCounterTPLeft.momentumAmp;
   705                 if ( var->name == CexmcCFVarOpdpVclTid )
   707                     var->addr = &evSObject->vetoCounterTPLeft.trackId;
   710                 if ( var->name == CexmcCFVarOpdpVcrPosL )
   712                     var->addr = GetThreeVectorElementAddrByIndex(
   713                             evSObject->vetoCounterTPRight.positionLocal,
   717                 if ( var->name == CexmcCFVarOpdpVcrPosW )
   719                     var->addr = GetThreeVectorElementAddrByIndex(
   720                             evSObject->vetoCounterTPRight.positionWorld,
   724                 if ( var->name == CexmcCFVarOpdpVcrDirL )
   726                     var->addr = GetThreeVectorElementAddrByIndex(
   727                             evSObject->vetoCounterTPRight.directionLocal,
   731                 if ( var->name == CexmcCFVarOpdpVcrDirW )
   733                     var->addr = GetThreeVectorElementAddrByIndex(
   734                             evSObject->vetoCounterTPRight.directionWorld,
   738                 if ( var->name == CexmcCFVarOpdpVcrMom )
   740                     var->addr = &evSObject->vetoCounterTPRight.momentumAmp;
   743                 if ( var->name == CexmcCFVarOpdpVcrTid )
   745                     var->addr = &evSObject->vetoCounterTPRight.trackId;
   748                 if ( var->name == CexmcCFVarOpdpClPosL )
   750                     var->addr = GetThreeVectorElementAddrByIndex(
   751                             evSObject->calorimeterTPLeft.positionLocal,
   755                 if ( var->name == CexmcCFVarOpdpClPosW )
   757                     var->addr = GetThreeVectorElementAddrByIndex(
   758                             evSObject->calorimeterTPLeft.positionWorld,
   762                 if ( var->name == CexmcCFVarOpdpClDirL )
   764                     var->addr = GetThreeVectorElementAddrByIndex(
   765                             evSObject->calorimeterTPLeft.directionLocal,
   769                 if ( var->name == CexmcCFVarOpdpClDirW )
   771                     var->addr = GetThreeVectorElementAddrByIndex(
   772                             evSObject->calorimeterTPLeft.directionWorld,
   776                 if ( var->name == CexmcCFVarOpdpClMom )
   778                     var->addr = &evSObject->calorimeterTPLeft.momentumAmp;
   781                 if ( var->name == CexmcCFVarOpdpClTid )
   783                     var->addr = &evSObject->calorimeterTPLeft.trackId;
   786                 if ( var->name == CexmcCFVarOpdpCrPosL )
   788                     var->addr = GetThreeVectorElementAddrByIndex(
   789                             evSObject->calorimeterTPRight.positionLocal,
   793                 if ( var->name == CexmcCFVarOpdpCrPosW )
   795                     var->addr = GetThreeVectorElementAddrByIndex(
   796                             evSObject->calorimeterTPRight.positionWorld,
   800                 if ( var->name == CexmcCFVarOpdpCrDirL )
   802                     var->addr = GetThreeVectorElementAddrByIndex(
   803                             evSObject->calorimeterTPRight.directionLocal,
   807                 if ( var->name == CexmcCFVarOpdpCrDirW )
   809                     var->addr = GetThreeVectorElementAddrByIndex(
   810                             evSObject->calorimeterTPRight.directionWorld,
   814                 if ( var->name == CexmcCFVarOpdpCrMom )
   816                     var->addr = &evSObject->calorimeterTPRight.momentumAmp;
   819                 if ( var->name == CexmcCFVarOpdpCrTid )
   821                     var->addr = &evSObject->calorimeterTPRight.trackId;
   824                 if ( var->name == CexmcCFVarIpSCM )
   826                     var->addr = GetLorentzVectorElementAddrByIndex(
   827                         evSObject->productionModelData.incidentParticleSCM,
   831                 if ( var->name == CexmcCFVarIpLAB )
   833                     var->addr = GetLorentzVectorElementAddrByIndex(
   834                         evSObject->productionModelData.incidentParticleLAB,
   838                 if ( var->name == CexmcCFVarNpSCM )
   840                     var->addr = GetLorentzVectorElementAddrByIndex(
   841                         evSObject->productionModelData.nucleusParticleSCM,
   845                 if ( var->name == CexmcCFVarNpLAB )
   847                     var->addr = GetLorentzVectorElementAddrByIndex(
   848                         evSObject->productionModelData.nucleusParticleLAB,
   852                 if ( var->name == CexmcCFVarOpSCM )
   854                     var->addr = GetLorentzVectorElementAddrByIndex(
   855                         evSObject->productionModelData.outputParticleSCM,
   859                 if ( var->name == CexmcCFVarOpLAB )
   861                     var->addr = GetLorentzVectorElementAddrByIndex(
   862                         evSObject->productionModelData.outputParticleLAB,
   866                 if ( var->name == CexmcCFVarNopSCM )
   868                     var->addr = GetLorentzVectorElementAddrByIndex(
   869                         evSObject->productionModelData.nucleusOutputParticleSCM,
   873                 if ( var->name == CexmcCFVarNopLAB )
   875                     var->addr = GetLorentzVectorElementAddrByIndex(
   876                         evSObject->productionModelData.nucleusOutputParticleLAB,
   880                 if ( var->name == CexmcCFVarIpId )
   883                         &evSObject->productionModelData.incidentParticle;
   886                 if ( var->name == CexmcCFVarNpId )
   888                     var->addr = &evSObject->productionModelData.nucleusParticle;
   891                 if ( var->name == CexmcCFVarOpId )
   893                     var->addr = &evSObject->productionModelData.outputParticle;
   896                 if ( var->name == CexmcCFVarNopId )
   899                         &evSObject->productionModelData.nucleusOutputParticle;
   902                 if ( var->name == CexmcCFVarConst_eV )
   904                     var->addr = &constants[ 0 ];
   907                 if ( var->name == CexmcCFVarConst_keV )
   909                     var->addr = &constants[ 1 ];
   912                 if ( var->name == CexmcCFVarConst_MeV )
   914                     var->addr = &constants[ 2 ];
   917                 if ( var->name == CexmcCFVarConst_GeV )
   919                     var->addr = &constants[ 3 ];
   922                 if ( var->name == CexmcCFVarConst_mm )
   924                     var->addr = &constants[ 4 ];
   927                 if ( var->name == CexmcCFVarConst_cm )
   929                     var->addr = &constants[ 5 ];
   932                 if ( var->name == CexmcCFVarConst_m )
   934                     var->addr = &constants[ 6 ];
   943 void  CexmcASTEval::ResetAddressBinding( CexmcAST::Subtree &  ast )
   945     for ( std::vector< CexmcAST::Node >::iterator  k( ast.children.begin() );
   946                                                   k != ast.children.end(); ++k )
   948         CexmcAST::Subtree *  subtree( boost::get< CexmcAST::Subtree >( &*k ) );
   952             ResetAddressBinding( *subtree );
   956             CexmcAST::Leaf &      leaf( boost::get< CexmcAST::Leaf >( *k ) );
   957             CexmcAST::Variable *  var( boost::get< CexmcAST::Variable >(
   960                 var->addr = ( 
const int * ) NULL;
 
const G4int CexmcInvalidTrackId(-1)
 
std::vector< CexmcEnergyDepositCrystalRowCollection > CexmcEnergyDepositCalorimeterCollection