ROOT logo
#include <AliFMDESDRevertexer.h>
#include <AliFMDGeometry.h>
#include <AliESDFMD.h>
#include <TMath.h>
#include <AliLog.h>

ClassImp(AliFMDESDRevertexer)
#if 0 // for emacs 
;
#endif

//____________________________________________________________________
AliFMDESDRevertexer::AliFMDESDRevertexer()
{
  AliFMDGeometry* geom = AliFMDGeometry::Instance();
  geom->Init();
  geom->InitTransformations();
}

//____________________________________________________________________
Bool_t
AliFMDESDRevertexer::Revertex(AliESDFMD* fmdEsd, Double_t vz) const
{
  // Recalculate the various quantities based on updated 
  // primary vertex position. 
  // 
  // Parameters: 
  //    fmdEsd    FMD ESD object 
  //    vz        New vertex location (along the z-axis)
  //
  // Return:
  //    true on success, false if there was an error during the 
  //    recalculations.   Please inspect log output for details. 
  // 
  if (!fmdEsd) return kFALSE;
  
  Bool_t ret = kTRUE;
  for (UShort_t det = 1; det <= 3; det++) { 
    UShort_t nrng = (det == 1 ? 1 : 2);
    for (UShort_t ir = 0; ir < nrng; ir++) {
      Char_t   rng  = (ir == 0 ? 'I' : 'O');
      UShort_t nsec = (ir == 0 ?  20 :  40);
      UShort_t nstr = (ir == 0 ? 512 : 256);
      for (UShort_t str = 0; str < nstr; str++) { 
	Double_t phi, r, theta;
	Double_t eta      = AliESDFMD::kInvalidEta;
	Double_t oldEta   = fmdEsd->Eta(det, rng, 0, str);
	// if (oldEta == AliESDFMD::kInvalidEta) continue;

	Double_t oldTheta = Eta2Theta(oldEta);
	Bool_t   ret1     = PhysicalCoordinates(det, rng, 0, str, vz, 
						eta, phi, r, theta);
	fmdEsd->SetEta(det, rng, 0, str, eta);

	if (!ret1) {
	  // If the was an error, then there's no reason to go on with
	  // this strip-ring.  Note, that the eta is correctly set to
	  // AliESDFMD::kInvalidMult. 
	  AliWarning(Form("Failed to calculate eta, phi for "
			  "FMD%d%c[%02d,%03d] with v_z=%9.4f",
			  det, rng, 0, str, vz));
	  ret = kFALSE;
	  continue;
	}

	Double_t corr = TMath::Abs(TMath::Cos(theta));
	if (fmdEsd->IsAngleCorrected()) {
	  if (oldEta != AliESDFMD::kInvalidMult)
	    corr /= TMath::Abs(TMath::Cos(oldTheta));
	  for (UShort_t sec = 0; sec < nsec; sec++) { 
	    Double_t mult = fmdEsd->Multiplicity(det, rng, sec, str);
	    if (mult == AliESDFMD::kInvalidMult) continue;
	    fmdEsd->SetMultiplicity(det, rng, sec, str, corr * mult);
	  }
	}
      }
    }
  }

  return ret;
}

//____________________________________________________________________
Double_t
AliFMDESDRevertexer::Eta2Theta(Double_t eta) const
{
  if (eta == AliESDFMD::kInvalidEta) return 0;
  return 2 * TMath::ATan(TMath::Exp(-eta));
}


