]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/Correlations/JCORRAN/AliJCard.cxx
Fixing compilation issues after merging
[u/mrichter/AliRoot.git] / PWGCF / Correlations / JCORRAN / AliJCard.cxx
1 //====================================
2 //last modified FK 6.NOV 2009
3 //====================================
4 //blah
5 // blah
6
7 #include "AliJCard.h"
8
9 //ClassImp(AliJCard);
10
11 AliJCard::AliJCard():
12     AliJBaseCard(),
13     fhCorr(0),
14     feventV3kv(0),
15     fIndexVector(0),
16     fpi0massbin(0)
17 {   
18     //constructor
19 }
20
21 AliJCard::AliJCard(const char *filename):
22     AliJBaseCard(filename),
23     fhCorr(0),
24     feventV3kv(0),
25     fIndexVector(0),
26     fpi0massbin(0)
27 {  
28     //constructor
29     InitCard();
30     MakeFastCorrTypeIndex();
31 }
32
33
34
35 AliJCard::AliJCard(const AliJCard& obj) : 
36     AliJBaseCard(),
37     fhCorr(obj.fhCorr),
38     feventV3kv(obj.feventV3kv),
39     fIndexVector(obj.fIndexVector),
40     fpi0massbin(obj.fpi0massbin)
41 {
42     // copy constructor
43     JUNUSED(obj);
44 }
45
46
47 AliJCard& AliJCard::operator=(const AliJCard& obj){
48     // copy constructor
49     JUNUSED(obj);
50     return *this;
51 }
52
53 AliJCard::~AliJCard(){
54     // destructor
55     if( fpi0massbin ){
56         for( int i = 0; i < GetNoOfBins( kCentrType ); i++ ){
57             delete [] fpi0massbin[i];
58         }    // destructor
59         delete [] fpi0massbin;
60     }
61     if( fhCorr ){
62         delete fhCorr;
63     }
64 }
65
66 void AliJCard::MakeFastCorrTypeIndex(){
67     // make fast findex array
68     for( unsigned int i=0;i<fKeyWordVector.size();i++ ){
69         int corrIndex = GetCorrType( fKeyWordVector[i] );
70         if( corrIndex != kNoType )
71             fIndexVector[corrIndex] = i;
72     }
73
74 }
75
76 int AliJCard::IsLessThanUpperPairPtCut(double inPairPt){ 
77     // pt cut
78     int nB = GetN("UpperPairPtCut");
79     if(inPairPt == -999) return nB;
80     if(-999 < inPairPt && inPairPt <=0) return int(Get("UpperPairPtCut",-int(inPairPt)));
81     int bin=-1, i=0;
82     while(i<nB && inPairPt>Get("UpperPairPtCut",i)) i++;
83     if(i<nB) bin=i;
84     //cout<<" i="<<i<<" bin="<<bin<<" inval="<<inPairPt<<endl;;
85     return bin;
86 }
87
88
89
90 TString AliJCard::GetKeyWord(corrType ctype){
91     // get keyword
92     TString kw;
93
94     switch(ctype){
95         case kTriggType:  kw = "TriggPtBorders"; break;
96         case kAssocType:  kw = "AssocPtBorders"; break;
97         case kXeType:     kw = "xEBorders"; break;
98         case kLongType:   kw = "KlongBorders"; break;
99         case kCentrType:  kw = "CentBinBorders"; break;
100         case kZVertType:  kw = "zVertBins"; break;
101         case kMassType:   kw = "PairInvariantMassBins"; break;
102         case kEtaGapType: kw = "EtaGapThresholds"; break;
103         case kDiJetType:  kw = "DiJetMassBorders"; break;
104         case kRGapType:   kw = "RGapThresholds"; break;
105                           //case kEPType:  kw = "EPBorders"; break;
106         default : cout<<"ERROR: kNoType on input to AliJCard::GetKeyWord"<<endl; exit(1); break;
107     }
108     return kw; 
109 }
110
111 corrType AliJCard::GetCorrType( TString inStr ){
112     // get corr type
113     TString kw;
114
115     int i;
116     TString s;
117
118     // go through all corrType to check if the parameter should be added
119     // into fast findex array
120     for( i = 0; i < kNcorrType; i++ ){
121         if( i == kNoType )
122             continue;
123
124         s = GetKeyWord( (corrType)i );
125         if( ! strcmp( s.Data(), inStr.Data() ))
126             return (corrType)i;
127     }
128
129     return kNoType; 
130 }
131
132 int AliJCard::GetN(corrType ctype){
133     //returns size of TVector
134     return GetN(GetKeyWord(ctype));
135 }
136
137 int AliJCard::GetNFast(corrType ctype){
138     //returns size of TVector
139     int findex = fIndexVector[ctype];
140     if( findex > -1 ){
141         return (int) fValuesVector[findex].GetNrows();
142     }else{
143         cout<<"ERROR: fValuesVector fast findex out of range "<< findex << " " << (GetKeyWord( ctype )).Data() << endl;
144         exit(1);
145     }
146 }
147
148
149 float AliJCard::Get(corrType ctype, int VectorComponent){
150     //returns VectorComponent Component of  fValuesVecto`uor TVector for given keyword
151     return Get(GetKeyWord(ctype), VectorComponent);
152 }
153
154 float AliJCard::GetFast(corrType ctype, int VectorComponent){
155     // fast get
156
157     if(0<=VectorComponent && VectorComponent<GetNFast(ctype) && fIndexVector[ctype] > -1 ){
158         return fValuesVector[fIndexVector[ctype]][VectorComponent+1];
159     }else{
160         cout<<"ERROR: fValuesVector fast findex out of range "<< (GetKeyWord(ctype)).Data()<<endl;
161         exit(1);
162     }
163 }
164
165 void AliJCard::ReCompile(){
166     InitCard();
167     MakeFastCorrTypeIndex();
168 }
169
170
171 void AliJCard::InitCard(){
172     // Init card
173     cout<<"Init of AliJCard"<<endl;
174     // set the length of fIndexVector and disable all indices
175     fIndexVector.resize( kNcorrType  );
176     for( int i = 0; i < kNcorrType; i++ )
177         fIndexVector[i] = -1;
178 }
179
180 void AliJCard::FinishCard(){
181     // Finish loading of card
182     AliJBaseCard::FinishCard();
183     // recompute fast idices
184
185     fpi0massbin = new Double_t*[GetNoOfBins( kCentrType )];
186
187     char centstr[10];
188
189     // read the pi0 mass bin parameters
190     for( int i = 0; i < GetNoOfBins( kCentrType ); i++ ){
191         fpi0massbin[i] = new Double_t[8];
192
193         for( int j = 0; j < 8; j++ ){
194             sprintf( centstr, "cent%d", i );
195             fpi0massbin[i][j] = Get( centstr, j );
196         }
197     }
198
199 }
200
201 void AliJCard::PrintOut(){
202     // Print out contents of card
203     AliJBaseCard::PrintOut();
204     cout << "----- fast array ----------" << endl;
205     for( unsigned int ii = 0; ii < fIndexVector.size(); ii++ ){
206         if( ii == kNoType )
207             continue;
208         cout << (GetKeyWord( (corrType)ii )).Data() << " " << fIndexVector[ii];
209         if( fIndexVector[ii] > -1 ){
210             cout<<" (dim ="<<fValuesVector[fIndexVector[ii]].GetNrows()<<") ";//print size of TVector
211             for(int j=1; j<=fValuesVector[fIndexVector[ii]].GetNrows(); j++){
212                 cout<<fValuesVector[fIndexVector[ii]][j]<<" ";//TVector components
213             }
214         }
215         else
216             cout << " no link!";
217
218         cout << endl;  
219     }
220 }
221
222 int AliJCard::GetBin(corrType ctype, float val){
223     // get bin
224
225     if(ctype == kNoType) return 0;
226
227     TVector * v = &fValuesVector[fIndexVector[ctype]];
228     int iBin2 = TMath::BinarySearch( v->GetNrows(), v->GetMatrixArray(), val );
229     if( iBin2 >= v->GetNrows()-1 ) iBin2 = -1;
230
231     return iBin2;
232 }
233
234 int AliJCard::GetBinFast(corrType ctype, float val){
235     // fast get bin
236
237     if(ctype == kNoType) return 0;
238
239     for(int i=0; i<(GetNFast(ctype)-1); i++)
240         if(GetFast(ctype,i)<=val && val<GetFast(ctype,i+1))
241             return i;
242
243     return -1;
244 }
245
246
247
248 bool AliJCard::IsGoodRun(int runID){
249     // run quality
250     bool isgood = true;
251     for(int i=0; i<GetN("badRuns");i++) if(((int) Get("badRuns",i)) == runID) isgood = false;
252
253     return isgood;
254 }
255
256 bool AliJCard::MbTrigger(int triggin) const {
257     // MB trigger
258     return (triggin & (1<<kMinBiasTriggerBitJCorran)) > 0; //masking on >0 masking off ==0 desired trigger
259 }
260
261
262 bool AliJCard::SimilarVertZ(float Z1, float Z2){
263     // z vert
264     static double v = Get("maxMixDZ");
265     if( v < 0 ) return 1;
266     return fabs(Z1-Z2) < v ;
267 }
268
269 bool AliJCard::SimilarMultiplicity(float mult1, float mult2){
270     // multi
271     static double v = Get("maxMixDMult");
272     if( v <0) return 1;
273     return fabs(mult1-mult2) < v;
274 }
275
276
277 bool AliJCard::SimilarCentrality(float c1, float c2, int cbin){
278     // centra
279     static TVector *v = GetVector("maxDCent");
280     if(v==NULL) return 1;
281     return fabs(c1-c2) < (*v)[cbin+1]; // TODO
282 }
283
284
285 //--------- P H E N I X    C G L --------------
286
287 bool AliJCard::InPhiRange(float Phi){
288     // phi
289     bool isIn = false; 
290     for(int i=1; i<GetN("phiDCRange"); i+=2 ) 
291         isIn = isIn || (Get("phiDCRange",i-1)<Phi && Phi<Get("phiDCRange",i));
292     return isIn;
293
294
295
296
297 bool  AliJCard::CheckTrackParamsInTPC(int NClustersTPC,float Chi2PerClusterTPC){
298     // tpc pars
299     bool isGoodTrack = true;
300     if(NClustersTPC < Get("MinNClustersTPC"))           isGoodTrack = false;
301     if(Chi2PerClusterTPC > Get("MaxChi2PerClusterTPC")) isGoodTrack = false;
302     return isGoodTrack;
303 }
304
305 bool  AliJCard::CheckMinNumTPCClustPt(int NClustersTPC, float fpt){
306     // tpc pars
307     float minNTPCCls =  Get("ParMinNClustTPCPt",0)*log(Get("ParMinNClustTPCPt",1)*fpt + Get("ParMinNClustTPCPt",2)); 
308     if(NClustersTPC > minNTPCCls) return true; //track had enough clusters
309     else return false;  //track did not have sufficient number of clusters
310 }
311
312
313 bool  AliJCard::CheckTrackImpact(float xyIm, float zIm, float fpt){
314     // tpc pars
315     bool isGoodTrack = true;
316     if(TMath::Abs(xyIm) > Get("ParMaxDCAToVertexXYPtDep",0)+Get("ParMaxDCAToVertexXYPtDep",1)/pow(fpt,Get("ParMaxDCAToVertexXYPtDep",2))){
317         isGoodTrack = false;
318     }
319     if(TMath::Abs(zIm) > Get("MaxDCAToVertexZ")) isGoodTrack = false;
320
321     return isGoodTrack;
322 }
323
324
325
326 bool AliJCard::DeltaEtaCheck(const AliJBaseTrack *ftk1, const AliJBaseTrack *ftk2) {
327     // deta
328     double delta = fabs( log(tan(ftk1->Theta()/2.0)) -  log(tan(ftk2->Theta()/2.0)) );
329     if(Get("etaCut")>0) return delta < Get("etaCut");
330     if(Get("etaCut")<0) return delta > Get("etaCut");
331
332     return true;
333 }
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354