Correct formula for phi, in case of current local X <0, in GetLocalXat and GetPhiZat
[u/mrichter/AliRoot.git] / ITS / AliITSDriftSpeedArraySDD.cxx
1 /**************************************************************************
2  * Copyright(c) 2007-2009, 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 // Implementation of the class with array of AliITSDriftSpeedSDD //
21 // Origin: F.Prino, Torino, prino@to.infn.it                     //
22 //                                                               //
23 ///////////////////////////////////////////////////////////////////
24
25 #include "AliITSDriftSpeedArraySDD.h"
26 #include "AliITSDriftSpeedSDD.h"
27 #include "AliLog.h"
28
29 ClassImp(AliITSDriftSpeedArraySDD)
30 //______________________________________________________________________
31 AliITSDriftSpeedArraySDD::AliITSDriftSpeedArraySDD():
32 TObject(),
33 fNEvents(0),
34 fDriftSpeedSDD(10){
35   // default constructor
36 }
37 //______________________________________________________________________
38 AliITSDriftSpeedArraySDD::AliITSDriftSpeedArraySDD(Int_t numEv):
39 TObject(),
40 fNEvents(0),
41 fDriftSpeedSDD(numEv){
42   // standard constructor
43 }
44 //______________________________________________________________________
45 void AliITSDriftSpeedArraySDD::AddDriftSpeed(AliITSDriftSpeedSDD* drSpeed){
46   // adds an AliITSDriftSpeedSDD object in the array
47   fDriftSpeedSDD.AddLast(drSpeed);
48   fNEvents++;
49 }
50 //______________________________________________________________________
51 void AliITSDriftSpeedArraySDD::PrintAll() const{
52   // print drift speed parameters for all elements in the array
53   printf("Array Size=%d\n",fDriftSpeedSDD.GetSize());
54   printf("Array Elements =%d\n",fNEvents);
55   for(Int_t i=0;i<fNEvents; i++){
56     printf("     ====== Array el. #%d ======\n",i);
57     AliITSDriftSpeedSDD *d=(AliITSDriftSpeedSDD*)fDriftSpeedSDD.At(i);
58     if(d) d->PrintDriftSpeedParameters();
59   }
60 }
61 //______________________________________________________________________
62 Double_t AliITSDriftSpeedArraySDD::GetDriftSpeed(Int_t iEvent, Double_t iAnode){
63   // returns drift speed for given event number and anode
64   if(!fDriftSpeedSDD.IsSorted()) fDriftSpeedSDD.Sort();
65   if(fNEvents==1){
66     AliITSDriftSpeedSDD *d=(AliITSDriftSpeedSDD*)fDriftSpeedSDD.At(0);
67     return d->GetDriftSpeedAtAnode(iAnode);
68   }else{
69     Int_t nInjEv1=-1;
70     Int_t nInjEv2=-1;
71     AliITSDriftSpeedSDD *d1=NULL;
72     AliITSDriftSpeedSDD *d2=NULL;
73     for(Int_t i=0;i<fNEvents; i++){
74       d1=d2;
75       d2=(AliITSDriftSpeedSDD*)fDriftSpeedSDD.At(i);
76       nInjEv1=nInjEv2;
77       if(d2!=0){
78         nInjEv2=d2->GetEventNumber();
79         if(nInjEv2>=iEvent){
80           if(i==0) d1=(AliITSDriftSpeedSDD*)fDriftSpeedSDD.At(i+1);
81           nInjEv1=d1->GetEventNumber();
82           break;
83         }
84       }
85     }
86     if(nInjEv1>=0 && nInjEv2>=0 && nInjEv1!=nInjEv2){
87       Double_t v1=d1->GetDriftSpeedAtAnode(iAnode);
88       Double_t v2=d2->GetDriftSpeedAtAnode(iAnode);
89       Double_t vdrift=(v2-v1)*(iEvent-nInjEv1)/(nInjEv2-nInjEv1)+v1;
90       return vdrift;
91     }
92   }
93   AliWarning("Vdrift interpolation error\n");
94   return -999.;
95 }