When columns ID >19 , AddNtupleRow gets failed!

When columns ID >19 , AddNtupleRow gets failed!

My src/RunAction.cc is defined based on example B5, and the biggest columns like these.

      // 位置探测器2
      analysisManager->CreateNtupleIColumn("worldPos_LD_2_DigCal_Hits");  // column Id = 18
      analysisManager                                   // column Id = 19
        ->CreateNtupleDColumn("worldPos_LD_2_DigCal_Hits"); 
      analysisManager                                   // column Id = 20
        ->CreateNtupleDColumn("worldPos_LD_2_DigCal_Hits"); 
      analysisManager                                   // column Id = 21
        ->CreateNtupleDColumn("worldPos_LD_2_DigCal_Hits"); 

while in src/B5EventAction.cc, get the information from the detectors, but get the error like this:

-------- WWWW ------- G4Exception-START -------- WWWW -------
*** G4Exception : Analysis_W022
      issued by : G4RootPNtupleManager::AddNtupleRow()
       ntupleId 0adding row has failed.
*** This is just a warning message. ***
-------- WWWW -------- G4Exception-END --------- WWWW -------

Gods of the Geant4 , help me plz!!! :sob:

Only when columns more than 19 get this error. In Python read the .root file get empty.

When I delete the column > 19, everything get well and could get the data in Python.

Hello,

There is no limitation for the number of columns in an ntuple; I added 18 columns in the B5 ntuple in RunAction.cc:
analysisManager->CreateNtupleDColumn("Time3"); // column Id = 8; etc.

and their filling in EventAction.cc:
analysisManager->FillNtupleDColumn(8, hit->GetTime());

and the example runs ok.

Check, if you sett the columnId’s in Fill call correctly.
Increasing G4AnalysisManager verbosity level and checking the output can help.

Best regards,

Thank you!
You must be the goddess of Geant4.

I try simply added 20 columns to example B5 like

analysisManager->CreateNtupleDColumn("Time3"); // column Id = 8; etc.

it could work without error information.

But when I added the columns like these

    analysisManager->CreateNtupleIColumn("Dc11Hits"); // column Id = 6
    analysisManager->CreateNtupleDColumn("abs_Dc11_x"); // column Id = 7
    analysisManager->CreateNtupleDColumn("abs_Dc11_y"); // column Id = 8
    analysisManager->CreateNtupleDColumn("abs_Dc11_z"); // column Id = 9

    analysisManager->CreateNtupleIColumn("Dc12Hits"); // column Id = 10
    analysisManager->CreateNtupleDColumn("abs_Dc12_x"); // column Id = 11
    analysisManager->CreateNtupleDColumn("abs_Dc12_y"); // column Id = 12
    analysisManager->CreateNtupleDColumn("abs_Dc12_z"); // column Id = 13

    // eventID
    analysisManager->CreateNtupleIColumn("EventID"); // column Id = 14

    // Input
    analysisManager->CreateNtupleDColumn("InputEnergy"); // column Id = 15

    // Primary
    analysisManager->CreateNtupleDColumn("Primary_pos_x"); // column Id = 16
    analysisManager->CreateNtupleDColumn("Primary_pos_y"); // column Id = 17
    analysisManager->CreateNtupleDColumn("Primary_pos_z"); // column Id = 18
    // =========================================================

    // // IdealEnergy
    analysisManager->CreateNtupleDColumn("IdealECEnergy"); // column Id = 19

    // 2022-4-18
    // Detector 1
    analysisManager->CreateNtupleIColumn("worldPos_LD_1_DigCal_Hits"); // column Id = 20
    analysisManager                                                    // column Id = 21
        ->CreateNtupleDColumn("worldPos_LD_1_DigCal_x");
    analysisManager // column Id = 22
        ->CreateNtupleDColumn("worldPos_LD_1_DigCal_y");
    analysisManager // column Id = 23
        ->CreateNtupleDColumn("worldPos_LD_1_DigCal_z");

    // Detector 2
    analysisManager->CreateNtupleIColumn("worldPos_LD_2_DigCal_Hits"); // column Id = 24
    analysisManager                                                    // column Id = 25
        ->CreateNtupleDColumn("worldPos_LD_2_DigCal_Hits");

