Retrieve TVectorD from a root file

Hello experts,
I stored TVectorD in a root file.But I cannot receive it from the root file.
Could someone help me who’s the error?




void mxtrix_multiplication(){
    
    const int nx=3,nQ2=4,ntmin_t=10,n_weight=6;
    
    
    TFile *hFile2=TFile::Open("testing_1.root");
    hFile2->ls();
    
    char MatrixName_1[64];
    
    TVectorD Data_array_vec(6);
    
    for(int ixB=0; ixB<nx; ixB++){
            for(int iQ2=0; iQ2<nQ2; iQ2++){
            for(int itmin_t=0 ; itmin_t < ntmin_t; itmin_t++){
            
                for(int i_DATA=0; i_DATA < n_weight; i_DATA++){
                    
                    sprintf(MatrixName_1,"Data_array_xB%03d_iQ2%03d_tmin%03d",ixB,iQ2,itmin_t);
                    
                    
                    
            Data_array_vec[i_DATA]= hFile2->Get(MatrixName_1);
                    
                    
                    
                }
                
                Data_array_vec.Print();
                
            }
            }
    }
    
    
}



error: assigning to 'double' from incompatible type 'TObject *'
            Data_array_vec[i_DATA]= hFile2->Get(MatrixName_1);
                                    ~~~~~~~~^~~~~~~~~~~~~~~~~

Unfortunately I cannot upload my root file since it’s 5MB.

May be:

            Data_array_vec[i_DATA] = (TVectorD*) hFile2->Get(MatrixName_1);

assuming Data_array_vec is an array of TVectorD .

Thanks for the suggestion.But answer is No.

 error: assigning to 'double' from incompatible type 'TVectorD *' (aka 'TVectorT<double> *')
            Data_array_vec[i_DATA]= (TVectorD*)hFile2->Get(MatrixName_1);

TVectorD Data_array_vec[n_weight];

(Data_array_vec[i_DATA]).ResizeTo(6) = *((TVectorD*)(hFile2->Get(MatrixName_1)));

Thank You Wile_E_Coyote.
But I cannot print this.I got following error.

error: member reference base type 'TVectorD [6]' is not a structure or union
                Data_array_vec.Print();

Then I print inside the “i_Data” loop as Data_array_vec[i_Data].Print();
But I got wrong vectors.

Error in <TVectorT::operator=(const TVectorT &)>: vectors not compatible

Vector (0) is as follows

 |        1  |

Error in <TVectorT::operator=(const TVectorT &)>: vectors not compatible

Vector (0) is as follows

 |        1  |

Thank You.It’s working now.

Thank You @Wile_E_Coyote.This is helpful.
Do I need to follow the same method when retrieve TMatrixD matrixGEN(6,6);?
(for future reference)
I need to multiply Tmatrix(6 x6) by TVectorD.

matrixGEN(6,6) * Data_array_vex(6)

TMatrixD matrixGEN[n_weight];

(matrixGEN[i_DATA]).ResizeTo(6, 6) = *((TMatrixD*)(hFile2->Get(MatrixName_1)));

Actually, I think you’d better use pointers.

TVectorD *Data_array_vec[n_weight];
TMatrixD *matrixGEN[n_weight];
hFile2->GetObject("saved_vector_name", Data_array_vec[i_DATA]);
hFile2->GetObject("saved_matrix_name", matrixGEN[i_DATA]);

(*matrixGEN[i_DATA]) * (*Data_array_vex[i_DATA]) /*multiplication */

delete Data_array_vec[i_DATA]; delete matrixGEN[i_DATA]; /* when no longer needed */