Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:49:36

0001 #pragma once
0002 /**
0003 sfactor.h
0004 ===========
0005 
0006 Note that the remainder and force triangulated volumes are not included in the sfactors 
0007 
0008 ::
0009 
0010     stree::desc_factor
0011     sfactor::Desc num_factor 9
0012     sfactor index   0 freq  25600 sensors      0 subtree      5 sub [1af760275cafe9ea890bfa01b0acb1d1]
0013     sfactor index   1 freq  12615 sensors      0 subtree      7 sub [0077df3ebff8aeec56c8a21518e3c887]
0014     sfactor index   2 freq   4997 sensors      0 subtree      7 sub [1e410142530e54d54db8aaaccb63b834]
0015     sfactor index   3 freq   2400 sensors      0 subtree      6 sub [019f9eccb5cf94cce23ff7501c807475]
0016     sfactor index   4 freq    590 sensors      0 subtree      1 sub [c051c1bb98b71ccb15b0cf9c67d143ee]
0017     sfactor index   5 freq    590 sensors      0 subtree      1 sub [5e01938acb3e0df0543697fc023bffb1]
0018     sfactor index   6 freq    590 sensors      0 subtree      1 sub [cdc824bf721df654130ed7447fb878ac]
0019     sfactor index   7 freq    590 sensors      0 subtree      1 sub [3fd85f9ee7ca8882c8caa747d0eef0b3]
0020     sfactor index   8 freq    504 sensors      0 subtree    130 sub [7d9a644fae10bdc1899c0765077e7a33]
0021 
0022 
0023     In [6]: st.f.factor[:,:4]
0024     Out[6]: 
0025     array([[    0, 25600, 25600,     5],
0026            [    1, 12615, 12615,    11],
0027            [    2,  4997,  4997,    14],
0028            [    3,  2400,  2400,     6],
0029            [    4,   590,     0,     1],
0030            [    5,   590,     0,     1],
0031            [    6,   590,     0,     1],
0032            [    7,   590,     0,     1],
0033            [    8,   504,   504,   130]], dtype=int32)
0034 
0035              index  freq  sensors  subtree
0036                           ???
0037 
0038 
0039     In [13]: f.factor[:,4:].copy().view("|S32")
0040     Out[13]: 
0041     array([[b'1af760275cafe9ea890bfa01b0acb1d1'],
0042            [b'0077df3ebff8aeec56c8a21518e3c887'],
0043            [b'1e410142530e54d54db8aaaccb63b834'],
0044            [b'019f9eccb5cf94cce23ff7501c807475'],
0045            [b'c051c1bb98b71ccb15b0cf9c67d143ee'],
0046            [b'5e01938acb3e0df0543697fc023bffb1'],
0047            [b'cdc824bf721df654130ed7447fb878ac'],
0048            [b'3fd85f9ee7ca8882c8caa747d0eef0b3'],
0049            [b'7d9a644fae10bdc1899c0765077e7a33']], dtype='|S32')
0050 
0051 **/
0052 
0053 #include <vector>
0054 #include <cassert>
0055 #include <cstring>
0056 #include <string>
0057 #include <sstream>
0058 #include <iomanip>
0059 
0060 
0061 struct sfactor
0062 {
0063     static constexpr const int NV = 5+8 ; // sub is equivalent to 8 integer fields 
0064     int      index ; 
0065     int      freq ; 
0066     int      sensors ; 
0067     int      subtree ;      // counts of nodes in subtree (numPrim in CSGFoundry lingo)
0068     int      olvid ; 
0069     char     sub[32] ;  // (equivalent to 8 integer fields) caution : no null termination (size of 8 ints)
0070 
0071     void        set_sub(const char* s); 
0072     std::string get_sub() const ; 
0073 
0074     std::string desc() const ; 
0075     static std::string Desc(const std::vector<sfactor>& factor); 
0076 
0077 }; 
0078 
0079 inline void sfactor::set_sub(const char* s)
0080 {
0081     assert( strlen(s) == 32 ); 
0082     memcpy( &sub, s, 32 ); 
0083 }
0084 
0085 inline std::string sfactor::get_sub() const 
0086 {
0087     std::string sub_(sub, 32);  // needed as sub array is not null terminated 
0088     return sub_ ; 
0089 }
0090 
0091 inline std::string sfactor::desc() const 
0092 {
0093     std::stringstream ss ; 
0094     ss << "sfactor"
0095        << " index " << std::setw(3) << index
0096        << " freq " << std::setw(6) << freq
0097        << " sensors " << std::setw(6) << sensors
0098        << " subtree " << std::setw(6) << subtree 
0099        << " olvid " << std::setw(6) << olvid 
0100        << " freq*subtree " << std::setw(7) <<  freq*subtree
0101        << " sub [" << std::setw(32) << get_sub()  << "]" 
0102        ;   
0103     std::string s = ss.str(); 
0104     return s ; 
0105 }
0106 
0107 inline std::string sfactor::Desc(const std::vector<sfactor>& factor) // static
0108 {
0109     int num_factor = factor.size(); 
0110     std::stringstream ss ; 
0111     ss << "sfactor::Desc num_factor " << num_factor << std::endl ; 
0112     int tot_freq_subtree = 0 ; 
0113     for(int i=0 ; i < num_factor ; i++) 
0114     {   
0115         const sfactor& sf = factor[i]; 
0116         tot_freq_subtree += sf.freq*sf.subtree ; 
0117         ss << sf.desc() << std::endl ; 
0118     }
0119     ss << " tot_freq_subtree " << std::setw(7) << tot_freq_subtree << std::endl ; 
0120     std::string s = ss.str(); 
0121     return s ; 
0122 }
0123