void test_xmoments(TString inFile = "emc.root")
{
    gROOT->LoadMacro("$VMCWORKDIR/gconfig/basiclibs.C");
    basiclibs();

    gSystem->Load("libGeoBase");
    gSystem->Load("libParBase");
    gSystem->Load("libBase");
    gSystem->Load("libTrkBase");
    gSystem->Load("libField");
    gSystem->Load("libGen");
    gSystem->Load("libGeom");
    gSystem->Load("libPassive");
    gSystem->Load("libPndData");
    gSystem->Load("libEmc");

    TFile file(inFile);
    TTree *tree = (TTree *)file.Get("cbmsim");

    PndEmcMapper::Instance(1);  // set to mapper type used
    
    TClonesArray *clusters = new TClonesArray("PndEmcCluster");
    tree->SetBranchAddress("EmcCluster", &clusters);

    for (Long64_t i = 0; i < tree->GetEntriesFast(); ++i)
    {
        tree->GetEntry(i);
        cout << endl << "----- Event #" << i << endl;

        PndEmcCluster *cluster = (PndEmcCluster *)clusters->At(0);

        cout << "Xmoments used directly - " << cluster->Xmoments().AbsZernikeMoment(2, 0) << endl;

        PndEmcXClMoments xmoments(*cluster);
        cout << "Separate Xmoments - " << xmoments.AbsZernikeMoment(2, 0) << endl;
    }

    tree->ResetBranchAddresses();
    delete clusters;
}
