]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSDriftSpeedArraySDD.cxx
- AliITSInitGeometry.cxx (updated): fgkOldSSDcone changed from kTRUE to
[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 <TClonesArray.h>
26 #include "AliITSDriftSpeedArraySDD.h"
27 #include "AliITSDriftSpeedSDD.h"
28 #include "AliLog.h"
29
30 ClassImp(AliITSDriftSpeedArraySDD)
31 //______________________________________________________________________
32 AliITSDriftSpeedArraySDD::AliITSDriftSpeedArraySDD():
33 TObject(),
34 fNEvents(0),
35 fDriftSpeedSDD(0){
36   // default constructor
37   fDriftSpeedSDD=new TClonesArray("AliITSDriftSpeedSDD",100);
38 }
39 //______________________________________________________________________
40 AliITSDriftSpeedArraySDD::AliITSDriftSpeedArraySDD(Int_t numEv):
41 TObject(),
42 fNEvents(0),
43 fDriftSpeedSDD(0){
44   // standard constructor
45   fDriftSpeedSDD=new TClonesArray("AliITSDriftSpeedSDD",numEv);
46 }
47 //______________________________________________________________________
48 AliITSDriftSpeedArraySDD::AliITSDriftSpeedArraySDD(const AliITSDriftSpeedArraySDD& array):
49 TObject(),
50 fNEvents(array.fNEvents),
51 fDriftSpeedSDD(array.fDriftSpeedSDD){
52   // copy constructor
53 }
54 //______________________________________________________________________
55 AliITSDriftSpeedArraySDD& AliITSDriftSpeedArraySDD::operator=(const AliITSDriftSpeedArraySDD& array){
56   // assignment operator
57   this->~AliITSDriftSpeedArraySDD();
58   new(this) AliITSDriftSpeedArraySDD(array);
59   return *this;
60 }
61
62 //______________________________________________________________________
63 AliITSDriftSpeedArraySDD::~AliITSDriftSpeedArraySDD(){
64   // destructor
65   if(fDriftSpeedSDD){
66     fDriftSpeedSDD->Delete();
67     delete fDriftSpeedSDD;
68   }
69 }
70 //______________________________________________________________________
71 void AliITSDriftSpeedArraySDD::AddDriftSpeed(AliITSDriftSpeedSDD* drSpeed){
72   // adds an AliITSDriftSpeedSDD object in the array
73   TClonesArray &arr = *fDriftSpeedSDD;
74   new(arr[fNEvents]) AliITSDriftSpeedSDD(*drSpeed);
75   fNEvents++;
76   
77 }
78 //______________________________________________________________________
79 void AliITSDriftSpeedArraySDD::PrintAll() const{
80   // print drift speed parameters for all elements in the array
81   printf("Array Size=%d\n",fDriftSpeedSDD->GetSize());
82   printf("Array Elements =%d\n",fNEvents);
83   for(Int_t i=0;i<fNEvents; i++){
84     printf("     ====== Array el. #%d ======\n",i);
85     AliITSDriftSpeedSDD *d=(AliITSDriftSpeedSDD*)fDriftSpeedSDD->At(i);
86     if(d) d->PrintDriftSpeedParameters();
87   }
88 }
89 //______________________________________________________________________
90 Float_t AliITSDriftSpeedArraySDD::GetDriftSpeed(Int_t iEvent, Float_t iAnode) const{
91   // returns drift speed for given event number and anode
92   if(!fDriftSpeedSDD->IsSorted()) fDriftSpeedSDD->Sort();
93   if(fNEvents==1){
94     AliITSDriftSpeedSDD *d=(AliITSDriftSpeedSDD*)fDriftSpeedSDD->At(0);
95     return d->GetDriftSpeedAtAnode(iAnode);
96   }else{
97     Int_t nInjEv1=-1;
98     Int_t nInjEv2=-1;
99     AliITSDriftSpeedSDD *d1=NULL;
100     AliITSDriftSpeedSDD *d2=NULL;
101     for(Int_t i=0;i<fNEvents; i++){
102       d1=d2;
103       d2=(AliITSDriftSpeedSDD*)fDriftSpeedSDD->At(i);
104       nInjEv1=nInjEv2;
105       if(d2!=0){
106         nInjEv2=d2->GetEventNumber();
107         if(nInjEv2>=iEvent){
108           if(i==0) d1=(AliITSDriftSpeedSDD*)fDriftSpeedSDD->At(i+1);
109           nInjEv1=d1->GetEventNumber();
110           break;
111         }
112       }
113     }
114     if(nInjEv1>=0 && nInjEv2>=0 && nInjEv1!=nInjEv2){
115       Float_t v1=d1->GetDriftSpeedAtAnode(iAnode);
116       Float_t v2=d2->GetDriftSpeedAtAnode(iAnode);
117       Float_t vdrift=(v2-v1)*(iEvent-nInjEv1)/(nInjEv2-nInjEv1)+v1;
118       return vdrift;
119     }
120   }
121   AliWarning("Vdrift interpolation error\n");
122   return -999.;
123 }