Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wrong MCParticle link inside LCIOStorer #64

Open
dudarboh opened this issue Aug 8, 2022 · 1 comment
Open

Wrong MCParticle link inside LCIOStorer #64

dudarboh opened this issue Aug 8, 2022 · 1 comment

Comments

@dudarboh
Copy link

dudarboh commented Aug 8, 2022

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

@suehara
Copy link
Member

suehara commented Oct 13, 2022

Thanks. It's good to fix it. MCParticle is not as a part of production procedure so it is less debuged and also easier to modify without any effect on performance on existing analysis.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants