ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

/// \ingroup macros
/// \file MUONSurveyUtil.C
/// \brief Utility macro for survey data to alignment transformation.
///  
/// Macro contains various functions to calculate misalignement parameters
/// from survey data and designed positions of survey targets.
/// Macro also includes a method to get the new AliMUONGeometryTransformer.
/// It is intended to be loaded by chamber specific macros.
/// 
/// \author Javier Castillo

#if !defined(__CINT__) || defined(__MAKECINT__)

#include "AliMUONGeometryTransformer.h"
#include "AliMUONGeometryMisAligner.h"
#include "AliMUONGeometryModuleTransformer.h"
#include "AliMUONGeometryDetElement.h"
#include "AliMUONGeometryBuilder.h"
#include "AliMpExMap.h"
#include "AliMpExMapIterator.h"
#include "AliGeomManager.h"
#include "AliCDBManager.h"
#include "AliCDBMetaData.h"
#include "AliCDBId.h"

#include <TGeoManager.h>
#include <TClonesArray.h>
#include <TMath.h>
#include <TString.h>
#include <Riostream.h>

#include <fstream>

#endif

static int fgNDetElemCh[10] = {4,4,4,4,18,18,26,26,26,26};

Bool_t MatrixToAngles(const Double_t *rot, Double_t *angles)
{
  // Calculates the Euler angles in "x y z" notation
  // using the rotation matrix
  // Returns false in case the rotation angles can not be

  // extracted from the matrix
  //
  if(TMath::Abs(rot[0])<1e-7 || TMath::Abs(rot[8])<1e-7) {
    printf("Failed to extract roll-pitch-yall angles!");
    return kFALSE;
  }
  //   Double_t raddeg = TMath::RadToDeg();
  angles[0]=TMath::ATan2(-rot[5],rot[8]);
  angles[1]=TMath::ASin(rot[2]);
  angles[2]=TMath::ATan2(-rot[1],rot[0]);
  return kTRUE;
}

Double_t eqPlane(Double_t *x, Double_t *par){
  return (-par[0]*x[0] -par[1]*x[1] -par[2]); 
}

Double_t xpCenter(Double_t *x, Double_t *par){

  Double_t lCos2Tht = TMath::Cos(2*par[6]);
  Double_t lSinTht = TMath::Sin(par[6]);

  Double_t inSqrt = TMath::Abs((par[0] - par[3])*(par[0] - par[3]) 
			       -2*(x[0] -x[1])*(x[0] -x[1]) 
			       +(par[1] - par[4] + par[2] - par[5])*(par[1] - par[4] - par[2] + par[5]) 
			       +((par[0] - par[3])*(par[0] - par[3]) 
				 +(par[1] - par[4])*(par[1] - par[4]) 
				 +(par[2] - par[5])*(par[2] - par[5]))*lCos2Tht 
			       +4*(x[0] - x[1])*(par[2] - par[5])*lSinTht);

  Double_t xD = ((2*(par[0]*par[0]*x[1] 
		     -par[0]*par[3]*(x[0] + x[1]) 
		     +x[1]*par[1]*(par[1] - par[4]) 
		     +x[0]*(par[3]*par[3] - par[1]*par[4] + par[4]*par[4])) 
		  -2*(par[3]*par[3]*par[2] 
		      +par[0]*par[0]*par[5] 
		      -par[0]*par[3]*(par[2] + par[5]) 
		      +(par[1] - par[4])*(-par[4]*par[2] +par[1]*par[5]))*lSinTht 
		  +TMath::Sqrt(2)*(-par[3]*par[1] + par[0]*par[4])
		  *TMath::Sqrt(inSqrt))
		 /(2*((par[0] - par[3])*(par[0] - par[3]) + (par[1] - par[4])*(par[1] - par[4]))));

  return xD;
}

Double_t xnCenter(Double_t *x, Double_t *par){

  Double_t lCos2Tht = TMath::Cos(2*par[6]);
  Double_t lSinTht = TMath::Sin(par[6]);

  Double_t inSqrt = TMath::Abs((par[0] - par[3])*(par[0] - par[3]) 
			       -2*(x[0] - x[1])*(x[0] - x[1]) 
			       +(par[1] - par[4] + par[2] - par[5])*(par[1] - par[4] - par[2] + par[5]) 
			       +((par[0] - par[3])*(par[0] - par[3]) 
				 +(par[1] - par[4])*(par[1] - par[4]) 
				 +(par[2] - par[5])*(par[2] - par[5]))*lCos2Tht
			       +4*(x[0] - x[1])*(par[2] - par[5])*lSinTht);

  Double_t xD = ((2*(par[0]*par[0]*x[1] 
		     -par[0]*par[3]*(x[0] + x[1]) 
		     +x[1]*par[1]*(par[1] - par[4]) 
		     +x[0]*(par[3]*par[3] - par[1]*par[4] + par[4]*par[4])) 
		  -2*(par[3]*par[3]*par[2] + par[0]*par[0]*par[5] 
		      -par[0]*par[3]*(par[2] + par[5]) 
		      +(par[1] - par[4])*(-par[4]*par[2] + par[1]*par[5]))*lSinTht 
		  +TMath::Sqrt(2)*(par[3]*par[1] - par[0]*par[4])
		  *TMath::Sqrt(inSqrt))
		 /(2*((par[0] - par[3])*(par[0] - par[3]) + (par[1] - par[4])*(par[1] - par[4]))));

  return xD;
}

Double_t phixpn(Double_t *x, Double_t *par){

  Double_t inSqrt = TMath::Abs(((par[0] - par[3])*(par[0] - par[3]) 
				-2*(x[0] - x[1])*(x[0] - x[1]) 
				+(par[1] - par[4] + par[2] - par[5])*(par[1] - par[4] - par[2] + par[5]) 
				+(+(par[0] - par[3])*(par[0] - par[3]) 
				  +(par[1] - par[4])*(par[1] - par[4]) 
				  +(par[2] - par[5])*(par[2] - par[5]))*TMath::Cos(2*par[6]) 
				+4*(x[0] - x[1])*(par[2] - par[5])*TMath::Sin(par[6])));
  
  Double_t phix = ((+2*(par[0] - par[3])*(x[0] - x[1]) 
		    -2*(par[0] - par[3])*(par[2] - par[5])*TMath::Sin(par[6]) 
		    +TMath::Sqrt(2)*(par[1] - par[4])
		    *TMath::Sqrt(inSqrt))
		   /(2*(+(par[0] - par[3])*(par[0] - par[3]) 
			+(par[1] - par[4])*(par[1] - par[4]))*TMath::Cos(par[6])));

  phix = -TMath::ACos(phix);

  return phix;
}

