Skip to content

Wrong MCParticle link inside LCIOStorer #64

@dudarboh

Description

@dudarboh

Taking first element from the getRelatedToObjects() is not ok and wrong here:

mcp = dynamic_cast<lcio::MCParticle*>(navs[n]->getRelatedToObjects(pfo)[0]); // TODO [0] OK?

MCParticles from getRelatedToObjects are not sorted in any way.

Here is an example of a random event, where I print MCParticle relations for each PFO explicitly with corresponding weights:

Code:

void Tester::processEvent(LCEvent* event){
    LCCollection* pfos = event->getCollection("PandoraPFOs");
    LCRelationNavigator nav( event->getCollection("RecoMCTruthLink") );

    for(int i=0; i < pfos->getNumberOfElements(); ++i){
        ReconstructedParticle* pfo = static_cast <ReconstructedParticle*> ( pfos->getElementAt(i) );
        const std::vector<LCObject*>& mcs = nav.getRelatedToObjects(pfo);
        const std::vector<float>& weights = nav.getRelatedToWeights(pfo);
        
        std::cout<<"For pfo # "<<i+1<<":"<<std::endl;
        for(size_t j=0; j < mcs.size(); ++j){
            std::cout<<"MC # "<<j+1<<": track weight: "<< (int(weights[j])%10000)/1000.<<" calo weight: "<<(int(weights[j])/10000)/1000.<<std::endl;
        }
    }
}

Output:

[ VERBOSE "MyTester"] For pfo # 1:
[ VERBOSE "MyTester"] MC # 1: track weight: 1 calo weight: 0
[ VERBOSE "MyTester"] For pfo # 2:
[ VERBOSE "MyTester"] MC # 1: track weight: 1 calo weight: 0.994
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.001
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.005
[ VERBOSE "MyTester"] For pfo # 3:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.01
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.203
[ VERBOSE "MyTester"] MC # 3: track weight: 1 calo weight: 0.784
[ VERBOSE "MyTester"] MC # 4: track weight: 0 calo weight: 0.003
[ VERBOSE "MyTester"] For pfo # 4:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.034
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.003
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.027
[ VERBOSE "MyTester"] MC # 4: track weight: 1 calo weight: 0.935
[ VERBOSE "MyTester"] For pfo # 5:
[ VERBOSE "MyTester"] MC # 1: track weight: 1 calo weight: 0
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 1
[ VERBOSE "MyTester"] For pfo # 6:
[ VERBOSE "MyTester"] MC # 1: track weight: 1 calo weight: 0.259
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.657
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.083
[ VERBOSE "MyTester"] For pfo # 7:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.158
[ VERBOSE "MyTester"] MC # 2: track weight: 1 calo weight: 0.781
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.061
[ VERBOSE "MyTester"] For pfo # 8:
[ VERBOSE "MyTester"] MC # 1: track weight: 1 calo weight: 1
[ VERBOSE "MyTester"] For pfo # 9:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.046
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.171
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.014
[ VERBOSE "MyTester"] MC # 4: track weight: 0 calo weight: 0.003
[ VERBOSE "MyTester"] MC # 5: track weight: 0 calo weight: 0.403
[ VERBOSE "MyTester"] MC # 6: track weight: 1 calo weight: 0.206
[ VERBOSE "MyTester"] MC # 7: track weight: 0 calo weight: 0.041
[ VERBOSE "MyTester"] MC # 8: track weight: 0 calo weight: 0.117
[ VERBOSE "MyTester"] For pfo # 10:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.072
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.025
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.199
[ VERBOSE "MyTester"] MC # 4: track weight: 1 calo weight: 0.704
[ VERBOSE "MyTester"] For pfo # 11:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.002
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.025
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.002
[ VERBOSE "MyTester"] MC # 4: track weight: 1 calo weight: 0.7
[ VERBOSE "MyTester"] MC # 5: track weight: 0 calo weight: 0.005
[ VERBOSE "MyTester"] MC # 6: track weight: 0 calo weight: 0.068
[ VERBOSE "MyTester"] MC # 7: track weight: 0 calo weight: 0.198
[ VERBOSE "MyTester"] For pfo # 12:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.021
[ VERBOSE "MyTester"] MC # 2: track weight: 1 calo weight: 0
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.979
[ VERBOSE "MyTester"] For pfo # 13:
[ VERBOSE "MyTester"] MC # 1: track weight: 1 calo weight: 1
[ VERBOSE "MyTester"] For pfo # 14:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.101
[ VERBOSE "MyTester"] MC # 2: track weight: 1 calo weight: 0.745
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.129
[ VERBOSE "MyTester"] MC # 4: track weight: 0 calo weight: 0.013
[ VERBOSE "MyTester"] MC # 5: track weight: 0 calo weight: 0.011
[ VERBOSE "MyTester"] For pfo # 15:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.958
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.027
[ VERBOSE "MyTester"] MC # 3: track weight: 1 calo weight: 0
[ VERBOSE "MyTester"] MC # 4: track weight: 0 calo weight: 0.015
[ VERBOSE "MyTester"] For pfo # 16:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.974
[ VERBOSE "MyTester"] For pfo # 17:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.019
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.945
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.036
[ VERBOSE "MyTester"] For pfo # 18:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.491
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.509
[ VERBOSE "MyTester"] For pfo # 19:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.954
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.001
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.044
[ VERBOSE "MyTester"] For pfo # 20:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.209
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.779
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.012
[ VERBOSE "MyTester"] For pfo # 21:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 1
[ VERBOSE "MyTester"] For pfo # 22:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 1
[ VERBOSE "MyTester"] For pfo # 23:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 1
[ VERBOSE "MyTester"] For pfo # 24:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.99
[ VERBOSE "MyTester"] For pfo # 25:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.99
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.01
[ VERBOSE "MyTester"] For pfo # 26:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.972
[ VERBOSE "MyTester"] For pfo # 27:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 1
[ VERBOSE "MyTester"] For pfo # 28:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.069
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.897
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.025
[ VERBOSE "MyTester"] For pfo # 29:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.385
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.004
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.022
[ VERBOSE "MyTester"] MC # 4: track weight: 0 calo weight: 0.555
[ VERBOSE "MyTester"] MC # 5: track weight: 0 calo weight: 0.035
[ VERBOSE "MyTester"] For pfo # 30:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.261
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.607
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.012
[ VERBOSE "MyTester"] MC # 4: track weight: 0 calo weight: 0.051
[ VERBOSE "MyTester"] MC # 5: track weight: 0 calo weight: 0.053
[ VERBOSE "MyTester"] MC # 6: track weight: 0 calo weight: 0.016
[ VERBOSE "MyTester"] For pfo # 31:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.003
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.035
[ VERBOSE "MyTester"] MC # 4: track weight: 0 calo weight: 0.006
[ VERBOSE "MyTester"] MC # 5: track weight: 0 calo weight: 0.954
[ VERBOSE "MyTester"] MC # 6: track weight: 0 calo weight: 0.001
[ VERBOSE "MyTester"] For pfo # 32:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 1
[ VERBOSE "MyTester"] For pfo # 33:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.002
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.518
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.3
[ VERBOSE "MyTester"] MC # 4: track weight: 0 calo weight: 0.114
[ VERBOSE "MyTester"] MC # 5: track weight: 0 calo weight: 0.038
[ VERBOSE "MyTester"] MC # 6: track weight: 0 calo weight: 0.005
[ VERBOSE "MyTester"] MC # 7: track weight: 0 calo weight: 0.004
[ VERBOSE "MyTester"] MC # 8: track weight: 0 calo weight: 0.015
[ VERBOSE "MyTester"] MC # 9: track weight: 0 calo weight: 0.003
[ VERBOSE "MyTester"] For pfo # 34:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.002
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.993
[ VERBOSE "MyTester"] For pfo # 35:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.86
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.013
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.127
[ VERBOSE "MyTester"] For pfo # 36:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.011
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.165
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.01
[ VERBOSE "MyTester"] MC # 4: track weight: 0 calo weight: 0
[ VERBOSE "MyTester"] MC # 5: track weight: 0 calo weight: 0.814
[ VERBOSE "MyTester"] For pfo # 37:
[ VERBOSE "MyTester"] MC # 1: track weight: 0 calo weight: 0.07
[ VERBOSE "MyTester"] MC # 2: track weight: 0 calo weight: 0.904
[ VERBOSE "MyTester"] MC # 3: track weight: 0 calo weight: 0.005
[ VERBOSE "MyTester"] MC # 4: track weight: 0 calo weight: 0.022

You can see that for ( more than half ! ) pfos: 3, 4, 7, 9, 10, 11, 12, 14, 17, 18, 20, 27, 28, 29, 30, 31, 33, 34, 36, 37
it leads to the linking to the wrong MCParticle, which does not have maximum contribution either track or calorimeter -wise.

I think the best behaviour would be to choose a MCParticle with a highest track weight.
If the maximum track weight is 0, then get the highest calorimeter weight.

Weights encoding "documentation" here:

https://github.com/iLCSoft/MarlinReco/blob/541d61d96f6cb923042900f9284ccf0067d8fb10/Analysis/RecoMCTruthLink/include/RecoMCTruthLinker.h#L32-L50

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions