TRD nSigma OADB related new codes and modifications and OADB root file -- Xianguo Lu
[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 fInjectorStatus(0x3E000000){
36   // default constructor
37 }
38 //______________________________________________________________________
39 AliITSDriftSpeedArraySDD::AliITSDriftSpeedArraySDD(Int_t numEv):
40 TObject(),
41 fNEvents(0),
42 fDriftSpeedSDD(numEv),
43 fInjectorStatus(0x3E000000){
44   // standard constructor
45 }
46 //______________________________________________________________________
47 void AliITSDriftSpeedArraySDD::AddDriftSpeed(AliITSDriftSpeedSDD* drSpeed){
48   // adds an AliITSDriftSpeedSDD object in the array
49   fDriftSpeedSDD.AddLast(drSpeed);
50   fNEvents++;
51 }
52 //______________________________________________________________________
53 void AliITSDriftSpeedArraySDD::PrintAll() const{
54   // print drift speed parameters for all elements in the array
55   printf("Array Size=%d\n",fDriftSpeedSDD.GetSize());
56   printf("Array Elements =%d\n",fNEvents);
57   printf("Injector Status =%d\n",fInjectorStatus);
58   for(Int_t i=0;i<fNEvents; i++){
59     printf("     ====== Array el. #%d ======\n",i);
60     AliITSDriftSpeedSDD *d=(AliITSDriftSpeedSDD*)fDriftSpeedSDD.At(i);
61     if(d) d->PrintDriftSpeedParameters();
62   }
63 }
64 //______________________________________________________________________
65 UInt_t AliITSDriftSpeedArraySDD::GetTimestamp(Int_t iElement){
66   // returns time stamp
67   if(!fDriftSpeedSDD.IsSorted()) fDriftSpeedSDD.Sort();
68   if(fNEvents<iElement) return 0;
69   AliITSDriftSpeedSDD *d=(AliITSDriftSpeedSDD*)fDriftSpeedSDD.At(iElement);
70   return d->GetEventTimestamp();
71 }
72 //______________________________________________________________________
73 Double_t AliITSDriftSpeedArraySDD::GetDriftSpeed(Int_t iEvent, Double_t iAnode){
74   // returns drift speed for given event number and anode
75   if(!fDriftSpeedSDD.IsSorted()) fDriftSpeedSDD.Sort();
76   if(fNEvents==1){
77     AliITSDriftSpeedSDD *d=(AliITSDriftSpeedSDD*)fDriftSpeedSDD.At(0);
78     return d->GetDriftSpeedAtAnode(iAnode);
79   }else{
80     Int_t nInjEv1=-1;
81     Int_t nInjEv2=-1;
82     AliITSDriftSpeedSDD *d1=NULL;
83     AliITSDriftSpeedSDD *d2=NULL;
84     for(Int_t i=0;i<fNEvents; i++){
85       d1=d2;
86       d2=(AliITSDriftSpeedSDD*)fDriftSpeedSDD.At(i);
87       nInjEv1=nInjEv2;
88       if(d2!=0){
89         nInjEv2=d2->GetEventNumber();
90         if(nInjEv2>=iEvent){
91           if(i==0) d1=(AliITSDriftSpeedSDD*)fDriftSpeedSDD.At(i+1);
92           nInjEv1=d1->GetEventNumber();
93           break;
94         }
95       }
96     }
97     if(nInjEv1>=0 && nInjEv2>=0 && nInjEv1!=nInjEv2){
98       Double_t v1=d1->GetDriftSpeedAtAnode(iAnode);
99       Double_t v2=d2->GetDriftSpeedAtAnode(iAnode);
100       Double_t vdrift=(v2-v1)*(iEvent-nInjEv1)/(nInjEv2-nInjEv1)+v1;
101       return vdrift;
102     }
103   }
104   AliWarning("Vdrift interpolation error\n");
105   return -999.;
106 }