Double_t phixpp(Double_t *x, Double_t *par){

  Double_t inSqrt = TMath::Abs(+(par[0] - par[3])*(par[0] - par[3]) 
			       -2*(x[0] - x[1])*(x[0] - x[1]) 
			       +(par[1] - par[4] + par[2] - par[5])*(par[1] - par[4] - par[2] + par[5]) 
			       +(+(par[0] - par[3])*(par[0] - par[3]) 
				 +(par[1] - par[4])*(par[1] - par[4]) 
				 +(par[2] - par[5])*(par[2] - par[5]))*TMath::Cos(2*par[6]) 
			       +4*(x[0] - x[1])*(par[2] - par[5])*TMath::Sin(par[6]));

  Double_t phix = ((+2*(par[0] - par[3])*(x[0] - x[1]) 
		    -2*(par[0] - par[3])*(par[2] - par[5])*TMath::Sin(par[6]) 
		    +TMath::Sqrt(2)*(par[1] - par[4])
		    *TMath::Sqrt(inSqrt))
		   /(2*(+(par[0] - par[3])*(par[0] - par[3]) 
			+(par[1] - par[4])*(par[1] - par[4]))*TMath::Cos(par[6])));

  phix = TMath::ACos(phix);

  return phix;
}

Double_t phixnn(Double_t *x, Double_t *par){

  Double_t inSqrt = TMath::Abs(+(par[0] - par[3])*(par[0] - par[3]) 
			       -2*(x[0] - x[1])*(x[0] - x[1]) 
			       +(par[1] - par[4] + par[2] - par[5])*(par[1] - par[4] - par[2] + par[5]) 
			       +(+(par[0] - par[3])*(par[0] - par[3]) 
				 +(par[1] - par[4])*(par[1] - par[4]) 
				 +(par[2] - par[5])*(par[2] - par[5]))*TMath::Cos(2*par[6]) 
			       + 4*(x[0] - x[1])*(par[2] - par[5])*TMath::Sin(par[6]));
  
  Double_t phix = (+(+2*(par[0] - par[3])*(x[0] - x[1]) 
		     -2*(par[0] - par[3])*(par[2] - par[5])*TMath::Sin(par[6]) 
		     +TMath::Sqrt(2)*(-par[1] + par[4])
		     *TMath::Sqrt(inSqrt))
		   /(2*(+(par[0] - par[3])*(par[0] - par[3]) 
			+(par[1] - par[4])*(par[1] - par[4]))*TMath::Cos(par[6])));

  phix = -TMath::ACos(phix);

  return phix;
}

Double_t phixnp(Double_t *x, Double_t *par){

  Double_t inSqrt = TMath::Abs(+(par[0] - par[3])*(par[0] - par[3]) 
			       -2*(x[0] - x[1])*(x[0] - x[1]) 
			       +(par[1] - par[4] + par[2] - par[5])*(par[1] - par[4] - par[2] + par[5]) 
			       +(+(par[0] - par[3])*(par[0] - par[3]) 
				 +(par[1] - par[4])*(par[1] - par[4]) 
				 +(par[2] - par[5])*(par[2] - par[5]))*TMath::Cos(2*par[6]) 
			       +4*(x[0] - x[1])*(par[2] - par[5])*TMath::Sin(par[6]));

  Double_t phix = (+(+2*(par[0] - par[3])*(x[0] - x[1]) 
		     -2*(par[0] - par[3])*(par[2] - par[5])*TMath::Sin(par[6]) 
		     +TMath::Sqrt(2)*(-par[1] + par[4])
		     *TMath::Sqrt(inSqrt))
		   /(2*(+(par[0] - par[3])*(par[0] - par[3]) 
			+(par[1] - par[4])*(par[1] - par[4]))*TMath::Cos(par[6])));

  phix = TMath::ACos(phix);

  return phix;
}

Double_t ypCenter(Double_t *x, Double_t *par){
  // par : x1l, y1l, z1l, x2l, y2l, z2, lpsi, tht,

  Double_t lCosPsi = TMath::Cos(par[6]);
  Double_t lSinPsi = TMath::Sin(par[6]);
  Double_t lCosTht = TMath::Cos(par[7]);
  Double_t lSinTht = TMath::Sin(par[7]);

  Double_t yD = ((1./((par[0] - par[3])*(par[0] - par[3]) + (par[1] - par[4])*(par[1] - par[4])))
		 *(+par[3]*par[3]*x[0] 
		   +par[0]*par[0]*x[1] 
		   -par[0]*par[3]*(x[0] + x[1]) 
		   +(par[1] - par[4])*(-x[0]*par[4] + par[1]*x[1]) 
		   +(par[3]*par[3]*par[2] 
		     +par[0]*par[0]*par[5] 
		     -par[0]*par[3]*(par[2] + par[5]) 
		     +(par[1] - par[4])*(-par[4]*par[2] + par[1]*par[5]))*lCosTht*lSinPsi 
		   +(-par[3]*par[1] + par[0]*par[4])
		   *TMath::Sqrt(-(x[0] - x[1] 
				  +(par[2] - par[5])*lCosTht*lSinPsi)
				*(x[0] - x[1] 
				  +(par[2] - par[5])*lCosTht*lSinPsi) 
				+ ((par[0] - par[3])*(par[0] - par[3]) 
				   +(par[1] - par[4])*(par[1] - par[4]))*(lCosPsi*lCosPsi 
									  +lSinPsi*lSinPsi*lSinTht*lSinTht))));

  return yD;  
}

Double_t phiypn(Double_t *x, Double_t *par){

  Double_t lCosPsi = TMath::Cos(par[6]);
  Double_t lSinPsi = TMath::Sin(par[6]);
  Double_t lCosTht = TMath::Cos(par[7]);
  Double_t lSinTht = TMath::Sin(par[7]);

  Double_t phiy = ((lCosPsi*((par[1] - par[4])*(x[0] - x[1]) 
			     +(par[1] - par[4])*(par[2] - par[5])*lCosTht*lSinPsi 
			     +(-par[0] + par[3])
			     *TMath::Sqrt(-(x[0] - x[1] 
					    +(par[2] - par[5])*lCosTht*lSinPsi)
					  *(x[0] - x[1] 
					    +(par[2] - par[5])*lCosTht*lSinPsi) 
					  +(+(par[0] - par[3])*(par[0] - par[3]) 
					    +(par[1] - par[4])*(par[1] - par[4]))*(lCosPsi*lCosPsi
										   +lSinPsi*lSinPsi*lSinTht*lSinTht))) 
		    +lSinPsi*lSinTht*((par[0] - par[3])*(x[0] - x[1]) 
				      +(par[0] - par[3])*(par[2] - par[5])*lCosTht*lSinPsi 
				      +(par[1] - par[4])
				      *TMath::Sqrt(-(x[0] - x[1] 
						     +(par[2] - par[5])*lCosTht*lSinPsi)
						   *(x[0] - x[1] 
						     +(par[2] - par[5])*lCosTht*lSinPsi) 
						   + ((par[0] - par[3])*(par[0] - par[3]) 
						      +(par[1] - par[4])*(par[1] - par[4]))*(lCosPsi*lCosPsi 
											     +lSinPsi*lSinPsi*lSinTht*lSinTht))))
		   /((+(par[0] - par[3])*(par[0] - par[3]) 
		      +(par[1] - par[4])*(par[1] - par[4]))*(lCosPsi*lCosPsi 
							     +lSinPsi*lSinPsi*lSinTht*lSinTht)));
  
  phiy = -TMath::ACos(phiy);


  return phiy;
}

Double_t phiypp(Double_t *x, Double_t *par){

  Double_t lCosPsi = TMath::Cos(par[6]);
  Double_t lSinPsi = TMath::Sin(par[6]);
  Double_t lCosTht = TMath::Cos(par[7]);
  Double_t lSinTht = TMath::Sin(par[7]);

  Double_t phiy = ((lCosPsi*((par[1] - par[4])*(x[0] - x[1]) 
			     +(par[1] - par[4])*(par[2] - par[5])*lCosTht*lSinPsi 
			     +(-par[0] + par[3])
			     *TMath::Sqrt(-(x[0] - x[1] 
					    +(par[2] - par[5])*lCosTht*lSinPsi)
					  *(x[0] - x[1] 
					    +(par[2] - par[5])*lCosTht*lSinPsi) 
					  +((par[0] - par[3])*(par[0] - par[3]) 
					    +(par[1] - par[4])*(par[1] - par[4]))*(lCosPsi*lCosPsi 
										   +lSinPsi*lSinPsi*lSinTht*lSinTht))) 
		    +lSinPsi*lSinTht*((par[0] - par[3])*(x[0] - x[1]) 
				      +(par[0] - par[3])*(par[2] - par[5])*lCosTht*lSinPsi 
				      +(par[1] - par[4])*TMath::Sqrt(-(x[0] - x[1] 
								       +(par[2] - par[5])*lCosTht*lSinPsi)
								     *(x[0] - x[1] 
								       +(par[2] - par[5])*lCosTht*lSinPsi) 
								     +((par[0] - par[3])*(par[0] - par[3])
								       +(par[1] - par[4])*(par[1] - par[4]))*(lCosPsi*lCosPsi 
													      +lSinPsi*lSinPsi*lSinTht*lSinTht))))
		   /(((par[0] - par[3])*(par[0] - par[3]) 
		      +(par[1] - par[4])*(par[1] - par[4]))*(lCosPsi*lCosPsi 
							     +lSinPsi*lSinPsi*lSinTht*lSinTht)));
  
  phiy = TMath::ACos(phiy);

  return phiy;
}
 
Double_t ynCenter(Double_t *x, Double_t *par){

  Double_t lCosPsi = TMath::Cos(par[6]);
  Double_t lSinPsi = TMath::Sin(par[6]);
  Double_t lCosTht = TMath::Cos(par[7]);
  Double_t lSinTht = TMath::Sin(par[7]);

  Double_t yD = ((1./(+(par[0] - par[3])*(par[0] - par[3]) 
		      +(par[1] - par[4])*(par[1] - par[4])))
		 *(+par[3]*par[3]*x[0] 
		   +par[0]*par[0]*x[1] 
		   -par[0]*par[3]*(x[0] + x[1]) 
		   +(par[1] - par[4])*(-x[0]*par[4] + par[1]*x[1]) 
		   +(+par[3]*par[3]*par[2] 
		     +par[0]*par[0]*par[5] 
		     -par[0]*par[3]*(par[2] + par[5]) 
		     +(par[1] - par[4])*(-par[4]*par[2] + par[1]*par[5]))*lCosTht*lSinPsi 
		   +(par[3]*par[1] - par[0]*par[4])
		   *TMath::Sqrt(-(+x[0] - x[1] 
				  +(par[2] - par[5])*lCosTht*lSinPsi)
				*(x[0] - x[1] 
				  +(par[2] - par[5])*lCosTht*lSinPsi) 
				+((par[0] - par[3])*(par[0] - par[3]) 
				  +(par[1] - par[4])*(par[1] - par[4]))*(+lCosPsi*lCosPsi 
									 +lSinPsi*lSinPsi*lSinTht*lSinTht))));
  
  return yD;  
}
 

Double_t phiynn(Double_t *x, Double_t *par){

  Double_t lCosPsi = TMath::Cos(par[6]);
  Double_t lSinPsi = TMath::Sin(par[6]);
  Double_t lCosTht = TMath::Cos(par[7]);
  Double_t lSinTht = TMath::Sin(par[7]);

  Double_t phiy = ((lCosPsi*(+(par[1] - par[4])*(x[0] - x[1]) 
			     +(par[1] - par[4])*(par[2] - par[5])*lCosTht*lSinPsi 
			     +(par[0] - par[3])
			     *TMath::Sqrt(-(x[0] - x[1] 
					    +(par[2] - par[5])*lCosTht*lSinPsi)
					  *(x[0] - x[1] 
					    +(par[2] - par[5])*lCosTht*lSinPsi) 
					  +(+(par[0] - par[3])*(par[0] - par[3]) 
					    +(par[1] - par[4])*(par[1] - par[4]))*(+lCosPsi*lCosPsi 
										   +lSinPsi*lSinPsi*lSinTht*lSinTht))) 
		    +lSinPsi*lSinTht*(+(par[0] - par[3])*(x[0] - x[1]) 
				      +(par[0] - par[3])*(par[2] - par[5])*lCosTht*lSinPsi 
				      +(-par[1] + par[4])
				      *TMath::Sqrt(-(x[0] - x[1] 
						     +(par[2] - par[5])*lCosTht*lSinPsi)
						   *(x[0] - x[1] 
						     +(par[2] - par[5])*lCosTht*lSinPsi) 
						   +(+(par[0] - par[3])*(par[0] - par[3]) 
						     +(par[1] - par[4])*(par[1] - par[4]))*(+lCosPsi*lCosPsi 
											    +lSinPsi*lSinPsi*lSinTht*lSinTht))))
		   /((+(par[0] - par[3])*(par[0] - par[3]) 
		      +(par[1] - par[4])*(par[1] - par[4]))*(+lCosPsi*lCosPsi 
							     +lSinPsi*lSinPsi*lSinTht*lSinTht)));
  
  phiy = -TMath::ACos(phiy);
  
  return phiy;
}


Double_t phiynp(Double_t *x, Double_t *par){

  Double_t lCosPsi = TMath::Cos(par[6]);
  Double_t lSinPsi = TMath::Sin(par[6]);
  Double_t lCosTht = TMath::Cos(par[7]);
  Double_t lSinTht = TMath::Sin(par[7]);

  Double_t phiy = ((lCosPsi*(+(par[1] - par[4])*(x[0] - x[1]) 
			     +(par[1] - par[4])*(par[2] - par[5])*lCosTht*lSinPsi 
			     +(par[0] - par[3])
			     *TMath::Sqrt(-(x[0] - x[1] 
					    +(par[2] - par[5])*lCosTht*lSinPsi)
					  *(x[0] - x[1] 
					    +(par[2] - par[5])*lCosTht*lSinPsi) 
					  +((par[0] - par[3])*(par[0] - par[3]) 
					    +(par[1] - par[4])*(par[1] - par[4]))*(+lCosPsi*lCosPsi 
										   +lSinPsi*lSinPsi*lSinTht*lSinTht))) 
		    +lSinPsi*lSinTht*(+(par[0] - par[3])*(x[0] - x[1]) 
				      +(par[0] - par[3])*(par[2] - par[5])*lCosTht*lSinPsi 
				      +(-par[1] + par[4])
				      *TMath::Sqrt(-(x[0] - x[1] 
						     +(par[2] - par[5])*lCosTht*lSinPsi)
						   *(x[0] - x[1] 
						     +(par[2] - par[5])*lCosTht*lSinPsi) 
						   +((par[0] - par[3])*(par[0] - par[3]) 
						     +(par[1] - par[4])*(par[1] - par[4]))*(+lCosPsi*lCosPsi 
											    +lSinPsi*lSinPsi*lSinTht*lSinTht))))
		   /((+(par[0] - par[3])*(par[0] - par[3])
		      +(par[1] - par[4])*(par[1] - par[4]))*(+lCosPsi*lCosPsi 
							     +lSinPsi*lSinPsi*lSinTht*lSinTht)));
  
  phiy = TMath::ACos(phiy);
  
  return phiy;
}

Double_t znCenter(Double_t *x, Double_t *par){
  // par :  x1l, y1l, z1l, x2l, y2l, z2l, psi, tht

  Double_t lCosPsi = TMath::Cos(par[6]);
  Double_t lSinPsi = TMath::Sin(par[6]);
  Double_t lCosTht = TMath::Cos(par[7]);
  Double_t lSinTht = TMath::Sin(par[7]);

  Double_t inSqrt = ((par[3]*par[1] - par[0]*par[4])*(par[3]*par[1] - par[0]*par[4])
		     *((-(x[0] - x[1])*(x[0] - x[1]))
		       +(((par[0] - par[3])*(par[0] - par[3])
			  +(par[1] - par[4])*(par[1] - par[4])))*lSinPsi*lSinPsi
		       +lCosPsi*((-(par[2] - par[5]))
				 *lCosTht*(-2*x[0]+2*x[1]
					   +(par[2] - par[5])*lCosPsi*lCosTht)
				 +((par[0] - par[3])*(par[0] - par[3])
				   +(par[1] - par[4])*(par[1] - par[4]))*lCosPsi*lSinTht*lSinTht)));

  Double_t zD = ((1./((par[0] - par[3])*(par[0] - par[3]) 
		      +(par[1] - par[4])*(par[1] - par[4])))
		 *(-par[1]*par[4]*x[0] 
		   +par[4]*par[4]*x[0] 
		   +par[0]*par[0]*x[1] 
		   +par[1]*par[1]*x[1] 
		   -par[1]*par[4]*x[1] 
		   -par[0]*par[3]*(x[0] + x[1]) 
		   +par[3]*par[3]*x[0]
		   +(+par[1]*par[4]*par[2] 
		     -par[4]*par[4]*par[2] 
		     -par[0]*par[0]*par[5] 
		     -par[1]*par[1]*par[5] 
		     +par[1]*par[4]*par[5] 
		     +par[0]*par[3]*(par[2] + par[5])
		     -par[3]*par[3]*par[2])*lCosPsi*lCosTht
		   -TMath::Sqrt(inSqrt)));
  
  return zD;
}

Double_t zpCenter(Double_t *x, Double_t *par){
  // par :  x1l, y1l, z1l, x2l, y2l, z2l, psi, tht

  Double_t lCosPsi = TMath::Cos(par[6]);
  Double_t lSinPsi = TMath::Sin(par[6]);
  Double_t lCosTht = TMath::Cos(par[7]);
  Double_t lSinTht = TMath::Sin(par[7]);

  Double_t inSqrt = ((par[3]*par[1] - par[0]*par[4])*(par[3]*par[1] - par[0]*par[4])
		     *((-(x[0] - x[1])*(x[0] - x[1]))
		       +(((par[0] - par[3])*(par[0] - par[3])
			  +(par[1] - par[4])*(par[1] - par[4])))*lSinPsi*lSinPsi
		       +lCosPsi*((-(par[2] - par[5]))
				 *lCosTht*(-2*x[0]+2*x[1]
					   +(par[2] - par[5])*lCosPsi*lCosTht)
				 +((par[0] - par[3])*(par[0] - par[3])
				   +(par[1] - par[4])*(par[1] - par[4]))*lCosPsi*lSinTht*lSinTht)));
  
  Double_t zD = ((1./((par[0] - par[3])*(par[0] - par[3]) 
		      +(par[1] - par[4])*(par[1] - par[4])))
		 *(-par[1]*par[4]*x[0] 
		   +par[4]*par[4]*x[0] 
		   +par[0]*par[0]*x[1] 
		   +par[1]*par[1]*x[1] 
		   -par[1]*par[4]*x[1] 
		   -par[0]*par[3]*(x[0] + x[1]) 
		   +par[3]*par[3]*x[0]
		   +(+par[1]*par[4]*par[2] 
		     -par[4]*par[4]*par[2] 
		     -par[0]*par[0]*par[5] 
		     -par[1]*par[1]*par[5] 
		     +par[1]*par[4]*par[5] 
		     +par[0]*par[3]*(par[2] + par[5])
		     -par[3]*par[3]*par[2])*lCosPsi*lCosTht
		   +TMath::Sqrt(inSqrt)));

  return zD;
}

