Ok, so you added topPtReweight to the 'weight' variable. This is not right because we need to apply top pt reweighting to both reco and truth distributions. If you look at line [222 here](https://github.com/jjacob/NTupleProduction/blob/a368ff45218a5228abacd568fd151f8de3754525/plugins/UnfoldingAnalyser.cc#L222), the only weight applied to the truth distribution is the PU weight.

Like it was discussed before, it would be better to have two different weight variables here:
```c++
double truthWeight(puWeight * topPtReweight);
double recoWeight(puWeight * btagWeight * topPtReweight);
```
This way you can use them accordingly later on in the code, and it won't be confusing.