ROOT logo
#include "AliAODConversionMother.h"
#include "AliKFConversionMother.h"
#include "AliKFParticle.h"


// Author D. Lohner (Daniel.Lohner@cern.ch)

using namespace std;

ClassImp(AliAODConversionMother)

AliAODConversionMother::AliAODConversionMother() :
AliAODConversionParticle(),
    fMCLabel(-1),
    fChi2(-1),
    fOpeningAngle(-1),
    fAlpha(-1),
    fWeight(1),
    fdcaBetweenPhotons(1),
    fdcaZPrimVtx(100),
    fdcaRPrimVtx(100),
    fQuality(0),
    fTrueMeson(0)
   
{
	fLabel[0] = -1;
	fLabel[1] = -1;
	fLabel[2] = 0;
   
   fProductionVtx[0]=0;
   fProductionVtx[1]=0;
   fProductionVtx[2]=0;
  
}

AliAODConversionMother::AliAODConversionMother(AliKFConversionMother *kf):
AliAODConversionParticle(),
fMCLabel(kf->GetMCLabel()),
fChi2(kf->GetChi2()),
fOpeningAngle(kf->GetOpeningAngle()),
fAlpha(kf->GetAlpha()),
fWeight(1),
fdcaBetweenPhotons(100),
fdcaZPrimVtx(100),
fdcaRPrimVtx(100),
fQuality(0),
fTrueMeson(0)
{
    // Set 4momentu
    SetPxPyPzE(kf->GetPx(),kf->GetPy(),kf->GetPz(),kf->GetE());

   fProductionVtx[0]=0;
   fProductionVtx[1]=0;
   fProductionVtx[2]=0;
  
     //Set Decay Photon Labels
    fLabel[0]=kf->GetGammaLabel(0);
    fLabel[1]=kf->GetGammaLabel(1);
    fLabel[2]=0;
}

AliAODConversionMother::AliAODConversionMother(AliAODConversionPhoton *y1,AliAODConversionPhoton *y2):
AliAODConversionParticle(),
fMCLabel(-1),
fChi2(-1),
fOpeningAngle(-1),
fAlpha(-1),
fWeight(1),
fdcaBetweenPhotons(1),
fdcaZPrimVtx(100),
fdcaRPrimVtx(100),
fQuality(0),
fTrueMeson(0)
{
    // Set 4momentum
    SetPxPyPzE(y1->Px()+y2->Px(),y1->Py()+y2->Py(),y1->Pz()+y2->Pz(),y1->E()+y2->E());

    // Calculate Opening Angle
    TVector3 v1(y1->Px(),y1->Py(),y1->Pz());
    TVector3 v2(y2->Px(),y2->Py(),y2->Pz());
    fOpeningAngle=v1.Angle(v2);
    fdcaBetweenPhotons = CalculateDistanceBetweenPhotons(y1,y2,fProductionVtx);
    DetermineMesonQuality(y1,y2);
    // Calculate Alpha
    if((y1->E()+y2->E()) != 0){
		fAlpha=TMath::Abs((y1->E()-y2->E())/(y1->E()+y2->E()));
    }

    // Set Chi2 to the mean chi2 of gammas
 //   fChi2=0.5*(y1->GetChi2perNDF()+y2->GetChi2perNDF());

    //Set Decay Photon Labels
    fLabel[0]=-1;
    fLabel[1]=-1;
    fLabel[2]=0;
}

AliAODConversionMother::AliAODConversionMother(AliAODConversionMother *meson,AliAODConversionPhoton *gamma):
AliAODConversionParticle(),
fMCLabel(-1),
fChi2(-1),
fOpeningAngle(-1),
fAlpha(-1),
fWeight(1),
fdcaBetweenPhotons(1),
fdcaZPrimVtx(100),
fdcaRPrimVtx(100),
fQuality(0),
fTrueMeson(0)
{
    // Set 4momentum
    SetPxPyPzE(meson->Px()+gamma->Px(),meson->Py()+gamma->Py(),meson->Pz()+gamma->Pz(),meson->E()+gamma->E());

    // Calculate Opening Angle
    TVector3 v1(meson->Px(),meson->Py(),meson->Pz());
    TVector3 v2(gamma->Px(),gamma->Py(),gamma->Pz());
    fOpeningAngle=v1.Angle(v2);
     
	fProductionVtx[0]=0;
	fProductionVtx[1]=0;
	fProductionVtx[2]=0;

    // Calculate Alpha
    if((meson->E()+gamma->E()) != 0){
		fAlpha=TMath::Abs((meson->E()-gamma->E())/(meson->E()+gamma->E()));
    }

    // Set Chi2 to the mean chi2 of gammas
	// fChi2=0.5*(y1->GetChi2perNDF()+y2->GetChi2perNDF());

    //Set Decay Photon Labels
    fLabel[0]=-1;
    fLabel[1]=-1;
    fLabel[2]=0;
}


