47 fCreationProcess(-999),
48 fIsCorrelated(kFALSE),
49 fCauseOfCorrelation (-1),
62 fCreationProcess(dimuCopy.fCreationProcess),
63 fIsCorrelated(dimuCopy.fIsCorrelated),
64 fCauseOfCorrelation (dimuCopy.fCauseOfCorrelation),
65 fIsFeedDown(dimuCopy.fIsFeedDown)
88 if (
this == &dimuCopy)
return *
this;
91 TObject::operator=(dimuCopy);
114 Int_t minP = TMath::Min(nparents0, nparents1);
115 for (Int_t i = 0 ; i < minP; i++) {
129 if (index==0)
return &
fMu0;
130 else if (index==1)
return &
fMu1;
131 else{
printf (
"Index can be either 0 or 1\n");
return 0;}
141 else {
printf (
"Index must be only 0 or 1\n");
return -999; }
156 for (Int_t imoth1 = npar1-1; imoth1>=0; imoth1--) {
158 for (Int_t imoth2 = npar2-1; imoth2>=0; imoth2--) {
160 if(lineMo1 == lineMo2) {
185 for (Int_t imoth1 = 0; imoth1 < 4; imoth1++) {
187 for (Int_t imoth2 = 0; imoth2 < 4; imoth2++) {
193 if(flavPar1 == flavPar2){
208 Int_t line6or7[2] = {-1, -1};
209 Int_t flavourLine6or7[2] = {-1, -1};
212 for (Int_t imoth1 = 3; imoth1>=0; imoth1--) {
215 if(lineMo1 == 6 || lineMo1 == 7){
216 line6or7[0] = imoth1;
217 flavourLine6or7[0] = flavour1;
219 for (Int_t imoth2 = 3; imoth2>=0; imoth2--) {
222 if(lineMo2 == 6 || lineMo2 == 7){
223 line6or7[1] = imoth2;
224 flavourLine6or7[1] = flavour2;
226 if((line6or7[0] > 0 && line6or7[1] > 0) &&
227 (flavourLine6or7[0] == 4 || flavourLine6or7[0] == 5) &&
228 (flavourLine6or7[1] == 4 || flavourLine6or7[1] == 5) &&
229 (flavPar1 == flavPar2)){
239 Int_t line2or3[2] = {-1, -1};
240 Int_t flavourLine2or3[2] = {-1, -1};
241 for (Int_t imoth1 = 3; imoth1>=0; imoth1--) {
244 if(lineMo1 == 2 || lineMo1 == 3){
245 line2or3[0] = imoth1;
246 flavourLine2or3[0] = flavour1;
248 for (Int_t imoth2 = 3; imoth2>=0; imoth2--) {
251 if(lineMo2 == 2 || lineMo2 == 3){
252 line2or3[1] = imoth2;
253 flavourLine2or3[1] = flavour2;
255 if(((line6or7[0] > 0 && (flavourLine6or7[0] == 4 || flavourLine6or7[0] == 5)) &&
256 (line2or3[1] > 0 && (flavourLine2or3[1] == 21 || flavourLine2or3[1] < 10))) ||
257 ((line6or7[1] > 0 && (flavourLine6or7[1] == 4 || flavourLine6or7[1] == 5)) &&
258 (line2or3[0] > 0 && (flavourLine2or3[0] == 21 || flavourLine2or3[0] < 10)))){
262 if(flavPar1 == flavPar2){
274 if(line1 == line2 && (line1 == 2 || line1 == 3)){
281 if(flavPar1 == flavPar2){
298 if(line1 == line2 && (line1 == 2 || line1 == 3)){
305 if(flavPar1 == flavPar2){
322 if(line1 == line2 && (line1 == 6 || line1 == 7)){
329 if(flavPar1 == flavPar2){
358 TString options(opt);
361 if(options.Contains(
"H") || options.Contains(
"A")){
366 printf(
"========= History =======================\n");
371 printf(
"=========================================\n");
373 if(options.Contains(
"F") || options.Contains(
"A")){
374 printf(
"the flags set for this muon pair are:\n");
375 printf(
"=====================================\n");
386 printf(
"gluon splitting");
389 printf(
"flavour excitation");
392 printf(
"both muons come from same fragmented mother");
395 if(this->
GetMuon(0)->GetOscillation() || this->
GetMuon(1)->GetOscillation())
396 printf(
"... where oscillation occured\n");
399 printf(
" (no oscillation)\n");
406 printf(
"=====================================\n");
408 if(options.Contains(
"K") || options.Contains(
"A")){
410 TLorentzVector momRec = this->
GetPRec();
411 TLorentzVector momGen = this->
GetPGen();
413 printf(
"primary Vertex: Vx = %1.3f, Vy = %1.3f, Vz = %1.3f\n", vtx[0], vtx[1], vtx[2]);
414 printf(
"Generated: Px = %1.3f, Py = %1.3f, Pz = %1.3f\n", momGen.Px(), momGen.Py(), momGen.Pz());
415 printf(
"Reconstructed: Px = %1.3f, Py = %1.3f, Pz = %1.3f\n", momRec.Px(), momRec.Py(), momRec.Pz());
417 printf(
"Rec. variables: mass %1.3f, pT %1.3f, pseudo-rapidity %1.3f, openingAngle %1.3f (%1.3f degree), theta %1.3f (%1.3f degree), phi %1.3f (%1.3f degree)\n",
418 momRec.M(), momRec.Pt(), momRec.Eta(),
420 momRec.Theta(), 180./TMath::Pi() * momRec.Theta(),
421 momRec.Phi(), 180./TMath::Pi() * momRec.Phi());
430 TVector3 pRecMu03 = pRecMu0.Vect();
431 TVector3 pRecMu13 = pRecMu1.Vect();
432 Double_t scalar = pRecMu03.Dot(pRecMu13);
433 Double_t modMu0 = pRecMu03.Mag();
434 Double_t modMu1 = pRecMu13.Mag();
435 Double_t theta = (TMath::ACos(scalar/(modMu0*modMu1)))*(180./TMath::Pi());
443 Bool_t fromSameLine = kFALSE;
445 mu1->IsParentPionOrKaon() &&
447 ) fromSameLine = kTRUE;
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
AliMUONTrackLight * GetMuon(Int_t index)
Int_t GetQuarkPythiaLine(Int_t index=0) const
Return line of Pythia output for string [0] and quarks [1,2], sometimes proton [3].
Int_t GetNParents() const
Return acually filled no. of fragmented parents.
TLorentzVector GetPRec() const
Return reconstructed 4-momentum.
Int_t fIsFeedDown
tells if the process is from feeddown
Bool_t IsDiquark(Int_t pdg) const
void SetCorrelated(Bool_t answer)
Set the info ablout creation process.
virtual ~AliMUONPairLight()
Bool_t IsOpenBeauty()
returns kTRUE if the creation process of the pair was "open beauty" (kFALSE... otherwise) ...
Bool_t IsOneTrackNotAMuon()
returns kTRUE if at least one of the reconstructed tracks is not a muon (kFALSE... otherwise)
Bool_t IsOpenCharm()
returns kTRUE if the creation process of the pair was "open charm" (kFALSE... otherwise) ...
Double_t GetOpeningAngle()
Int_t GetQuarkPDGCode(Int_t index=0) const
Return pdg of the string [0], quarks/gluons [1,2], sometimes proton [3].
AliMUONTrackLight fMu0
first muon
Int_t GetMuonMotherPDG(Int_t imuon, Int_t mother=0)
void SetCauseOfCorrelation(Int_t pdg)
Set the pdg of common mother.
Double_t * GetVertex()
Return primary vertex position from the ITS.
AliMUONPairLight & operator=(const AliMUONPairLight &)
Bool_t IsMotherAResonance(Int_t index=0) const
void SetProcess()
Checks if muons are correlated and assigns.
Bool_t IsParentPionOrKaon(Int_t idParent=0)
virtual void PrintInfo(const Option_t *opt)
Int_t GetCauseOfCorrelation() const
Return the pdg of common mother.
Int_t fCreationProcess
0: pair creation, 1: gluon splitting, 2: flavour excitation, 3: same fragmented mother, -1: resonance
TLorentzVector GetPRec()
returns a TLorentzVector containing the reconstructed kinematics of the pair
Int_t fCauseOfCorrelation
pdg of common mother
Int_t GetParentFlavour(Int_t idParent=0) const
virtual void PrintInfo(const Option_t *opt)
void SetFeedDown(Int_t answer)
Set the info if the process is from feeddown.
Compact information for the muon generated tracks.
Compact information for the generated muon pairs.
TLorentzVector GetPGen()
returns a TLorentzVector containing the generated kinematics of the pair
AliMUONTrackLight fMu1
second muon
Int_t GetCharge()
returns the charge of the created pair
virtual void SetMuons(const AliMUONTrackLight &mu0, const AliMUONTrackLight &mu1)
Int_t GetParentPDGCode(Int_t index=0) const
Return hadronised parents and grandparents.
ClassImp(AliMUONPairLight) AliMUONPairLight
Bool_t IsDimuonFromCorrPiK()
Int_t GetParentPythiaLine(Int_t index=0) const
Return line of Pythia output for hadronised parents & grandparents.
Bool_t fIsCorrelated
tells if the two muons are of correlated origin