LCOV - code coverage report
Current view: top level - TRD/TRDbase - AliTRDrecoParam.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 82 244 33.6 %
Date: 2016-06-14 17:26:59 Functions: 5 14 35.7 %

          Line data    Source code
       1             : /**************************************************************************
       2             :  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       3             :  *                                                                        *
       4             :  * Author: The ALICE Off-line Project.                                    *
       5             :  * Contributors are mentioned in the code where appropriate.              *
       6             :  *                                                                        *
       7             :  * Permission to use, copy, modify and distribute this software and its   *
       8             :  * documentation strictly for non-commercial purposes is hereby granted   *
       9             :  * without fee, provided that the above copyright notice appears in all   *
      10             :  * copies and that both the copyright notice and this permission notice   *
      11             :  * appear in the supporting documentation. The authors make no claims     *
      12             :  * about the suitability of this software for any purpose. It is          *
      13             :  * provided "as is" without express or implied warranty.                  *
      14             :  **************************************************************************/
      15             : 
      16             : /* $Id$ */
      17             : 
      18             : ///////////////////////////////////////////////////////////////////////////////
      19             : //                                                                           //
      20             : //  Parameter class for the TRD reconstruction                               //
      21             : //                                                                           //
      22             : //  Authors:                                                                 //
      23             : //    Alex Bercuci <A.Bercuci@gsi.de>                                        //
      24             : //    Markus Fasel <M.Fasel@gsi.de>                                          //
      25             : //                                                                           //
      26             : ///////////////////////////////////////////////////////////////////////////////
      27             : 
      28             : #include "AliLog.h"
      29             : 
      30             : #include "AliTRDrecoParam.h"
      31             : 
      32          48 : ClassImp(AliTRDrecoParam)
      33             : 
      34             : 
      35             : //______________________________________________________________
      36             : AliTRDrecoParam::AliTRDrecoParam()
      37           8 :   :AliDetectorRecoParam()
      38           8 :   ,fkdNchdy(12.)
      39           8 :   ,fkMaxTheta(1.0)      
      40           8 :   ,fkMaxPhi(2.0) 
      41           8 :   ,fkRoad0y(6.0)
      42           8 :   ,fkRoad0z(8.5) 
      43           8 :   ,fkRoad1y(2.0)
      44           8 :   ,fkRoad1z(20.0)       
      45           8 :   ,fkRoad2y(3.0)
      46           8 :   ,fkRoad2z(20.0)
      47           8 :   ,fkPtThreshold(2.0) 
      48           8 :   ,fkPlaneQualityThreshold(5.0)// 4.2? under Investigation
      49           8 :   ,fkRoadzMultiplicator(1.5)
      50           8 :   ,fkFindable(.333)
      51           8 :   ,fkChi2Z(30./*14.*//*12.5*/)
      52           8 :   ,fkChi2Y(.25)
      53           8 :   ,fkChi2YSlope(7.73)
      54           8 :   ,fkChi2ZSlope(0.069)
      55           8 :   ,fChi2Cut(25)
      56           8 :   ,fkChi2YCut(0.5)
      57           8 :   ,fkPhiSlope(10.6)
      58           8 :   ,fkNMeanClusters(20.)
      59           8 :   ,fkNSigmaClusters(2.)
      60           8 :   ,fkNClusterNoise(0.)
      61           8 :   ,fkNMeanTracklets(5.5)
      62           8 :   ,fkTrackLikelihood(-15.)
      63           8 :   ,fNumberOfConfigs(3)
      64           8 :   ,fFlags(0)
      65           8 :   ,fRawStreamVersion("DEFAULT")
      66           8 :   ,fdzdxXcrossFactor(0.)
      67           8 :   ,fMinMaxCutSigma(4.)
      68             : //
      69           8 :   ,fZCorrCoefNRC(1.619974) // RS temporary
      70             : //
      71           8 :   ,fMinLeftRightCutSigma(8.)
      72           8 :   ,fClusMaxThresh(4.5)
      73           8 :   ,fClusSigThresh(3.5)
      74           8 :   ,fTCnexp(1)
      75           8 :   ,fRecEveryNTB(1)
      76           8 :   ,fClusterQmin(0)
      77           8 :   ,fNumberOfPresamples(0)
      78           8 :   ,fNumberOfPostsamples(0)
      79          40 : {
      80             :   //
      81             :   // Default constructor
      82             :   //
      83           8 :   fSysCovMatrix[0] = 0.; // y direction (1 cm)
      84           8 :   fSysCovMatrix[1] = 0.; // z direction (1 cm)
      85           8 :   fSysCovMatrix[2] = 0.; // snp
      86           8 :   fSysCovMatrix[3] = 0.; // tgl
      87           8 :   fSysCovMatrix[4] = 0.; // 1/pt
      88             : 
      89             :   // Xe tail cancellation parameters
      90           8 :   fTCParams[0] = 1.156; // r1
      91           8 :   fTCParams[1] = 0.130; // r2
      92           8 :   fTCParams[2] = 0.114; // c1
      93           8 :   fTCParams[3] = 0.624; // c2
      94             :   // Ar tail cancellation parameters
      95           8 :   fTCParams[4] = 6.;    // r1
      96           8 :   fTCParams[5] = 0.62;  // r2
      97           8 :   fTCParams[6] = 0.0087;// c1
      98           8 :   fTCParams[7] = 0.07;  // c2
      99             : 
     100           8 :   memset(fPIDThreshold, 0, AliTRDCalPID::kNMom*sizeof(Double_t));
     101           8 :   memset(fStreamLevel, 0, kTRDreconstructionTasks * sizeof(Int_t));
     102             : 
     103           8 :   SetPIDmethod(AliTRDPIDResponse::kLQ1D);
     104           8 :   SetEightSlices();
     105           8 :   SetImproveTracklets();
     106           8 :   SetLUT();
     107           8 :   SetTailCancelation();
     108           8 :   SetTrackletParams();
     109          16 : }
     110             : 
     111             : //______________________________________________________________
     112             : AliTRDrecoParam::AliTRDrecoParam(const AliTRDrecoParam &ref)
     113           0 :   :AliDetectorRecoParam(ref)
     114           0 :   ,fkdNchdy(ref.fkdNchdy)
     115           0 :   ,fkMaxTheta(ref.fkMaxTheta)
     116           0 :   ,fkMaxPhi(ref.fkMaxPhi)
     117           0 :   ,fkRoad0y(ref.fkRoad0y)
     118           0 :   ,fkRoad0z(ref.fkRoad0z)
     119           0 :   ,fkRoad1y(ref.fkRoad1y)
     120           0 :   ,fkRoad1z(ref.fkRoad1z)
     121           0 :   ,fkRoad2y(ref.fkRoad2y)
     122           0 :   ,fkRoad2z(ref.fkRoad2z)
     123           0 :   ,fkPtThreshold(ref.fkPtThreshold)
     124           0 :   ,fkPlaneQualityThreshold(ref.fkPlaneQualityThreshold)
     125           0 :   ,fkRoadzMultiplicator(ref.fkRoadzMultiplicator)
     126           0 :   ,fkFindable(ref.fkFindable)
     127           0 :   ,fkChi2Z(ref.fkChi2Z)
     128           0 :   ,fkChi2Y(ref.fkChi2Y)
     129           0 :   ,fkChi2YSlope(ref.fkChi2YSlope)
     130           0 :   ,fkChi2ZSlope(ref.fkChi2ZSlope)
     131           0 :   ,fChi2Cut(ref.fChi2Cut)
     132           0 :   ,fkChi2YCut(ref.fkChi2YCut)
     133           0 :   ,fkPhiSlope(ref.fkPhiSlope)
     134           0 :   ,fkNMeanClusters(ref.fkNMeanClusters)
     135           0 :   ,fkNSigmaClusters(ref.fkNSigmaClusters)
     136           0 :   ,fkNClusterNoise(ref.fkNClusterNoise)
     137           0 :   ,fkNMeanTracklets(ref.fkNMeanTracklets)
     138           0 :   ,fkTrackLikelihood(ref.fkTrackLikelihood)
     139           0 :   ,fNumberOfConfigs(ref.fNumberOfConfigs)
     140           0 :   ,fFlags(ref.fFlags)
     141           0 :   ,fRawStreamVersion(ref.fRawStreamVersion)
     142           0 :   ,fdzdxXcrossFactor(ref.fdzdxXcrossFactor)
     143           0 :   ,fMinMaxCutSigma(ref.fMinMaxCutSigma)
     144             : 
     145           0 :   ,fZCorrCoefNRC(ref.fZCorrCoefNRC)
     146             : 
     147           0 :   ,fMinLeftRightCutSigma(ref.fMinLeftRightCutSigma)
     148           0 :   ,fClusMaxThresh(ref.fClusMaxThresh)
     149           0 :   ,fClusSigThresh(ref.fClusSigThresh)
     150           0 :   ,fTCnexp(ref.fTCnexp)
     151           0 :   ,fRecEveryNTB(ref.fRecEveryNTB)
     152           0 :   ,fClusterQmin(ref.fClusterQmin)
     153           0 :   ,fNumberOfPresamples(ref.fNumberOfPresamples)
     154           0 :   ,fNumberOfPostsamples(ref.fNumberOfPostsamples)
     155           0 : {
     156             :   //
     157             :   // Copy constructor
     158             :   //
     159           0 :   memcpy(fSysCovMatrix, ref.fSysCovMatrix, 5*sizeof(Double_t));
     160           0 :   memcpy(fTCParams, ref.fTCParams, 8*sizeof(Double_t));
     161           0 :   memcpy(fPIDThreshold, ref.fPIDThreshold, AliTRDCalPID::kNMom*sizeof(Double_t));
     162           0 :   memcpy(fStreamLevel, ref.fStreamLevel, kTRDreconstructionTasks * sizeof(Int_t));
     163             : 
     164             :   // tracklet params
     165           0 :   memcpy(fdzdxCorrFactor, ref.fdzdxCorrFactor, 2*sizeof(Double_t));
     166           0 :   memcpy(fdzdxCorrRCbias, ref.fdzdxCorrRCbias, 2*sizeof(Double_t));
     167           0 :   memcpy(fYcorrTailCancel, ref.fYcorrTailCancel, 12*sizeof(Double_t));
     168           0 :   memcpy(fS2Ycorr, ref.fS2Ycorr, 4*sizeof(Double_t));
     169           0 : }
     170             : 
     171             : //______________________________________________________________
     172             : AliTRDrecoParam& AliTRDrecoParam::operator=(const AliTRDrecoParam &ref)
     173             : {
     174             :   //
     175             :   // assignment operator
     176             :   //
     177             : 
     178           0 :   if(this == &ref) return *this;
     179           0 :   AliDetectorRecoParam::operator=(ref);
     180           0 :   fkdNchdy              = ref.fkdNchdy;
     181           0 :   fkMaxTheta            = ref.fkMaxTheta;
     182           0 :   fkMaxPhi              = ref.fkMaxPhi;
     183           0 :   fkRoad0y              = ref.fkRoad0y;
     184           0 :   fkRoad0z              = ref.fkRoad0z;
     185           0 :   fkRoad1y              = ref.fkRoad1y;
     186           0 :   fkRoad1z              = ref.fkRoad1z;
     187           0 :   fkRoad2y              = ref.fkRoad2y;
     188           0 :   fkRoad2z              = ref.fkRoad2z;
     189           0 :   fkPtThreshold         = ref.fkPtThreshold;
     190           0 :   fkPlaneQualityThreshold= ref.fkPlaneQualityThreshold;
     191           0 :   fkRoadzMultiplicator  = ref.fkRoadzMultiplicator;
     192           0 :   fkFindable            = ref.fkFindable;
     193           0 :   fkChi2Z               = ref.fkChi2Z;
     194           0 :   fkChi2Y               = ref.fkChi2Y;
     195           0 :   fkChi2YSlope          = ref.fkChi2YSlope;
     196           0 :   fkChi2ZSlope          = ref.fkChi2ZSlope;
     197           0 :   fChi2Cut            = ref.fChi2Cut;
     198           0 :   fkChi2YCut            = ref.fkChi2YCut;
     199           0 :   fkPhiSlope            = ref.fkPhiSlope;
     200           0 :   fkNMeanClusters       = ref.fkNMeanClusters;
     201           0 :   fkNSigmaClusters      = ref.fkNSigmaClusters;
     202           0 :   fkNClusterNoise       = ref.fkNClusterNoise;
     203           0 :   fkNMeanTracklets      = ref.fkNMeanTracklets;
     204           0 :   fkTrackLikelihood     = ref.fkTrackLikelihood;
     205           0 :   fNumberOfConfigs      = ref.fNumberOfConfigs;
     206           0 :   fFlags                = ref.fFlags;
     207           0 :   fRawStreamVersion     = ref.fRawStreamVersion;
     208           0 :   fdzdxXcrossFactor     = ref.fdzdxXcrossFactor;
     209           0 :   fMinMaxCutSigma       = ref.fMinMaxCutSigma;
     210             : 
     211           0 :   fZCorrCoefNRC         = ref.fZCorrCoefNRC;
     212             : 
     213           0 :   fMinLeftRightCutSigma = ref.fMinLeftRightCutSigma;
     214           0 :   fClusMaxThresh        = ref.fClusMaxThresh;
     215           0 :   fClusSigThresh        = ref.fClusSigThresh;
     216           0 :   fTCnexp               = ref.fTCnexp;
     217           0 :   fRecEveryNTB          = ref.fRecEveryNTB;
     218           0 :   fClusterQmin          = ref.fClusterQmin;
     219           0 :   fNumberOfPresamples   = ref.fNumberOfPresamples;
     220           0 :   fNumberOfPostsamples  = ref.fNumberOfPostsamples;
     221             : 
     222           0 :   memcpy(fSysCovMatrix, ref.fSysCovMatrix, 5*sizeof(Double_t));
     223           0 :   memcpy(fTCParams, ref.fTCParams, 8*sizeof(Double_t));
     224           0 :   memcpy(fPIDThreshold, ref.fPIDThreshold, AliTRDCalPID::kNMom*sizeof(Double_t));
     225           0 :   memcpy(fStreamLevel, ref.fStreamLevel, kTRDreconstructionTasks * sizeof(Int_t));
     226             : 
     227             :   // tracklet params
     228           0 :   memcpy(fdzdxCorrFactor, ref.fdzdxCorrFactor, 2*sizeof(Double_t));
     229           0 :   memcpy(fdzdxCorrRCbias, ref.fdzdxCorrRCbias, 2*sizeof(Double_t));
     230           0 :   memcpy(fYcorrTailCancel, ref.fdzdxCorrRCbias, 12*sizeof(Double_t));
     231           0 :   memcpy(fS2Ycorr, ref.fS2Ycorr, 4*sizeof(Double_t));
     232           0 :   return *this;
     233           0 : }
     234             : 
     235             : //______________________________________________________________
     236             : AliTRDrecoParam *AliTRDrecoParam::GetLowFluxParam()
     237             : {
     238             :   //
     239             :   // Parameters for the low flux environment
     240             :   //
     241             : 
     242           0 :   AliTRDrecoParam *rec = new AliTRDrecoParam();
     243           0 :   rec->fkdNchdy = 12.; // pp in TRD
     244           0 :   rec->SetVertexConstrained();
     245           0 :   rec->SetCheckTimeConsistency();
     246           0 :   return rec;
     247             : 
     248           0 : }
     249             : 
     250             : //______________________________________________________________
     251             : AliTRDrecoParam *AliTRDrecoParam::GetLowFluxHLTParam()
     252             : {
     253             :   //
     254             :   // Parameters for the high flux environment in HLT
     255             :   //
     256             : 
     257           0 :   AliTRDrecoParam *rec = GetLowFluxParam();
     258           0 :   rec->fNumberOfConfigs = 2;
     259           0 :   return rec;
     260             : 
     261             : }
     262             : 
     263             : //______________________________________________________________
     264             : AliTRDrecoParam *AliTRDrecoParam::GetHighFluxParam()
     265             : {
     266             :   //
     267             :   // Parameters for the high flux environment
     268             :   //
     269             : 
     270           0 :   AliTRDrecoParam *rec = new AliTRDrecoParam();
     271           0 :   rec->fkdNchdy = 4000.; // PbPb in TRD
     272           0 :   rec->SetVertexConstrained();
     273           0 :   rec->SetCheckTimeConsistency();
     274           0 :   return rec;
     275             : 
     276           0 : }
     277             : 
     278             : //______________________________________________________________
     279             : AliTRDrecoParam *AliTRDrecoParam::GetHighFluxHLTParam()
     280             : {
     281             :   //
     282             :   // Parameters for the high flux environment in HLT
     283             :   //
     284             : 
     285           0 :   AliTRDrecoParam *rec = GetHighFluxParam();
     286           0 :   rec->fNumberOfConfigs = 1;
     287           0 :   return rec;
     288             : 
     289             : }
     290             : 
     291             : //______________________________________________________________
     292             : AliTRDrecoParam *AliTRDrecoParam::GetCosmicTestParam()
     293             : {
     294             :   //
     295             :   // Parameters for the cosmics data
     296             :   //
     297             : 
     298           0 :   AliTRDrecoParam *par = new AliTRDrecoParam();
     299           0 :   par->fSysCovMatrix[0] = 2.; // y direction (1 cm)
     300           0 :   par->fSysCovMatrix[1] = 2.; // z direction (1 cm)
     301           0 :   par->fkChi2YSlope     = 0.11853;
     302           0 :   par->fkChi2ZSlope     = 0.04527;
     303           0 :   par->fkChi2YCut       = 25.;
     304           0 :   par->fkChi2YCut       = 1.;
     305           0 :   par->fkPhiSlope       = 10.; //3.17954;
     306           0 :   par->fkMaxTheta       = 2.1445;
     307           0 :   par->fkMaxPhi         = 2.7475;
     308           0 :   par->fkNMeanClusters  = 12.89;
     309           0 :   par->fkNSigmaClusters = 2.095;
     310           0 :   par->fkRoadzMultiplicator = 3.;
     311           0 :   par->fStreamLevel[kTracker] = 1;
     312           0 :   par->SetCheckTimeConsistency();
     313           0 :   return par;
     314             : 
     315           0 : }
     316             : 
     317             : 
     318             : //______________________________________________________________
     319             : Float_t AliTRDrecoParam::GetNClusters() const
     320             : {
     321             :   // Estimate the number of clusters in the TRD detector
     322             :   
     323           4 :   Float_t nclusters = (fkNMeanClusters + 2*fkNSigmaClusters)*fkNMeanTracklets*fkdNchdy;
     324           2 :   nclusters *= 1.+fkNClusterNoise;
     325           2 :   return nclusters;
     326             : }
     327             : 
     328             : //______________________________________________________________
     329             : void AliTRDrecoParam::SetPIDLQslices(Int_t s)
     330             : {
     331             : // Setting number of slices used by the PID LQ method s={1, 2}
     332             : // If PID NN is set this function will change to PID LQ.
     333             :  
     334           0 :   if(IsPIDNeuralNetwork()){
     335           0 :     AliWarning("PID set to NN. Changing to LQ.");
     336           0 :     SetPIDNeuralNetwork(kFALSE);
     337           0 :   } 
     338             : 
     339           0 :   switch(s){
     340             :   case 1: 
     341           0 :     if(TESTBIT(fFlags, kLQ2D)) CLRBIT(fFlags, kLQ2D);
     342             :     break;
     343             :   case 2:
     344           0 :     SETBIT(fFlags, kLQ2D);
     345           0 :     break;
     346             :   default:
     347           0 :     AliWarning(Form("N[%d] PID LQ slices not implemented. Using default 2.", s));
     348           0 :     SETBIT(fFlags, kLQ2D);
     349           0 :     break;
     350             :   }
     351           0 : }
     352             : 
     353             : //___________________________________________________
     354             : void  AliTRDrecoParam::SetTrackletParams(Double_t *par)
     355             : {
     356             :   // Load tracklet reconstruction parameters. If none are set use defaults
     357          16 :   if(par){
     358             :     // correct dzdx for the bias in z
     359           0 :     fdzdxCorrFactor[0] = par[0];  // !RC 
     360           0 :     fdzdxCorrFactor[1] = par[1];  // RC
     361             :     // correct dzdx in RC tracklets for the bias in cluster attachment
     362           0 :     fdzdxCorrRCbias[0] = par[2];   // dz/dx > 0  
     363           0 :     fdzdxCorrRCbias[1] = par[3];   // dz/dx < 0
     364             :     /// correct x_cross for the bias in dzdx
     365           0 :     fdzdxXcrossFactor  = par[4];
     366             :     // y correction due to wrong tail cancellation. 
     367           0 :     fYcorrTailCancel[0][0] = par[5];fYcorrTailCancel[0][1] = par[6];fYcorrTailCancel[0][2] = par[7]; 
     368           0 :     fYcorrTailCancel[1][0] = par[8];fYcorrTailCancel[1][1] = par[9];fYcorrTailCancel[1][2] = par[10]; 
     369           0 :     fYcorrTailCancel[2][0] = par[11];fYcorrTailCancel[2][1] = par[12];fYcorrTailCancel[2][2] = par[13];
     370           0 :     fYcorrTailCancel[3][0] = par[14];fYcorrTailCancel[3][1] = par[15];fYcorrTailCancel[3][2] = par[16];
     371             :     // inflation factor of error parameterization in r-phi due to wrong estimation of residuals. 
     372           0 :     fS2Ycorr[0] = par[17];
     373           0 :     fS2Ycorr[1] = par[18];
     374           0 :     fS2Ycorr[2] = par[19];
     375           0 :     fS2Ycorr[3] = par[20];
     376             :     
     377           0 :   } else {
     378             :     // correct dzdx for the bias in z
     379           8 :     fdzdxCorrFactor[0] = 1.09;  // !RC 
     380           8 :     fdzdxCorrFactor[1] = 1.05;  // RC
     381             :     // correct dzdx in RC tracklets for the bias in cluster attachment
     382           8 :     fdzdxCorrRCbias[0] = 0.;     // dz/dx > 0  
     383           8 :     fdzdxCorrRCbias[1] = -0.012; // dz/dx < 0
     384             :     /// correct x_cross for the bias in dzdx
     385           8 :     fdzdxXcrossFactor  = 0.14;
     386             :     // y correction due to wrong tail cancellation. 
     387             :         // bz<0 && !RC
     388           8 :     fYcorrTailCancel[0][0] = 0.04; fYcorrTailCancel[0][1] = 2.151; fYcorrTailCancel[0][2] = 0.013;
     389             :         // bz>0 && !RC
     390           8 :     fYcorrTailCancel[1][0] = 0.034; fYcorrTailCancel[1][1] = 1.817; fYcorrTailCancel[1][2] = -0.01;
     391             :         // bz<0 && RC
     392           8 :     fYcorrTailCancel[2][0] = 0.04; fYcorrTailCancel[2][1] = 2.513; fYcorrTailCancel[2][2] = 0.015;
     393             :         // bz>0 && RC
     394           8 :     fYcorrTailCancel[3][0] = 0.034; fYcorrTailCancel[3][1] = 2.476; fYcorrTailCancel[3][2] = -0.01;
     395             :     // inflation factor of error parameterization in r-phi due to wrong estimation of residuals. 
     396             :         // chg<0 && !RC
     397           8 :     fS2Ycorr[0] = 5.52; 
     398             :         // chg>0 && !RC
     399           8 :     fS2Ycorr[1] = 3.61; 
     400             :         // chg<0 && RC
     401           8 :     fS2Ycorr[2] = 4.84; 
     402             :         // chg>0 && RC
     403           8 :     fS2Ycorr[3] = 3.24; 
     404             :   }
     405           8 : }

Generated by: LCOV version 1.11