AliAODConversionMother::~AliAODConversionMother() {
    // empty standard destructor
}

TParticle *AliAODConversionMother::GetMCParticle(AliStack *fMCStack){
    if(!fMCStack){AliError("MC Stack not defined");return 0x0;}

    if(fMCLabel>-1){
		return fMCStack->Particle(fMCLabel);
    }
    return 0x0;
}

Bool_t AliAODConversionMother::IsTrueMeson(AliStack *fMCStack,Int_t pdgcode){
    TParticle *part=GetMCParticle(fMCStack);

    if(part){
	// Check if it is a true photon
	if(part->GetPdgCode()==pdgcode){
	    return kTRUE;
	}
    }
    return kFALSE;
}

Float_t AliAODConversionMother::CalculateDistanceBetweenPhotons(AliAODConversionPhoton* y1, AliAODConversionPhoton* y2 , Double_t prodPoint[3]){

   TVector3 a(y1->GetConversionX(),y1->GetConversionY(),y1->GetConversionZ());
   TVector3 b(y1->GetPx(),y1->GetPy(),y1->GetPz());
   TVector3 c(y2->GetConversionX(),y2->GetConversionY(),y2->GetConversionZ());
   TVector3 d(y2->GetPx(),y2->GetPy(),y2->GetPz());
   
   TVector3 n = b.Cross(d);
   TVector3 nn = n.Unit();
   
   Double_t dist = 0;
   if (n.Mag() == 0){
      TVector3 e = a-c;
      if (d.Mag() != 0){
         dist = TMath::Abs((e.Cross(d)).Mag())/TMath::Abs(d.Mag());
      }
      prodPoint[0] = 0;
      prodPoint[1] = 0;
      prodPoint[2] = 0;
   } else {   
      dist = TMath::Abs(n.Dot(c-a))/TMath::Abs(n.Mag());
      Double_t lambda = (b.Dot(d) * (a-c).Dot(d) - d.Dot(d) * (a-c).Dot(b))/(b.Dot(b) * d.Dot(d) - TMath::Power(b.Dot(d),2));
      Double_t mu = ((a-c).Dot(d) * b.Dot(b) - (a-c).Dot(b) * b.Dot(d) )/(b.Dot(b) * d.Dot(d) - TMath::Power(b.Dot(d),2));
      
      TVector3 S1 = a + lambda* b;
      TVector3 S2 = c + mu* d;
      TVector3 Prod = S1 + 0.5*dist*(S2-S1).Unit();
      prodPoint[0] = Prod(0);
      prodPoint[1] = Prod(1);
      prodPoint[2] = Prod(2);
      
   }
   if (dist > 1000) dist = 999.;
   return dist;
}

///________________________________________________________________________
void AliAODConversionMother::CalculateDistanceOfClossetApproachToPrimVtx(const AliVVertex* primVertex){

   Double_t primCo[3] = {primVertex->GetX(),primVertex->GetY(),primVertex->GetZ()};

   Double_t absoluteP = TMath::Sqrt(TMath::Power(Px(),2) + TMath::Power(Py(),2) + TMath::Power(Pz(),2));   
   Double_t p[3] = {Px()/absoluteP,Py()/absoluteP,Pz()/absoluteP};
   Double_t CP[3];
   
   CP[0] =  fProductionVtx[0] - primCo[0];
   CP[1] =  fProductionVtx[1] - primCo[1];
   CP[2] =  fProductionVtx[2] - primCo[2];
   
   Double_t Lambda = - (CP[0]*p[0]+CP[1]*p[1]+CP[2]*p[2])/(p[0]*p[0]+p[1]*p[1]+p[2]*p[2]);
   
   Double_t S[3];
   S[0] = fProductionVtx[0] + p[0]*Lambda;
   S[1] = fProductionVtx[1] + p[1]*Lambda;
   S[2] = fProductionVtx[2] + p[2]*Lambda;
   
   fdcaRPrimVtx = TMath::Sqrt( TMath::Power(primCo[0]-S[0],2) + TMath::Power(primCo[1]-S[1],2));
   fdcaZPrimVtx = primCo[2]-S[2];
   
   
//    cout << "DCA z: " << dca[1] << "\t DCA r: " << dca[0] << "\t DCA 3d: " << TMath::Sqrt(dca[1]*dca[1] + dca[0]*dca[0]) << endl;
   
   
   return;
}

