42 fReconstructed.Set(reco);
50 fGenerated.Set(truth);
63 fReconstructed.Reset();
71 fReconstructed.Set(reco);
79 fGenerated.Set(truth);
93 fMaxJetDmesonDistance(0),
97 fCurrentJetInfoReco(0),
98 fCurrentJetInfoTruth(0),
111 fCandidateType(type),
113 fMaxJetDmesonDistance(1),
117 fCurrentJetInfoReco(0),
118 fCurrentJetInfoTruth(0),
131 fCandidateType(source.fCandidateType),
132 fInhibit(source.fInhibit),
133 fMaxJetDmesonDistance(1),
137 fCurrentJetInfoReco(0),
138 fCurrentJetInfoTruth(0),
139 fDataSlotNumber(source.fDataSlotNumber),
140 fRecontructed(source.fRecontructed),
141 fGenerated(source.fGenerated)
159 fInhibit = (fRecontructed == 0 || fGenerated == 0);
160 fName = fRecontructed->GetCandidateName();
177 switch (fCandidateType) {
180 classname =
"AliAnalysisTaskDmesonJetsDetectorResponse::AliD0MatchInfoSummary";
184 classname =
"AliAnalysisTaskDmesonJetsDetectorResponse::AliDStarMatchInfoSummary";
188 TString treeName = TString::Format(
"%s_%s", taskName, GetName());
189 fTree =
new TTree(treeName, treeName);
190 fTree->Branch(
"DmesonJet", classname, &fCurrentDmeson);
192 fCurrentJetInfoTruth =
new AliJetInfoSummary*[fGenerated->GetJetDefinitions().size()];
193 for (
Int_t i = 0; i < fGenerated->GetJetDefinitions().size(); i++) {
194 fCurrentJetInfoTruth[i] =
new AliJetInfoSummary();
195 TString bname = TString::Format(
"%s_truth", fGenerated->GetJetDefinitions()[i].GetName());
196 fTree->Branch(bname,
"AliAnalysisTaskDmesonJets::AliJetInfoSummary", &fCurrentJetInfoTruth[i]);
199 fCurrentJetInfoReco =
new AliJetInfoSummary*[fRecontructed->GetJetDefinitions().size()];
200 for (
Int_t i = 0; i < fRecontructed->GetJetDefinitions().size(); i++) {
201 fCurrentJetInfoReco[i] =
new AliJetInfoSummary();
202 TString bname = TString::Format(
"%s_reco", fRecontructed->GetJetDefinitions()[i].GetName());
203 fTree->Branch(bname,
"AliAnalysisTaskDmesonJets::AliJetInfoSummary", &fCurrentJetInfoReco[i]);
215 fRecontructed->FillQA(applyKinCuts);
216 fGenerated->FillQA(applyKinCuts);
218 std::map<int, AliDmesonJetInfo>& recoDmesons = fRecontructed->GetDmesons();
219 std::map<int, AliDmesonJetInfo>& truthDmesons = fGenerated->GetDmesons();
222 for (
auto& dmeson_reco : recoDmesons) {
224 fCurrentDmeson->Reset();
225 for (
UInt_t ij = 0; ij < fRecontructed->GetJetDefinitions().size(); ij++) {
226 fCurrentJetInfoReco[ij]->Reset();
228 for (
UInt_t ij = 0; ij < fGenerated->GetJetDefinitions().size(); ij++) {
229 fCurrentJetInfoTruth[ij]->Reset();
233 fCurrentDmeson->SetReconstructed(dmeson_reco.second);
235 Int_t accRecJets = 0;
236 Int_t accGenJets = 0;
239 for (
UInt_t ij = 0; ij < fRecontructed->GetJetDefinitions().size(); ij++) {
240 AliJetInfo* jet = dmeson_reco.second.GetJet(fRecontructed->GetJetDefinitions()[ij].GetName());
242 if (applyKinCuts && !fRecontructed->GetJetDefinitions()[ij].IsJetInAcceptance(*jet))
continue;
243 fCurrentJetInfoReco[ij]->Set(dmeson_reco.second, fRecontructed->GetJetDefinitions()[ij].GetName());
248 if (dmeson_reco.second.fMCLabel >= 0) {
249 std::map<int, AliDmesonJetInfo>::iterator it = truthDmesons.find(dmeson_reco.second.fMCLabel);
250 if (it != truthDmesons.end()) {
251 std::pair<const int, AliDmesonJetInfo>& dmeson_truth = (*it);
253 dmeson_truth.second.fReconstructed = kTRUE;
255 fCurrentDmeson->SetGenerated((*it).second);
258 for (
UInt_t ij = 0; ij < fGenerated->GetJetDefinitions().size(); ij++) {
259 AliJetInfo* jet = dmeson_truth.second.GetJet(fGenerated->GetJetDefinitions()[ij].GetName());
261 if (!applyKinCuts || fGenerated->GetJetDefinitions()[ij].IsJetInAcceptance(*jet)) accGenJets++;
262 fCurrentJetInfoTruth[ij]->Set(dmeson_truth.second, fGenerated->GetJetDefinitions()[ij].GetName());
268 if (accRecJets > 0 || accGenJets > 0) fTree->Fill();
272 for (
UInt_t ij = 0; ij < fRecontructed->GetJetDefinitions().size(); ij++) fCurrentJetInfoReco[ij]->Reset();
273 for (
UInt_t ij = 0; ij < fGenerated->GetJetDefinitions().size(); ij++) fCurrentJetInfoTruth[ij]->Reset();
276 for (
auto& dmeson_truth : truthDmesons) {
278 fCurrentDmeson->Reset();
280 if (dmeson_truth.second.fReconstructed)
continue;
282 fCurrentDmeson->SetGenerated(dmeson_truth.second);
284 Int_t accRecJets = 0;
285 Int_t accGenJets = 0;
288 for (
UInt_t ij = 0; ij < fGenerated->GetJetDefinitions().size(); ij++) {
289 fCurrentJetInfoTruth[ij]->Reset();
290 AliJetInfo* jet = dmeson_truth.second.GetJet(fGenerated->GetJetDefinitions()[ij].GetName());
292 if (applyKinCuts && !fGenerated->GetJetDefinitions()[ij].IsJetInAcceptance(*jet))
continue;
293 fCurrentJetInfoTruth[ij]->Set(dmeson_truth.second, fGenerated->GetJetDefinitions()[ij].GetName());
298 if (findNoDMesonRecoJets) {
299 for (
UInt_t ij = 0; ij < fRecontructed->GetJetDefinitions().size(); ij++) {
301 fCurrentJetInfoReco[ij]->Reset();
304 if (!jet.first)
continue;
306 fCurrentJetInfoReco[ij]->Set(*(jet.first));
307 fCurrentJetInfoReco[ij]->fR = jet.second;
313 if (accRecJets > 0 || accGenJets > 0) fTree->Fill();
339 fFindRecoJetsForLostDMesons(kFALSE),
348 ::Info(
"UserCreateOutputObjects",
"CreateOutputObjects of task %s", GetName());
353 if (param.IsInhibit())
continue;
356 std::map<ECandidateType_t, ResponseEngine>::iterator it =
fResponseEngines.find(param.GetCandidateType());
359 it = (
fResponseEngines.insert(std::pair<const ECandidateType_t, ResponseEngine>(param.GetCandidateType(),
ResponseEngine(param.GetCandidateType())))).first;
362 if (param.GetMCMode() ==
kMCTruth) {
363 (*it).second.SetGeneratedAnalysisEngine(¶m);
366 (*it).second.SetReconstructedAnalysisEngine(¶m);
373 if (!resp.second.CheckInit())
continue;
375 resp.second.BuildTree(GetName());
377 resp.second.AssignDataSlot(treeSlot+2);
382 AliError(Form(
"Number of data output slots %d not sufficient. Tree of response engine %s will not be posted!",
fNOutputTrees, resp.second.GetName()));
409 if (resp.second.IsInhibit())
continue;
426 AliWarning(
"This class only provides a tree output.");
virtual void SetGenerated(const AliDmesonJetInfo &truth)
std::list< AnalysisEngine > fAnalysisEngines
Array of analysis parameters.
AliDmesonInfoSummary fGenerated
Generated D meson.
Int_t PostDataFromResponseEngine(const ResponseEngine &eng)
Analysis task for D meson jets.
Lightweight class that encapsulates matching between reconstructed and generated D0 mesons...
Analysis task used to build a detector response for D meson jets.
AliD0InfoSummary fReconstructed
Reconstructed D meson.
std::map< ECandidateType_t, ResponseEngine > fResponseEngines
! Response engines
virtual void SetReconstructed(const AliDmesonJetInfo &reco)
Analysis engine to produce detector response matrix in the D meson jet analysis.
virtual void UserCreateOutputObjects()
Creates the output containers.
virtual void Reset()
Reset the object.
virtual void UserCreateOutputObjects()
Creates the output containers.
TTree * BuildTree(const char *taskName)
AliAnalysisTaskDmesonJetsDetectorResponse()
This is the default constructor, used for ROOT I/O purposes.
Lightweight class that encapsulates matching between reconstructed and generated D mesons...
Bool_t fFindRecoJetsForLostDMesons
If switched on, looks for reconstructed jets even when the D meson was lost.
std::pair< AliJetInfo *, Double_t > jet_distance_pair
Bool_t FillTree(Bool_t applyKinCuts, Bool_t findNoDMesonRecoJets)
virtual void SetReconstructed(const AliDmesonJetInfo &reco)
ResponseEngine()
Default constructor, for ROOT I/O.
Lightweight class that encapsulates matching between reconstructed and generated D* mesons...
virtual void SetOutputTypeInternal(EOutputType_t b)
ResponseEngine & operator=(const ResponseEngine &source)
Int_t GetDataSlotNumber() const
Class that encapsulates jets.
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
Bool_t fApplyKinematicCuts
Apply jet kinematic cuts.
virtual void Reset()
Reset the object.
EOutputType_t fOutputType
Output type: none, TTree or THnSparse.
Int_t fNOutputTrees
Maximum number of output trees.
virtual Bool_t FillHistograms()
void RunAnalysis()
Run the requested analysis for the current event.
virtual void SetGenerated(const AliDmesonJetInfo &truth)