//______________________________________________________________________
AliMUONGeometryTransformer *ReAlign(const AliMUONGeometryTransformer * transformer, 
				    int rMod, TGeoCombiTrans deltaDetElemTransf[], Bool_t verbose)
{
  /////////////////////////////////////////////////////////////////////
  //   Takes the internal geometry module transformers, copies them
  // and gets the Detection Elements from them.
  // Takes misalignment parameters and applies these
  // to the local transform of the Detection Element
  // Obtains the global transform by multiplying the module transformer
  // transformation with the local transformation 
  // Applies the global transform to a new detection element
  // Adds the new detection element to a new module transformer
  // Adds the new module transformer to a new geometry transformer
  // Returns the new geometry transformer


  Int_t iDetElemId = 0;
  Int_t iDetElemNumber = 0;
  Int_t iDetElemIndex = 0;
  Int_t iCh = 0;

  AliMUONGeometryTransformer *newGeometryTransformer =
    new AliMUONGeometryTransformer();
  for (Int_t iMt = 0; iMt < transformer->GetNofModuleTransformers(); iMt++) {
    // module transformers    
    const AliMUONGeometryModuleTransformer *kModuleTransformer =
      transformer->GetModuleTransformer(iMt, true);
      
    AliMUONGeometryModuleTransformer *newModuleTransformer =
      new AliMUONGeometryModuleTransformer(iMt);
    newGeometryTransformer->AddModuleTransformer(newModuleTransformer);
    
    TGeoCombiTrans moduleTransform =
      TGeoCombiTrans(*kModuleTransformer->GetTransformation());
    // New module transformation
    TGeoCombiTrans *newModuleTransform;
    if (iMt==rMod) {
      newModuleTransform = new TGeoCombiTrans(moduleTransform);
    } else {
      newModuleTransform = new TGeoCombiTrans(moduleTransform);
    }
    newModuleTransformer->SetTransformation(*newModuleTransform);
    
    // For the selected chamber add misalign module
    if (iMt==rMod) {
      // Get delta transformation: 
      // Tdelta = Tnew * Told.inverse
      TGeoHMatrix deltaModuleTransform = 
	AliMUONGeometryBuilder::Multiply(*newModuleTransform, 
					 kModuleTransformer->GetTransformation()->Inverse());    
      // Create module mis alignment matrix
      newGeometryTransformer
	->AddMisAlignModule(kModuleTransformer->GetModuleId(), deltaModuleTransform);
    }
      
    AliMpExMap *detElements = kModuleTransformer->GetDetElementStore();
    
    if (verbose)
      printf("%i DEs in old GeometryStore  %i\n",detElements->GetSize(), iMt);
    TGeoCombiTrans *deltaLocalTransform;
    TIter next(detElements->CreateIterator());
    AliMUONGeometryDetElement *detElement;
    while ((detElement = static_cast<AliMUONGeometryDetElement*>(next()))){
      /// make a new detection element
      AliMUONGeometryDetElement *newDetElement =
	new AliMUONGeometryDetElement(detElement->GetId(),
				      detElement->GetVolumePath());
      TString lDetElemName(detElement->GetDEName());
      lDetElemName.ReplaceAll("DE","");
      iDetElemId = lDetElemName.Atoi();
      iDetElemNumber = iDetElemId%100;
      iCh = iDetElemId/100 -1;
      if(iMt==rMod){
	if (iCh<4) {
	  iDetElemIndex = iDetElemId;
	} else {
	  if ((iDetElemNumber > (fgNDetElemCh[iCh]-2)/4) &&
	      (iDetElemNumber < fgNDetElemCh[iCh]-(fgNDetElemCh[iCh]-2)/4)) {
	    iDetElemIndex = (+fgNDetElemCh[iCh] 
			     -(1+(fgNDetElemCh[iCh]-2)/4) 
			     -iDetElemNumber);
	  } else {
	    iDetElemIndex = (+fgNDetElemCh[iCh] 
			     -fgNDetElemCh[iCh]/2
			     -((1+(fgNDetElemCh[iCh]-2)/4) 
			       -TMath::Min(iDetElemNumber,
					   TMath::Abs(iDetElemNumber-fgNDetElemCh[iCh]))));
	  }
	}
	deltaLocalTransform = new TGeoCombiTrans(deltaDetElemTransf[iDetElemIndex]);       
      } else {
	deltaLocalTransform = new TGeoCombiTrans(*gGeoIdentity);
      }

      // local transformation of this detection element.
      TGeoCombiTrans localTransform
	= TGeoCombiTrans(*detElement->GetLocalTransformation());
      //      TGeoHMatrix newLocalMatrix = localTransform * (*deltaLocalTransform);
      TGeoCombiTrans newLocalTransform 
	= TGeoCombiTrans(localTransform * (*deltaLocalTransform));
      newDetElement->SetLocalTransformation(newLocalTransform);	  
      // global transformation
      TGeoHMatrix newGlobalTransform =
	AliMUONGeometryBuilder::Multiply(*newModuleTransform,
					 newLocalTransform);
      newDetElement->SetGlobalTransformation(newGlobalTransform);
      
      // add this det element to module
      newModuleTransformer->GetDetElementStore()->Add(newDetElement->GetId(),
						      newDetElement);
      
      // In the Alice Alignment Framework misalignment objects store
      // global delta transformation
      // Get detection "intermediate" global transformation
      TGeoHMatrix newOldGlobalTransform = (*newModuleTransform) * localTransform;
      // Get detection element global delta transformation: 
      // Tdelta = Tnew * Told.inverse
      TGeoHMatrix  deltaGlobalTransform
	= AliMUONGeometryBuilder::Multiply(newGlobalTransform, 
					   newOldGlobalTransform.Inverse());
      
      // Create mis alignment matrix
      newGeometryTransformer
	->AddMisAlignDetElement(detElement->GetId(), deltaGlobalTransform);
    }
    
    if (verbose)
      printf("Added module transformer %i to the transformer\n", iMt);
    newGeometryTransformer->AddModuleTransformer(newModuleTransformer);
  }
  return newGeometryTransformer;
}
 MUONSurveyUtil.C:1
 MUONSurveyUtil.C:2
 MUONSurveyUtil.C:3
 MUONSurveyUtil.C:4
 MUONSurveyUtil.C:5
 MUONSurveyUtil.C:6
 MUONSurveyUtil.C:7
 MUONSurveyUtil.C:8
 MUONSurveyUtil.C:9
 MUONSurveyUtil.C:10
 MUONSurveyUtil.C:11
 MUONSurveyUtil.C:12
 MUONSurveyUtil.C:13
 MUONSurveyUtil.C:14
 MUONSurveyUtil.C:15
 MUONSurveyUtil.C:16
 MUONSurveyUtil.C:17
 MUONSurveyUtil.C:18
 MUONSurveyUtil.C:19
 MUONSurveyUtil.C:20
 MUONSurveyUtil.C:21
 MUONSurveyUtil.C:22
 MUONSurveyUtil.C:23
 MUONSurveyUtil.C:24
 MUONSurveyUtil.C:25
 MUONSurveyUtil.C:26
 MUONSurveyUtil.C:27
 MUONSurveyUtil.C:28
 MUONSurveyUtil.C:29
 MUONSurveyUtil.C:30
 MUONSurveyUtil.C:31
 MUONSurveyUtil.C:32
 MUONSurveyUtil.C:33
 MUONSurveyUtil.C:34
 MUONSurveyUtil.C:35
 MUONSurveyUtil.C:36
 MUONSurveyUtil.C:37
 MUONSurveyUtil.C:38
 MUONSurveyUtil.C:39
 MUONSurveyUtil.C:40
 MUONSurveyUtil.C:41
 MUONSurveyUtil.C:42
 MUONSurveyUtil.C:43
 MUONSurveyUtil.C:44
 MUONSurveyUtil.C:45
 MUONSurveyUtil.C:46
 MUONSurveyUtil.C:47
 MUONSurveyUtil.C:48
 MUONSurveyUtil.C:49
 MUONSurveyUtil.C:50
 MUONSurveyUtil.C:51
 MUONSurveyUtil.C:52
 MUONSurveyUtil.C:53
 MUONSurveyUtil.C:54
 MUONSurveyUtil.C:55
 MUONSurveyUtil.C:56
 MUONSurveyUtil.C:57
 MUONSurveyUtil.C:58
 MUONSurveyUtil.C:59
 MUONSurveyUtil.C:60
 MUONSurveyUtil.C:61
 MUONSurveyUtil.C:62
 MUONSurveyUtil.C:63
 MUONSurveyUtil.C:64
 MUONSurveyUtil.C:65
 MUONSurveyUtil.C:66
 MUONSurveyUtil.C:67
 MUONSurveyUtil.C:68
 MUONSurveyUtil.C:69
 MUONSurveyUtil.C:70
 MUONSurveyUtil.C:71
 MUONSurveyUtil.C:72
 MUONSurveyUtil.C:73
 MUONSurveyUtil.C:74
 MUONSurveyUtil.C:75
 MUONSurveyUtil.C:76
 MUONSurveyUtil.C:77
 MUONSurveyUtil.C:78
 MUONSurveyUtil.C:79
 MUONSurveyUtil.C:80
 MUONSurveyUtil.C:81
 MUONSurveyUtil.C:82
 MUONSurveyUtil.C:83
 MUONSurveyUtil.C:84
 MUONSurveyUtil.C:85
 MUONSurveyUtil.C:86
 MUONSurveyUtil.C:87
 MUONSurveyUtil.C:88
 MUONSurveyUtil.C:89
 MUONSurveyUtil.C:90
 MUONSurveyUtil.C:91
 MUONSurveyUtil.C:92
 MUONSurveyUtil.C:93
 MUONSurveyUtil.C:94
 MUONSurveyUtil.C:95
 MUONSurveyUtil.C:96
 MUONSurveyUtil.C:97
 MUONSurveyUtil.C:98
 MUONSurveyUtil.C:99
 MUONSurveyUtil.C:100
 MUONSurveyUtil.C:101
 MUONSurveyUtil.C:102
 MUONSurveyUtil.C:103
 MUONSurveyUtil.C:104
 MUONSurveyUtil.C:105
 MUONSurveyUtil.C:106
 MUONSurveyUtil.C:107
 MUONSurveyUtil.C:108
 MUONSurveyUtil.C:109
 MUONSurveyUtil.C:110
 MUONSurveyUtil.C:111
 MUONSurveyUtil.C:112
 MUONSurveyUtil.C:113
 MUONSurveyUtil.C:114
 MUONSurveyUtil.C:115
 MUONSurveyUtil.C:116
 MUONSurveyUtil.C:117
 MUONSurveyUtil.C:118
 MUONSurveyUtil.C:119
 MUONSurveyUtil.C:120
 MUONSurveyUtil.C:121
 MUONSurveyUtil.C:122
 MUONSurveyUtil.C:123
 MUONSurveyUtil.C:124
 MUONSurveyUtil.C:125
 MUONSurveyUtil.C:126
 MUONSurveyUtil.C:127
 MUONSurveyUtil.C:128
 MUONSurveyUtil.C:129
 MUONSurveyUtil.C:130
 MUONSurveyUtil.C:131
 MUONSurveyUtil.C:132
 MUONSurveyUtil.C:133
 MUONSurveyUtil.C:134
 MUONSurveyUtil.C:135
 MUONSurveyUtil.C:136
 MUONSurveyUtil.C:137
 MUONSurveyUtil.C:138
 MUONSurveyUtil.C:139
 MUONSurveyUtil.C:140
 MUONSurveyUtil.C:141
 MUONSurveyUtil.C:142
 MUONSurveyUtil.C:143
 MUONSurveyUtil.C:144
 MUONSurveyUtil.C:145
 MUONSurveyUtil.C:146
 MUONSurveyUtil.C:147
 MUONSurveyUtil.C:148
 MUONSurveyUtil.C:149
 MUONSurveyUtil.C:150
 MUONSurveyUtil.C:151
 MUONSurveyUtil.C:152
 MUONSurveyUtil.C:153
 MUONSurveyUtil.C:154
 MUONSurveyUtil.C:155
 MUONSurveyUtil.C:156
 MUONSurveyUtil.C:157
 MUONSurveyUtil.C:158
 MUONSurveyUtil.C:159
 MUONSurveyUtil.C:160
 MUONSurveyUtil.C:161
 MUONSurveyUtil.C:162
 MUONSurveyUtil.C:163
 MUONSurveyUtil.C:164
 MUONSurveyUtil.C:165
 MUONSurveyUtil.C:166
 MUONSurveyUtil.C:167
 MUONSurveyUtil.C:168
 MUONSurveyUtil.C:169
 MUONSurveyUtil.C:170
 MUONSurveyUtil.C:171
 MUONSurveyUtil.C:172
 MUONSurveyUtil.C:173
 MUONSurveyUtil.C:174
 MUONSurveyUtil.C:175
 MUONSurveyUtil.C:176
 MUONSurveyUtil.C:177
 MUONSurveyUtil.C:178
 MUONSurveyUtil.C:179
 MUONSurveyUtil.C:180
 MUONSurveyUtil.C:181
 MUONSurveyUtil.C:182
 MUONSurveyUtil.C:183
 MUONSurveyUtil.C:184
 MUONSurveyUtil.C:185
 MUONSurveyUtil.C:186
 MUONSurveyUtil.C:187
 MUONSurveyUtil.C:188
 MUONSurveyUtil.C:189
 MUONSurveyUtil.C:190
 MUONSurveyUtil.C:191
 MUONSurveyUtil.C:192
 MUONSurveyUtil.C:193
 MUONSurveyUtil.C:194
 MUONSurveyUtil.C:195
 MUONSurveyUtil.C:196
 MUONSurveyUtil.C:197
 MUONSurveyUtil.C:198
 MUONSurveyUtil.C:199
 MUONSurveyUtil.C:200
 MUONSurveyUtil.C:201
 MUONSurveyUtil.C:202
 MUONSurveyUtil.C:203
 MUONSurveyUtil.C:204
 MUONSurveyUtil.C:205
 MUONSurveyUtil.C:206
 MUONSurveyUtil.C:207
 MUONSurveyUtil.C:208
 MUONSurveyUtil.C:209
 MUONSurveyUtil.C:210
 MUONSurveyUtil.C:211
 MUONSurveyUtil.C:212
 MUONSurveyUtil.C:213
 MUONSurveyUtil.C:214
 MUONSurveyUtil.C:215
 MUONSurveyUtil.C:216
 MUONSurveyUtil.C:217
 MUONSurveyUtil.C:218
 MUONSurveyUtil.C:219
 MUONSurveyUtil.C:220
 MUONSurveyUtil.C:221
 MUONSurveyUtil.C:222
 MUONSurveyUtil.C:223
 MUONSurveyUtil.C:224
 MUONSurveyUtil.C:225
 MUONSurveyUtil.C:226
 MUONSurveyUtil.C:227
 MUONSurveyUtil.C:228
 MUONSurveyUtil.C:229
 MUONSurveyUtil.C:230
 MUONSurveyUtil.C:231
 MUONSurveyUtil.C:232
 MUONSurveyUtil.C:233
 MUONSurveyUtil.C:234
 MUONSurveyUtil.C:235
 MUONSurveyUtil.C:236
 MUONSurveyUtil.C:237
 MUONSurveyUtil.C:238
 MUONSurveyUtil.C:239
 MUONSurveyUtil.C:240
 MUONSurveyUtil.C:241
 MUONSurveyUtil.C:242
 MUONSurveyUtil.C:243
 MUONSurveyUtil.C:244
 MUONSurveyUtil.C:245
 MUONSurveyUtil.C:246
 MUONSurveyUtil.C:247
 MUONSurveyUtil.C:248
 MUONSurveyUtil.C:249
 MUONSurveyUtil.C:250
 MUONSurveyUtil.C:251
 MUONSurveyUtil.C:252
 MUONSurveyUtil.C:253
 MUONSurveyUtil.C:254
 MUONSurveyUtil.C:255
 MUONSurveyUtil.C:256
 MUONSurveyUtil.C:257
 MUONSurveyUtil.C:258
 MUONSurveyUtil.C:259
 MUONSurveyUtil.C:260
 MUONSurveyUtil.C:261
 MUONSurveyUtil.C:262
 MUONSurveyUtil.C:263
 MUONSurveyUtil.C:264
 MUONSurveyUtil.C:265
 MUONSurveyUtil.C:266
 MUONSurveyUtil.C:267
 MUONSurveyUtil.C:268
 MUONSurveyUtil.C:269
 MUONSurveyUtil.C:270
 MUONSurveyUtil.C:271
 MUONSurveyUtil.C:272
 MUONSurveyUtil.C:273
 MUONSurveyUtil.C:274
 MUONSurveyUtil.C:275
 MUONSurveyUtil.C:276
 MUONSurveyUtil.C:277
 MUONSurveyUtil.C:278
 MUONSurveyUtil.C:279
 MUONSurveyUtil.C:280
 MUONSurveyUtil.C:281
 MUONSurveyUtil.C:282
 MUONSurveyUtil.C:283
 MUONSurveyUtil.C:284
 MUONSurveyUtil.C:285
 MUONSurveyUtil.C:286
 MUONSurveyUtil.C:287
 MUONSurveyUtil.C:288
 MUONSurveyUtil.C:289
 MUONSurveyUtil.C:290
 MUONSurveyUtil.C:291
 MUONSurveyUtil.C:292
 MUONSurveyUtil.C:293
 MUONSurveyUtil.C:294
 MUONSurveyUtil.C:295
 MUONSurveyUtil.C:296
 MUONSurveyUtil.C:297
 MUONSurveyUtil.C:298
 MUONSurveyUtil.C:299
 MUONSurveyUtil.C:300
 MUONSurveyUtil.C:301
 MUONSurveyUtil.C:302
 MUONSurveyUtil.C:303
 MUONSurveyUtil.C:304
 MUONSurveyUtil.C:305
 MUONSurveyUtil.C:306
 MUONSurveyUtil.C:307
 MUONSurveyUtil.C:308
 MUONSurveyUtil.C:309
 MUONSurveyUtil.C:310
 MUONSurveyUtil.C:311
 MUONSurveyUtil.C:312
 MUONSurveyUtil.C:313
 MUONSurveyUtil.C:314
 MUONSurveyUtil.C:315
 MUONSurveyUtil.C:316
 MUONSurveyUtil.C:317
 MUONSurveyUtil.C:318
 MUONSurveyUtil.C:319
 MUONSurveyUtil.C:320
 MUONSurveyUtil.C:321
 MUONSurveyUtil.C:322
 MUONSurveyUtil.C:323
 MUONSurveyUtil.C:324
 MUONSurveyUtil.C:325
 MUONSurveyUtil.C:326
 MUONSurveyUtil.C:327
 MUONSurveyUtil.C:328
 MUONSurveyUtil.C:329
 MUONSurveyUtil.C:330
 MUONSurveyUtil.C:331
 MUONSurveyUtil.C:332
 MUONSurveyUtil.C:333
 MUONSurveyUtil.C:334
 MUONSurveyUtil.C:335
 MUONSurveyUtil.C:336
 MUONSurveyUtil.C:337
 MUONSurveyUtil.C:338
 MUONSurveyUtil.C:339
 MUONSurveyUtil.C:340
 MUONSurveyUtil.C:341
 MUONSurveyUtil.C:342
 MUONSurveyUtil.C:343
 MUONSurveyUtil.C:344
 MUONSurveyUtil.C:345
 MUONSurveyUtil.C:346
 MUONSurveyUtil.C:347
 MUONSurveyUtil.C:348
 MUONSurveyUtil.C:349
 MUONSurveyUtil.C:350
 MUONSurveyUtil.C:351
 MUONSurveyUtil.C:352
 MUONSurveyUtil.C:353
 MUONSurveyUtil.C:354
 MUONSurveyUtil.C:355
 MUONSurveyUtil.C:356
 MUONSurveyUtil.C:357
 MUONSurveyUtil.C:358
 MUONSurveyUtil.C:359
 MUONSurveyUtil.C:360
 MUONSurveyUtil.C:361
 MUONSurveyUtil.C:362
 MUONSurveyUtil.C:363
 MUONSurveyUtil.C:364
 MUONSurveyUtil.C:365
 MUONSurveyUtil.C:366
 MUONSurveyUtil.C:367
 MUONSurveyUtil.C:368
 MUONSurveyUtil.C:369
 MUONSurveyUtil.C:370
 MUONSurveyUtil.C:371
 MUONSurveyUtil.C:372
 MUONSurveyUtil.C:373
 MUONSurveyUtil.C:374
 MUONSurveyUtil.C:375
 MUONSurveyUtil.C:376
 MUONSurveyUtil.C:377
 MUONSurveyUtil.C:378
 MUONSurveyUtil.C:379
 MUONSurveyUtil.C:380
 MUONSurveyUtil.C:381
 MUONSurveyUtil.C:382
 MUONSurveyUtil.C:383
 MUONSurveyUtil.C:384
 MUONSurveyUtil.C:385
 MUONSurveyUtil.C:386
 MUONSurveyUtil.C:387
 MUONSurveyUtil.C:388
 MUONSurveyUtil.C:389
 MUONSurveyUtil.C:390
 MUONSurveyUtil.C:391
 MUONSurveyUtil.C:392
 MUONSurveyUtil.C:393
 MUONSurveyUtil.C:394
 MUONSurveyUtil.C:395
 MUONSurveyUtil.C:396
 MUONSurveyUtil.C:397
 MUONSurveyUtil.C:398
 MUONSurveyUtil.C:399
 MUONSurveyUtil.C:400
 MUONSurveyUtil.C:401
 MUONSurveyUtil.C:402
 MUONSurveyUtil.C:403
 MUONSurveyUtil.C:404
 MUONSurveyUtil.C:405
 MUONSurveyUtil.C:406
 MUONSurveyUtil.C:407
 MUONSurveyUtil.C:408
 MUONSurveyUtil.C:409
 MUONSurveyUtil.C:410
 MUONSurveyUtil.C:411
 MUONSurveyUtil.C:412
 MUONSurveyUtil.C:413
 MUONSurveyUtil.C:414
 MUONSurveyUtil.C:415
 MUONSurveyUtil.C:416
 MUONSurveyUtil.C:417
 MUONSurveyUtil.C:418
 MUONSurveyUtil.C:419
 MUONSurveyUtil.C:420
 MUONSurveyUtil.C:421
 MUONSurveyUtil.C:422
 MUONSurveyUtil.C:423
 MUONSurveyUtil.C:424
 MUONSurveyUtil.C:425
 MUONSurveyUtil.C:426
 MUONSurveyUtil.C:427
 MUONSurveyUtil.C:428
 MUONSurveyUtil.C:429
 MUONSurveyUtil.C:430
 MUONSurveyUtil.C:431
 MUONSurveyUtil.C:432
 MUONSurveyUtil.C:433
 MUONSurveyUtil.C:434
 MUONSurveyUtil.C:435
 MUONSurveyUtil.C:436
 MUONSurveyUtil.C:437
 MUONSurveyUtil.C:438
 MUONSurveyUtil.C:439
 MUONSurveyUtil.C:440
 MUONSurveyUtil.C:441
 MUONSurveyUtil.C:442
 MUONSurveyUtil.C:443
 MUONSurveyUtil.C:444
 MUONSurveyUtil.C:445
 MUONSurveyUtil.C:446
 MUONSurveyUtil.C:447
 MUONSurveyUtil.C:448
 MUONSurveyUtil.C:449
 MUONSurveyUtil.C:450
 MUONSurveyUtil.C:451
 MUONSurveyUtil.C:452
 MUONSurveyUtil.C:453
 MUONSurveyUtil.C:454
 MUONSurveyUtil.C:455
 MUONSurveyUtil.C:456
 MUONSurveyUtil.C:457
 MUONSurveyUtil.C:458
 MUONSurveyUtil.C:459
 MUONSurveyUtil.C:460
 MUONSurveyUtil.C:461
 MUONSurveyUtil.C:462
 MUONSurveyUtil.C:463
 MUONSurveyUtil.C:464
 MUONSurveyUtil.C:465
 MUONSurveyUtil.C:466
 MUONSurveyUtil.C:467
 MUONSurveyUtil.C:468
 MUONSurveyUtil.C:469
 MUONSurveyUtil.C:470
 MUONSurveyUtil.C:471
 MUONSurveyUtil.C:472
 MUONSurveyUtil.C:473
 MUONSurveyUtil.C:474
 MUONSurveyUtil.C:475
 MUONSurveyUtil.C:476
 MUONSurveyUtil.C:477
 MUONSurveyUtil.C:478
 MUONSurveyUtil.C:479
 MUONSurveyUtil.C:480
 MUONSurveyUtil.C:481
 MUONSurveyUtil.C:482
 MUONSurveyUtil.C:483
 MUONSurveyUtil.C:484
 MUONSurveyUtil.C:485
 MUONSurveyUtil.C:486
 MUONSurveyUtil.C:487
 MUONSurveyUtil.C:488
 MUONSurveyUtil.C:489
 MUONSurveyUtil.C:490
 MUONSurveyUtil.C:491
 MUONSurveyUtil.C:492
 MUONSurveyUtil.C:493
 MUONSurveyUtil.C:494
 MUONSurveyUtil.C:495
 MUONSurveyUtil.C:496
 MUONSurveyUtil.C:497
 MUONSurveyUtil.C:498
 MUONSurveyUtil.C:499
 MUONSurveyUtil.C:500
 MUONSurveyUtil.C:501
 MUONSurveyUtil.C:502
 MUONSurveyUtil.C:503
 MUONSurveyUtil.C:504
 MUONSurveyUtil.C:505
 MUONSurveyUtil.C:506
 MUONSurveyUtil.C:507
 MUONSurveyUtil.C:508
 MUONSurveyUtil.C:509
 MUONSurveyUtil.C:510
 MUONSurveyUtil.C:511
 MUONSurveyUtil.C:512
 MUONSurveyUtil.C:513
 MUONSurveyUtil.C:514
 MUONSurveyUtil.C:515
 MUONSurveyUtil.C:516
 MUONSurveyUtil.C:517
 MUONSurveyUtil.C:518
 MUONSurveyUtil.C:519
 MUONSurveyUtil.C:520
 MUONSurveyUtil.C:521
 MUONSurveyUtil.C:522
 MUONSurveyUtil.C:523
 MUONSurveyUtil.C:524
 MUONSurveyUtil.C:525
 MUONSurveyUtil.C:526
 MUONSurveyUtil.C:527
 MUONSurveyUtil.C:528
 MUONSurveyUtil.C:529
 MUONSurveyUtil.C:530
 MUONSurveyUtil.C:531
 MUONSurveyUtil.C:532
 MUONSurveyUtil.C:533
 MUONSurveyUtil.C:534
 MUONSurveyUtil.C:535
 MUONSurveyUtil.C:536
 MUONSurveyUtil.C:537
 MUONSurveyUtil.C:538
 MUONSurveyUtil.C:539
 MUONSurveyUtil.C:540
 MUONSurveyUtil.C:541
 MUONSurveyUtil.C:542
 MUONSurveyUtil.C:543
 MUONSurveyUtil.C:544
 MUONSurveyUtil.C:545
 MUONSurveyUtil.C:546
 MUONSurveyUtil.C:547
 MUONSurveyUtil.C:548
 MUONSurveyUtil.C:549
 MUONSurveyUtil.C:550
 MUONSurveyUtil.C:551
 MUONSurveyUtil.C:552
 MUONSurveyUtil.C:553
 MUONSurveyUtil.C:554
 MUONSurveyUtil.C:555
 MUONSurveyUtil.C:556
 MUONSurveyUtil.C:557
 MUONSurveyUtil.C:558
 MUONSurveyUtil.C:559
 MUONSurveyUtil.C:560
 MUONSurveyUtil.C:561
 MUONSurveyUtil.C:562
 MUONSurveyUtil.C:563
 MUONSurveyUtil.C:564
 MUONSurveyUtil.C:565
 MUONSurveyUtil.C:566
 MUONSurveyUtil.C:567
 MUONSurveyUtil.C:568
 MUONSurveyUtil.C:569
 MUONSurveyUtil.C:570
 MUONSurveyUtil.C:571
 MUONSurveyUtil.C:572
 MUONSurveyUtil.C:573
 MUONSurveyUtil.C:574
 MUONSurveyUtil.C:575
 MUONSurveyUtil.C:576
 MUONSurveyUtil.C:577
 MUONSurveyUtil.C:578
 MUONSurveyUtil.C:579
 MUONSurveyUtil.C:580
 MUONSurveyUtil.C:581
 MUONSurveyUtil.C:582
 MUONSurveyUtil.C:583
 MUONSurveyUtil.C:584
 MUONSurveyUtil.C:585
 MUONSurveyUtil.C:586
 MUONSurveyUtil.C:587
 MUONSurveyUtil.C:588
 MUONSurveyUtil.C:589
 MUONSurveyUtil.C:590
 MUONSurveyUtil.C:591
 MUONSurveyUtil.C:592
 MUONSurveyUtil.C:593
 MUONSurveyUtil.C:594
 MUONSurveyUtil.C:595
 MUONSurveyUtil.C:596
 MUONSurveyUtil.C:597
 MUONSurveyUtil.C:598
 MUONSurveyUtil.C:599
 MUONSurveyUtil.C:600
 MUONSurveyUtil.C:601
 MUONSurveyUtil.C:602
 MUONSurveyUtil.C:603
 MUONSurveyUtil.C:604
 MUONSurveyUtil.C:605
 MUONSurveyUtil.C:606
 MUONSurveyUtil.C:607
 MUONSurveyUtil.C:608
 MUONSurveyUtil.C:609
 MUONSurveyUtil.C:610
 MUONSurveyUtil.C:611
 MUONSurveyUtil.C:612
 MUONSurveyUtil.C:613
 MUONSurveyUtil.C:614
 MUONSurveyUtil.C:615
 MUONSurveyUtil.C:616
 MUONSurveyUtil.C:617
 MUONSurveyUtil.C:618
 MUONSurveyUtil.C:619
 MUONSurveyUtil.C:620
 MUONSurveyUtil.C:621
 MUONSurveyUtil.C:622
 MUONSurveyUtil.C:623
 MUONSurveyUtil.C:624
 MUONSurveyUtil.C:625
 MUONSurveyUtil.C:626
 MUONSurveyUtil.C:627
 MUONSurveyUtil.C:628
 MUONSurveyUtil.C:629
 MUONSurveyUtil.C:630
 MUONSurveyUtil.C:631
 MUONSurveyUtil.C:632
 MUONSurveyUtil.C:633
 MUONSurveyUtil.C:634
 MUONSurveyUtil.C:635
 MUONSurveyUtil.C:636