//____________________________________________________________________
Bool_t
AliFMDESDRevertexer::PhysicalCoordinates(UShort_t  det, 
					 Char_t    rng, 
					 UShort_t  sec, 
					 UShort_t  str,
					 Double_t  vz,
					 Double_t& eta, 
					 Double_t& phi,
					 Double_t& r,
					 Double_t& theta) const
{
  // Get the eta and phi of a digit 
  // 
  // Get geometry. 
  AliFMDGeometry* geom = AliFMDGeometry::Instance();
  Double_t x=0, y=0, z=0;
  geom->Detector2XYZ(det, rng, sec, str, x, y, z);

  return AliFMDGeometry::XYZ2REtaPhiTheta(x, y, z-vz, r, eta, phi, theta);
}


 AliFMDESDRevertexer.cxx:1
 AliFMDESDRevertexer.cxx:2
 AliFMDESDRevertexer.cxx:3
 AliFMDESDRevertexer.cxx:4
 AliFMDESDRevertexer.cxx:5
 AliFMDESDRevertexer.cxx:6
 AliFMDESDRevertexer.cxx:7
 AliFMDESDRevertexer.cxx:8
 AliFMDESDRevertexer.cxx:9
 AliFMDESDRevertexer.cxx:10
 AliFMDESDRevertexer.cxx:11
 AliFMDESDRevertexer.cxx:12
 AliFMDESDRevertexer.cxx:13
 AliFMDESDRevertexer.cxx:14
 AliFMDESDRevertexer.cxx:15
 AliFMDESDRevertexer.cxx:16
 AliFMDESDRevertexer.cxx:17
 AliFMDESDRevertexer.cxx:18
 AliFMDESDRevertexer.cxx:19
 AliFMDESDRevertexer.cxx:20
 AliFMDESDRevertexer.cxx:21
 AliFMDESDRevertexer.cxx:22
 AliFMDESDRevertexer.cxx:23
 AliFMDESDRevertexer.cxx:24
 AliFMDESDRevertexer.cxx:25
 AliFMDESDRevertexer.cxx:26
 AliFMDESDRevertexer.cxx:27
 AliFMDESDRevertexer.cxx:28
 AliFMDESDRevertexer.cxx:29
 AliFMDESDRevertexer.cxx:30
 AliFMDESDRevertexer.cxx:31
 AliFMDESDRevertexer.cxx:32
 AliFMDESDRevertexer.cxx:33
 AliFMDESDRevertexer.cxx:34
 AliFMDESDRevertexer.cxx:35
 AliFMDESDRevertexer.cxx:36
 AliFMDESDRevertexer.cxx:37
 AliFMDESDRevertexer.cxx:38
 AliFMDESDRevertexer.cxx:39
 AliFMDESDRevertexer.cxx:40
 AliFMDESDRevertexer.cxx:41
 AliFMDESDRevertexer.cxx:42
 AliFMDESDRevertexer.cxx:43
 AliFMDESDRevertexer.cxx:44
 AliFMDESDRevertexer.cxx:45
 AliFMDESDRevertexer.cxx:46
 AliFMDESDRevertexer.cxx:47
 AliFMDESDRevertexer.cxx:48
 AliFMDESDRevertexer.cxx:49
 AliFMDESDRevertexer.cxx:50
 AliFMDESDRevertexer.cxx:51
 AliFMDESDRevertexer.cxx:52
 AliFMDESDRevertexer.cxx:53
 AliFMDESDRevertexer.cxx:54
 AliFMDESDRevertexer.cxx:55
 AliFMDESDRevertexer.cxx:56
 AliFMDESDRevertexer.cxx:57
 AliFMDESDRevertexer.cxx:58
 AliFMDESDRevertexer.cxx:59
 AliFMDESDRevertexer.cxx:60
 AliFMDESDRevertexer.cxx:61
 AliFMDESDRevertexer.cxx:62
 AliFMDESDRevertexer.cxx:63
 AliFMDESDRevertexer.cxx:64
 AliFMDESDRevertexer.cxx:65
 AliFMDESDRevertexer.cxx:66
 AliFMDESDRevertexer.cxx:67
 AliFMDESDRevertexer.cxx:68
 AliFMDESDRevertexer.cxx:69
 AliFMDESDRevertexer.cxx:70
 AliFMDESDRevertexer.cxx:71
 AliFMDESDRevertexer.cxx:72
 AliFMDESDRevertexer.cxx:73
 AliFMDESDRevertexer.cxx:74
 AliFMDESDRevertexer.cxx:75
 AliFMDESDRevertexer.cxx:76
 AliFMDESDRevertexer.cxx:77
 AliFMDESDRevertexer.cxx:78
 AliFMDESDRevertexer.cxx:79
 AliFMDESDRevertexer.cxx:80
 AliFMDESDRevertexer.cxx:81
 AliFMDESDRevertexer.cxx:82
 AliFMDESDRevertexer.cxx:83
 AliFMDESDRevertexer.cxx:84
 AliFMDESDRevertexer.cxx:85
 AliFMDESDRevertexer.cxx:86
 AliFMDESDRevertexer.cxx:87
 AliFMDESDRevertexer.cxx:88
 AliFMDESDRevertexer.cxx:89
 AliFMDESDRevertexer.cxx:90
 AliFMDESDRevertexer.cxx:91
 AliFMDESDRevertexer.cxx:92
 AliFMDESDRevertexer.cxx:93
 AliFMDESDRevertexer.cxx:94
 AliFMDESDRevertexer.cxx:95
 AliFMDESDRevertexer.cxx:96
 AliFMDESDRevertexer.cxx:97
 AliFMDESDRevertexer.cxx:98
 AliFMDESDRevertexer.cxx:99
 AliFMDESDRevertexer.cxx:100
 AliFMDESDRevertexer.cxx:101
 AliFMDESDRevertexer.cxx:102
 AliFMDESDRevertexer.cxx:103
 AliFMDESDRevertexer.cxx:104
 AliFMDESDRevertexer.cxx:105
 AliFMDESDRevertexer.cxx:106
 AliFMDESDRevertexer.cxx:107
 AliFMDESDRevertexer.cxx:108
 AliFMDESDRevertexer.cxx:109
 AliFMDESDRevertexer.cxx:110
 AliFMDESDRevertexer.cxx:111
 AliFMDESDRevertexer.cxx:112
 AliFMDESDRevertexer.cxx:113
 AliFMDESDRevertexer.cxx:114