and rerun the B5, get the error like these:

WHY… :nauseated_face:
Does it because too long name for the column???

Help me plz,
best wishes to the goddess of Geant4

And the addrow error happen again

Goddess of Geant4: :pray: :pray: :pray:

When I change the column name like these:

    analysisManager->CreateNtuple("B5", "Hits");
    analysisManager->CreateNtupleIColumn("Dc1Hits");  // column Id = 0
    analysisManager->CreateNtupleIColumn("Dc2Hits");  // column Id = 1
    analysisManager->CreateNtupleDColumn("ECEnergy"); // column Id = 2
    analysisManager->CreateNtupleDColumn("HCEnergy"); // column Id = 3
    analysisManager->CreateNtupleDColumn("Time1");    // column Id = 4
    analysisManager->CreateNtupleDColumn("Time2");    // column Id = 5

    analysisManager->CreateNtupleIColumn("Dc11Hits");  // column Id = 6
    analysisManager->CreateNtupleDColumn("Dc11_x"); // column Id = 7
    analysisManager->CreateNtupleDColumn("Dc11_y"); // column Id = 8
    analysisManager->CreateNtupleDColumn("Dc11_z"); // column Id = 9

    analysisManager->CreateNtupleIColumn("Dc12Hits");  // column Id = 10
    analysisManager->CreateNtupleDColumn("Dc12_x"); // column Id = 11
    analysisManager->CreateNtupleDColumn("Dc12_y"); // column Id = 12
    analysisManager->CreateNtupleDColumn("Dc12_z"); // column Id = 13

    analysisManager->CreateNtupleIColumn("EventID"); // column Id = 14
    analysisManager->CreateNtupleDColumn("In.En."); // column Id = 15

    analysisManager->CreateNtupleDColumn("Pri.x"); // column Id = 16
    analysisManager->CreateNtupleDColumn("Pri.y"); // column Id = 17
    analysisManager->CreateNtupleDColumn("Pri.z"); // column Id = 18
    // 理想能量
    analysisManager->CreateNtupleDColumn("Ide.Out.En."); // column Id = 19
    // 位置探测器部分 2022年4月20日
    // 位置探测器1 击中数、绝对坐标
    analysisManager->CreateNtupleIColumn("LD1_Hits"); // column Id = 20
    analysisManager->CreateNtupleDColumn("LD1_x"); // column Id = 21
    analysisManager->CreateNtupleDColumn("LD1_y"); // column Id = 22
    analysisManager->CreateNtupleDColumn("LD1_z"); // column Id = 23
    // 位置探测器2
    analysisManager->CreateNtupleIColumn("LD2_Hits"); // column Id = 24
    analysisManager->CreateNtupleDColumn("LD2_x"); // column Id = 25

    analysisManager // column Id = 26
        ->CreateNtupleDColumn("ECEnergyVector", fEventAction->GetEmCalEdep());
    analysisManager // column Id = 27
        ->CreateNtupleDColumn("HCEnergyVector", fEventAction->GetHadCalEdep());
    analysisManager->FinishNtuple();

Done like this is just by make the column name shorter and shorter.

And rerun the B5, now it goes well…

So the column name couldn’t too long???
But how long is the limited?

Thank goddess!

The whole solution post and analysis in Geant4 prompts adding row has failed solution

In your first sample, you define the columns 24 and 25 with the same name; you should get in the output the warning:

... create file : B5ntuple.root - done
tools::wroot::ntuple : create_column(worldPos_LD_2_DigCal_Hits) failed.

This problem then induced further errors. When I changed the last name as “worldPos_LD_2_DigCal_Hits_x” the example runs ok.

Actually I change the column name and got another warning like this:

Oh well , I now got the idea that the same column name couldn’t work…
I use the short name in my code now, now it could work temporary.

Thank goddess of Geant4!

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.