| 24 | |
| 25 | mprod::mprod ( Array<mpdf*> mFacs, bool overlap) : mpdf ( RV(), RV() ), n ( mFacs.length() ), epdfs ( n ), mpdfs ( mFacs ), rvinds ( n ), rvcinrv ( n ), rvcinds ( n ) { |
| 26 | int i; |
| 27 | bool rvaddok; |
| 28 | // Create rv |
| 29 | for ( i = 0;i < n;i++ ) { |
| 30 | rvaddok=rv.add ( mpdfs ( i )->_rv() ); //add rv to common rvs. |
| 31 | // If rvaddok==false, mpdfs overlap => assert error. |
| 32 | it_assert_debug(rvaddok||overlap,"mprod::mprod() input mpdfs overlap in rv!"); |
| 33 | epdfs ( i ) = & ( mpdfs ( i )->_epdf() ); // add pointer to epdf |
| 34 | }; |
| 35 | // Create rvc |
| 36 | for ( i = 0;i < n;i++ ) { |
| 37 | rvc.add ( mpdfs ( i )->_rvc().subt ( rv ) ); //add rv to common rvs. |
| 38 | }; |
| 39 | |
| 40 | independent = true; |
| 41 | //test rvc of mpdfs and fill rvinds |
| 42 | for ( i = 0;i < n;i++ ) { |
| 43 | // find ith rv in common rv |
| 44 | rvinds ( i ) = mpdfs ( i )->_rv().dataind ( rv ); |
| 45 | // find ith rvc in common rv |
| 46 | rvcinrv ( i ) = mpdfs ( i )->_rvc().dataind ( rv ); |
| 47 | // find ith rvc in common rv |
| 48 | rvcinds ( i ) = mpdfs ( i )->_rvc().dataind ( rvc ); |
| 49 | // |
| 50 | if ( rvcinds ( i ).length() >0 ) {independent = false;} |
| 51 | if ( rvcinds ( i ).length() >0 ) {independent = false;} |
| 52 | } |
| 53 | }; |