ROOT logo
#ifndef ALIAODCASCADE_H
#define ALIAODCASCADE_H

/* Copyright(c) 2004-2005, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

//-------------------------------------------------------------------------
//     Implementation of the Analysis Oriented Data (AOD) Xi vertex class
//     Origin: A.Maire, IReS, antonin.maire@ires.in2p3.fr 
//             G.Van Buren, BNL,  gene@bnl.gov      (original STAR MuDsts)
//
//     Purpose: Having physics observables available for Xis
//-------------------------------------------------------------------------


#include "AliAODv0.h"

class AliAODTrack;
class AliAODVertex;

class AliAODcascade : public AliAODv0 {

public:
  AliAODcascade();
  
  AliAODcascade(const AliAODcascade& rSource);
  
  AliAODcascade( AliAODVertex* rAODVertexXi,  // No "const" param, constructor "TRef(const TObject*)" doesn't exist.
                      Int_t         rChargeXi,
		      Double_t      rDcaXiDaughters,
		      Double_t      rDcaXiToPrimVertex,
		      Double_t      rDcaBachToPrimVertex,
		const Double_t*     rMomBach,
		
		 AliAODVertex* rAODVertexV0,  // No "const" param, see above.
		      Double_t      rDcaV0Daughters,    
		      Double_t      rDcaV0ToPrimVertex, 
		const Double_t*     rMomPos,            
		const Double_t*     rMomNeg,
		      Double_t*     rDcaDaughterToPrimVertex ); // const? -> Need agreement at AliAODRecoDecay level

  		
  AliAODcascade( AliAODVertex* rAODVertexXi,  // No "const" param, see above.
                      Int_t         rChargeXi,
		      Double_t      rDcaXiDaughters,
		      Double_t      rDcaXiToPrimVertex,
		      Double_t      rDcaBachToPrimVertex,
		const Double_t*     rMomBach,
		const AliAODv0&     rAODv0 );
		
		
		
  virtual ~AliAODcascade();

  AliAODcascade& operator=(const AliAODcascade& rSource);
  
  void  Fill(AliAODVertex* rAODVertexXi,  // No "const" param, see above.
                      Int_t     rChargeXi,
		      Double_t  rDcaXiDaughters,
		      Double_t  rDcaXiToPrimVertex,
		      Double_t  rDcaBachToPrimVertex,
		const Double_t* rMomBach,
			
		AliAODVertex*   rAODVertexV0, // No "const" param, see above.
		      Double_t  rDcaV0Daughters,
		      Double_t  rDcaV0ToPrimVertex,
		const Double_t* rMomPos,
		const Double_t* rMomNeg,
		      Double_t* rDcaDaughterToPrimVertex ); // const? -> Need agreement at AliAODRecoDecay level
  
//   void  Fill(   AliAODVertex*   rAODVertexXi, 
//                       Int_t     rChargeXi,
// 		      Double_t  rDcaXiDaughters,
// 		      Double_t  rDcaXiToPrimVertex,
// 		      Double_t  rDcaBachToPrimVertex,
// 		const Double_t* rMomBach,
// 		const AliAODv0& rAODv0  );          // -> To be implemented ...       
		      
		      
  void  ResetXi();                                       
  void  PrintXi(const Double_t& rPrimVtxX, 
                const Double_t& rPrimVtxY, 
                const Double_t& rPrimVtxZ) const; 

// ----
  Int_t    ChargeXi()                const;
  Int_t	   GetBachID()               const;
  Int_t    GetLabel()                const {return -1;}
  
  AliAODVertex* GetDecayVertexXi()   const; 
  Double_t DecayVertexXiX()          const;
  Double_t DecayVertexXiY()          const;
  Double_t DecayVertexXiZ()          const;
  Double_t Chi2Xi()                  const;
    
  Double_t DcaBachToPrimVertex() const;
  Double_t DcaXiDaughters()          const;
  Double_t DcaXiToPrimVertex()       const;
  Double_t DcaXiToPrimVertex(const Double_t& rPrimVtxX, // hopefully, temporary method ...
                             const Double_t& rPrimVtxY, 
                             const Double_t& rPrimVtxZ) const;
  Double_t CosPointingAngleXi(const Double_t& rPrimVtxX, 
                              const Double_t& rPrimVtxY, 
                              const Double_t& rPrimVtxZ) const;  
  
  Double_t DecayLengthV0()           const;
  Double_t DecayLengthXi(const Double_t& rPrimVtxX, 
                         const Double_t& rPrimVtxY, 
                         const Double_t& rPrimVtxZ) const;
                        
  Double_t MomBachX()       const;
  Double_t MomBachY()       const;
  Double_t MomBachZ()       const;
  
  Double_t MomXiX()         const;
  Double_t MomXiY()         const;
  Double_t MomXiZ()         const;

// ---- 
  Double_t Ptot2Bach()      const;
  Double_t Ptot2Xi()        const;
  Double_t Pt2Xi()          const;
  Double_t MomBachAlongXi() const;
  Double_t MomV0AlongXi()   const;
  Double_t AlphaXi()        const;
  Double_t PtArmXi()        const;
  Double_t EBachPion()      const;
  Double_t EBachKaon()      const;
  Double_t EXi()            const;
  Double_t EOmega()         const;
  Double_t MassXi()         const;
  Double_t MassOmega()      const;
  Double_t RapXi()          const;
  Double_t RapOmega()       const;

protected:

  TRef          fDecayVertexXi;           // ref to decay vertex of the cascade (Xi vertex)
  Short_t       fChargeXi;                // charge of Xi
    
  Double32_t    fDcaXiDaughters;          // dca between Xi daughters
  Double32_t    fDcaXiToPrimVertex;       // dca of Xi to primary vertex 
  Double32_t    fDcaBachToPrimVertex; // dca of bachelor to primary vertex 
  
  Double32_t    fMomBachX;            // momemtum of bachelor along X
  Double32_t    fMomBachY;            // momemtum of bachelor along Y
  Double32_t    fMomBachZ;            // momemtum of bachelor along Z
  
  ClassDef(AliAODcascade,1)   
};

//-----------------------------------------------------------

inline Int_t    AliAODcascade::ChargeXi()   const     {return fChargeXi; }

inline AliAODVertex* AliAODcascade::GetDecayVertexXi() const { return  (AliAODVertex*)fDecayVertexXi.GetObject(); }
inline Double_t AliAODcascade::DecayVertexXiX() const {return GetDecayVertexXi()->GetX(); }
inline Double_t AliAODcascade::DecayVertexXiY() const {return GetDecayVertexXi()->GetY(); }
inline Double_t AliAODcascade::DecayVertexXiZ() const {return GetDecayVertexXi()->GetZ(); }

inline Double_t AliAODcascade::Chi2Xi()         const {return GetDecayVertexXi()->GetChi2(); }

inline Double_t AliAODcascade::DcaBachToPrimVertex() const {return fDcaBachToPrimVertex;}
inline Double_t AliAODcascade::DcaXiDaughters()          const {return fDcaXiDaughters;}
inline Double_t AliAODcascade::DcaXiToPrimVertex()       const {return fDcaXiToPrimVertex;}

inline Double_t AliAODcascade::DecayLengthV0() const {
    return ::sqrt(::pow(DecayVertexV0X() - DecayVertexXiX(),2) +
		  ::pow(DecayVertexV0Y() - DecayVertexXiY(),2) +
		  ::pow(DecayVertexV0Z() - DecayVertexXiZ(),2));
}

inline Double_t AliAODcascade::DecayLengthXi(const Double_t& rPrimVtxX, 
                                             const Double_t& rPrimVtxY, 
                                             const Double_t& rPrimVtxZ) const {
  return ::sqrt(::pow(DecayVertexXiX() - rPrimVtxX,2) +
		::pow(DecayVertexXiY() - rPrimVtxY,2) +
		::pow(DecayVertexXiZ() - rPrimVtxZ,2));
}

inline Double_t AliAODcascade::MomBachX() const {return fMomBachX;}
inline Double_t AliAODcascade::MomBachY() const {return fMomBachY;}
inline Double_t AliAODcascade::MomBachZ() const {return fMomBachZ;}

inline Double_t AliAODcascade::MomXiX() const {return MomV0X()+fMomBachX;}
inline Double_t AliAODcascade::MomXiY() const {return MomV0Y()+fMomBachY;}
inline Double_t AliAODcascade::MomXiZ() const {return MomV0Z()+fMomBachZ;}

inline Double_t AliAODcascade::Ptot2Bach() const {
  return (::pow(fMomBachX,2) + ::pow(fMomBachY,2) + ::pow(fMomBachZ,2) );
}
inline Double_t AliAODcascade::Ptot2Xi() const {return ( Pt2Xi() + ::pow(MomXiZ(),2) );}
inline Double_t AliAODcascade::Pt2Xi() const {
  return (::pow(MomXiX(),2) + ::pow(MomXiY(),2) );
}

inline Double_t AliAODcascade::MomBachAlongXi() const {
  Double_t rPtot2Xi = Ptot2Xi();
  if (rPtot2Xi)
    return (MomBachX()*MomXiX() +
	    MomBachY()*MomXiY() +
	    MomBachZ()*MomXiZ()) / ::sqrt(rPtot2Xi);
  else return 0.;
}

inline Double_t AliAODcascade::MomV0AlongXi() const {
  Double_t rPtot2Xi = Ptot2Xi();
  if (rPtot2Xi)
    return (MomV0X()*MomXiX() +
	    MomV0Y()*MomXiY() +
	    MomV0Z()*MomXiZ()) / ::sqrt(rPtot2Xi);
  return 0.;
}

inline Double_t AliAODcascade::AlphaXi() const {
  Double_t rMomV0AlongXi   = MomV0AlongXi();
  Double_t rMomBachAlongXi = MomBachAlongXi();

  return (((Float_t) ChargeXi()) * (rMomBachAlongXi - rMomV0AlongXi)/
                                   (rMomBachAlongXi + rMomV0AlongXi));
}

inline Double_t AliAODcascade::PtArmXi() const {
  return ::sqrt(Ptot2Bach()-MomBachAlongXi()*MomBachAlongXi());
}

inline Double_t AliAODcascade::MassXi() const {
  return ::sqrt(::pow(ELambda()+EBachPion(),2)-Ptot2Xi());
}

inline Double_t AliAODcascade::MassOmega() const {
  return ::sqrt(::pow(ELambda()+EBachKaon(),2)-Ptot2Xi());
}

inline Double_t AliAODcascade::RapXi() const {
  Double_t exi = EXi();
  Double_t rMomXiZ = MomXiZ();
  return 0.5*::log((exi+rMomXiZ)/(exi-rMomXiZ));
}

inline Double_t AliAODcascade::RapOmega() const {
  Double_t eom = EOmega();
  Double_t rMomXiZ = MomXiZ();
  return 0.5*::log((eom+rMomXiZ)/(eom-rMomXiZ));
}

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