1 /**************************************************************************
2 * Copyright(c) 1998-2006, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 /////////////////////////////////////////////////////////////
20 // class used to extract and store info of MC particles
22 // Author: X-M. Zhang, zhang@clermont.in2p3.fr
23 // zhangxm@iopp.ccnu.edu.cn
24 /////////////////////////////////////////////////////////////
26 #include "AliMuonInfoStoreMC.h"
27 #include "AliDimuInfoStoreRD.h"
28 #include "AliDimuInfoStoreMC.h"
30 ClassImp(AliDimuInfoStoreMC)
32 const TString AliDimuInfoStoreMC::fgkStdBranchName("DimuMC");
33 const Int_t AliDimuInfoStoreMC::fgkSourcesN = 6;
35 //-----------------------------------------------------------------------------
36 AliDimuInfoStoreMC::AliDimuInfoStoreMC() :
43 // default constructor
47 //-----------------------------------------------------------------------------
48 AliDimuInfoStoreMC::AliDimuInfoStoreMC(AliMuonInfoStoreMC* const trk0, AliMuonInfoStoreMC* const trk1, UInt_t selMask, Bool_t full) :
55 // default constructor
60 fLorentzP = trk0->LorentzP() + trk1->LorentzP();
61 AliDimuInfoStoreRD::FillDimuInfo();
62 if (fIsFull) this->FindDimuonSourceFull();
63 else this->FindDimuonSourceFast();
66 //-----------------------------------------------------------------------------
67 AliDimuInfoStoreMC::AliDimuInfoStoreMC(const AliDimuInfoStoreMC &src) :
68 AliDimuInfoStoreRD(src),
70 fLorentzP(src.fLorentzP),
78 //-----------------------------------------------------------------------------
79 AliDimuInfoStoreMC& AliDimuInfoStoreMC::operator=(const AliDimuInfoStoreMC &src)
82 // assignment constructor
84 if(&src==this) return *this;
86 fIsFull = src.fIsFull;
87 fLorentzP = src.fLorentzP;
88 fSource = src.fSource;
94 //-----------------------------------------------------------------------------
95 AliDimuInfoStoreMC::~AliDimuInfoStoreMC()
102 //-----------------------------------------------------------------------------
103 void AliDimuInfoStoreMC::FindDimuonSourceFast()
105 // find corr relation of two particles (fast for p-p)
107 AliMuonInfoStoreMC *trk0 = (AliMuonInfoStoreMC*)fMuonRef[0].GetObject();
108 Int_t src0 = trk0->Source();
109 if (src0<0 || src0==4 || src0==3) {
113 AliMuonInfoStoreMC *trk1 = (AliMuonInfoStoreMC*)fMuonRef[1].GetObject();
114 Int_t src1 = trk1->Source();
115 if (src1<0 || src1==4 || src1==3) {
119 // Drell-Yan is expected very small at LHC, we ingore it
120 Int_t np0 = trk0->ParentsN() - 1;
124 Int_t np1 = trk1->ParentsN() - 1;
129 if (trk0->IsMotherAResonance(np0) &&
130 trk1->IsMotherAResonance(np1) &&
131 trk0->ParentIndex(np0)==trk1->ParentIndex(np1)) {
135 if (src0==0 && src1==0) {
136 if ((trk0->ParentIndex(0))==(trk1->ParentIndex(0)))
143 if (src0==1 && src1==1) {
144 if ((trk0->ParentIndex(0))==(trk1->ParentIndex(0)))