///________________________________________________________________________
void AliAODConversionMother::DetermineMesonQuality(AliAODConversionPhoton* y1, AliAODConversionPhoton* y2){
   UChar_t photonQA1 = y1->GetPhotonQuality();
   UChar_t photonQA2 = y2->GetPhotonQuality();
   
   if (photonQA1 == 0 || photonQA2 == 0){
      fQuality = 0;
      return;
   } 
   if (photonQA1 == 1 && photonQA2 == 1){
      fQuality = 1;
      return;
   }               
   if (photonQA1 == 2 && photonQA2 == 2){
      fQuality = 4;
      return;
   }               
   if (photonQA1 == 3 && photonQA2 == 3){
      fQuality = 6;
      return;
   }         
   if (photonQA1 == 1){
       if (photonQA2 == 2){
        fQuality = 2;  
        return;
       }
       if (photonQA2 == 3){
        fQuality = 3;  
        return;
       }
   }
   if (photonQA2 == 1){
       if (photonQA1 == 2){
        fQuality = 2;  
        return;
       }
       if (photonQA1 == 3){
        fQuality = 3;  
        return;
       }
   }
   if ((photonQA1 == 2 && photonQA2 == 3)|| (photonQA1 == 3 && photonQA2 == 2)){
        fQuality = 5;  
        return;
   }
   
}
 AliAODConversionMother.cxx:1
 AliAODConversionMother.cxx:2
 AliAODConversionMother.cxx:3
 AliAODConversionMother.cxx:4
 AliAODConversionMother.cxx:5
 AliAODConversionMother.cxx:6
 AliAODConversionMother.cxx:7
 AliAODConversionMother.cxx:8
 AliAODConversionMother.cxx:9
 AliAODConversionMother.cxx:10
 AliAODConversionMother.cxx:11
 AliAODConversionMother.cxx:12
 AliAODConversionMother.cxx:13
 AliAODConversionMother.cxx:14
 AliAODConversionMother.cxx:15
 AliAODConversionMother.cxx:16
 AliAODConversionMother.cxx:17
 AliAODConversionMother.cxx:18
 AliAODConversionMother.cxx:19
 AliAODConversionMother.cxx:20
 AliAODConversionMother.cxx:21
 AliAODConversionMother.cxx:22
 AliAODConversionMother.cxx:23
 AliAODConversionMother.cxx:24
 AliAODConversionMother.cxx:25
 AliAODConversionMother.cxx:26
 AliAODConversionMother.cxx:27
 AliAODConversionMother.cxx:28
 AliAODConversionMother.cxx:29
 AliAODConversionMother.cxx:30
 AliAODConversionMother.cxx:31
 AliAODConversionMother.cxx:32
 AliAODConversionMother.cxx:33
 AliAODConversionMother.cxx:34
 AliAODConversionMother.cxx:35
 AliAODConversionMother.cxx:36
 AliAODConversionMother.cxx:37
 AliAODConversionMother.cxx:38
 AliAODConversionMother.cxx:39
 AliAODConversionMother.cxx:40
 AliAODConversionMother.cxx:41
 AliAODConversionMother.cxx:42
 AliAODConversionMother.cxx:43
 AliAODConversionMother.cxx:44
 AliAODConversionMother.cxx:45
 AliAODConversionMother.cxx:46
 AliAODConversionMother.cxx:47
 AliAODConversionMother.cxx:48
 AliAODConversionMother.cxx:49
 AliAODConversionMother.cxx:50
 AliAODConversionMother.cxx:51
 AliAODConversionMother.cxx:52
 AliAODConversionMother.cxx:53
 AliAODConversionMother.cxx:54
 AliAODConversionMother.cxx:55
 AliAODConversionMother.cxx:56
 AliAODConversionMother.cxx:57
 AliAODConversionMother.cxx:58
 AliAODConversionMother.cxx:59
 AliAODConversionMother.cxx:60
 AliAODConversionMother.cxx:61
 AliAODConversionMother.cxx:62
 AliAODConversionMother.cxx:63
 AliAODConversionMother.cxx:64
 AliAODConversionMother.cxx:65
 AliAODConversionMother.cxx:66
 AliAODConversionMother.cxx:67
 AliAODConversionMother.cxx:68
 AliAODConversionMother.cxx:69
 AliAODConversionMother.cxx:70
 AliAODConversionMother.cxx:71
 AliAODConversionMother.cxx:72
 AliAODConversionMother.cxx:73
 AliAODConversionMother.cxx:74
 AliAODConversionMother.cxx:75
 AliAODConversionMother.cxx:76
 AliAODConversionMother.cxx:77
 AliAODConversionMother.cxx:78
 AliAODConversionMother.cxx:79
 AliAODConversionMother.cxx:80
 AliAODConversionMother.cxx:81
 AliAODConversionMother.cxx:82
 AliAODConversionMother.cxx:83
 AliAODConversionMother.cxx:84
 AliAODConversionMother.cxx:85
 AliAODConversionMother.cxx:86
 AliAODConversionMother.cxx:87
 AliAODConversionMother.cxx:88
 AliAODConversionMother.cxx:89
 AliAODConversionMother.cxx:90
 AliAODConversionMother.cxx:91
 AliAODConversionMother.cxx:92
 AliAODConversionMother.cxx:93
 AliAODConversionMother.cxx:94
 AliAODConversionMother.cxx:95
 AliAODConversionMother.cxx:96
 AliAODConversionMother.cxx:97
 AliAODConversionMother.cxx:98
 AliAODConversionMother.cxx:99
 AliAODConversionMother.cxx:100
 AliAODConversionMother.cxx:101
 AliAODConversionMother.cxx:102
 AliAODConversionMother.cxx:103
 AliAODConversionMother.cxx:104
 AliAODConversionMother.cxx:105
 AliAODConversionMother.cxx:106
 AliAODConversionMother.cxx:107
 AliAODConversionMother.cxx:108
 AliAODConversionMother.cxx:109
 AliAODConversionMother.cxx:110
 AliAODConversionMother.cxx:111
 AliAODConversionMother.cxx:112
 AliAODConversionMother.cxx:113
 AliAODConversionMother.cxx:114
 AliAODConversionMother.cxx:115
 AliAODConversionMother.cxx:116
 AliAODConversionMother.cxx:117
 AliAODConversionMother.cxx:118
 AliAODConversionMother.cxx:119
 AliAODConversionMother.cxx:120
 AliAODConversionMother.cxx:121
 AliAODConversionMother.cxx:122
 AliAODConversionMother.cxx:123
 AliAODConversionMother.cxx:124
 AliAODConversionMother.cxx:125
 AliAODConversionMother.cxx:126
 AliAODConversionMother.cxx:127
 AliAODConversionMother.cxx:128
 AliAODConversionMother.cxx:129
 AliAODConversionMother.cxx:130
 AliAODConversionMother.cxx:131
 AliAODConversionMother.cxx:132
 AliAODConversionMother.cxx:133
 AliAODConversionMother.cxx:134
 AliAODConversionMother.cxx:135
 AliAODConversionMother.cxx:136
 AliAODConversionMother.cxx:137
 AliAODConversionMother.cxx:138
 AliAODConversionMother.cxx:139
 AliAODConversionMother.cxx:140
 AliAODConversionMother.cxx:141
 AliAODConversionMother.cxx:142
 AliAODConversionMother.cxx:143
 AliAODConversionMother.cxx:144
 AliAODConversionMother.cxx:145
 AliAODConversionMother.cxx:146
 AliAODConversionMother.cxx:147
 AliAODConversionMother.cxx:148
 AliAODConversionMother.cxx:149
 AliAODConversionMother.cxx:150
 AliAODConversionMother.cxx:151
 AliAODConversionMother.cxx:152
 AliAODConversionMother.cxx:153
 AliAODConversionMother.cxx:154
 AliAODConversionMother.cxx:155
 AliAODConversionMother.cxx:156
 AliAODConversionMother.cxx:157
 AliAODConversionMother.cxx:158
 AliAODConversionMother.cxx:159
 AliAODConversionMother.cxx:160
 AliAODConversionMother.cxx:161
 AliAODConversionMother.cxx:162
 AliAODConversionMother.cxx:163
 AliAODConversionMother.cxx:164
 AliAODConversionMother.cxx:165
 AliAODConversionMother.cxx:166
 AliAODConversionMother.cxx:167
 AliAODConversionMother.cxx:168
 AliAODConversionMother.cxx:169
 AliAODConversionMother.cxx:170
 AliAODConversionMother.cxx:171
 AliAODConversionMother.cxx:172
 AliAODConversionMother.cxx:173
 AliAODConversionMother.cxx:174
 AliAODConversionMother.cxx:175
 AliAODConversionMother.cxx:176
 AliAODConversionMother.cxx:177
 AliAODConversionMother.cxx:178
 AliAODConversionMother.cxx:179
 AliAODConversionMother.cxx:180
 AliAODConversionMother.cxx:181
 AliAODConversionMother.cxx:182
 AliAODConversionMother.cxx:183
 AliAODConversionMother.cxx:184
 AliAODConversionMother.cxx:185
 AliAODConversionMother.cxx:186
 AliAODConversionMother.cxx:187
 AliAODConversionMother.cxx:188
 AliAODConversionMother.cxx:189
 AliAODConversionMother.cxx:190
 AliAODConversionMother.cxx:191
 AliAODConversionMother.cxx:192
 AliAODConversionMother.cxx:193
 AliAODConversionMother.cxx:194
 AliAODConversionMother.cxx:195
 AliAODConversionMother.cxx:196
 AliAODConversionMother.cxx:197
 AliAODConversionMother.cxx:198
 AliAODConversionMother.cxx:199
 AliAODConversionMother.cxx:200
 AliAODConversionMother.cxx:201
 AliAODConversionMother.cxx:202
 AliAODConversionMother.cxx:203
 AliAODConversionMother.cxx:204
 AliAODConversionMother.cxx:205
 AliAODConversionMother.cxx:206
 AliAODConversionMother.cxx:207
 AliAODConversionMother.cxx:208
 AliAODConversionMother.cxx:209
 AliAODConversionMother.cxx:210
 AliAODConversionMother.cxx:211
 AliAODConversionMother.cxx:212
 AliAODConversionMother.cxx:213
 AliAODConversionMother.cxx:214
 AliAODConversionMother.cxx:215
 AliAODConversionMother.cxx:216
 AliAODConversionMother.cxx:217
 AliAODConversionMother.cxx:218
 AliAODConversionMother.cxx:219
 AliAODConversionMother.cxx:220
 AliAODConversionMother.cxx:221
 AliAODConversionMother.cxx:222
 AliAODConversionMother.cxx:223
 AliAODConversionMother.cxx:224
 AliAODConversionMother.cxx:225
 AliAODConversionMother.cxx:226
 AliAODConversionMother.cxx:227
 AliAODConversionMother.cxx:228
 AliAODConversionMother.cxx:229
 AliAODConversionMother.cxx:230
 AliAODConversionMother.cxx:231
 AliAODConversionMother.cxx:232
 AliAODConversionMother.cxx:233
 AliAODConversionMother.cxx:234
 AliAODConversionMother.cxx:235
 AliAODConversionMother.cxx:236
 AliAODConversionMother.cxx:237
 AliAODConversionMother.cxx:238
 AliAODConversionMother.cxx:239
 AliAODConversionMother.cxx:240
 AliAODConversionMother.cxx:241
 AliAODConversionMother.cxx:242
 AliAODConversionMother.cxx:243
 AliAODConversionMother.cxx:244
 AliAODConversionMother.cxx:245
 AliAODConversionMother.cxx:246
 AliAODConversionMother.cxx:247
 AliAODConversionMother.cxx:248
 AliAODConversionMother.cxx:249
 AliAODConversionMother.cxx:250
 AliAODConversionMother.cxx:251
 AliAODConversionMother.cxx:252
 AliAODConversionMother.cxx:253
 AliAODConversionMother.cxx:254
 AliAODConversionMother.cxx:255
 AliAODConversionMother.cxx:256
 AliAODConversionMother.cxx:257
 AliAODConversionMother.cxx:258
 AliAODConversionMother.cxx:259
 AliAODConversionMother.cxx:260
 AliAODConversionMother.cxx:261
 AliAODConversionMother.cxx:262
 AliAODConversionMother.cxx:263
 AliAODConversionMother.cxx:264
 AliAODConversionMother.cxx:265
 AliAODConversionMother.cxx:266
 AliAODConversionMother.cxx:267
 AliAODConversionMother.cxx:268
 AliAODConversionMother.cxx:269
 AliAODConversionMother.cxx:270
 AliAODConversionMother.cxx:271
 AliAODConversionMother.cxx:272
 AliAODConversionMother.cxx:273
 AliAODConversionMother.cxx:274
 AliAODConversionMother.cxx:275