1 //====================================
2 //last modified FK 6.NOV 2009
3 //====================================
21 AliJCard::AliJCard(const char *filename):
22 AliJBaseCard(filename),
30 MakeFastCorrTypeIndex();
35 AliJCard::AliJCard(const AliJCard& obj) :
38 feventV3kv(obj.feventV3kv),
39 fIndexVector(obj.fIndexVector),
40 fpi0massbin(obj.fpi0massbin)
47 AliJCard& AliJCard::operator=(const AliJCard& obj){
53 AliJCard::~AliJCard(){
56 for( int i = 0; i < GetNoOfBins( kCentrType ); i++ ){
57 delete [] fpi0massbin[i];
59 delete [] fpi0massbin;
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;
76 int AliJCard::IsLessThanUpperPairPtCut(double inPairPt){
78 int nB = GetN("UpperPairPtCut");
79 if(inPairPt == -999) return nB;
80 if(-999 < inPairPt && inPairPt <=0) return int(Get("UpperPairPtCut",-int(inPairPt)));
82 while(i<nB && inPairPt>Get("UpperPairPtCut",i)) i++;
84 //cout<<" i="<<i<<" bin="<<bin<<" inval="<<inPairPt<<endl;;
90 TString AliJCard::GetKeyWord(corrType 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;
111 corrType AliJCard::GetCorrType( TString inStr ){
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++ ){
124 s = GetKeyWord( (corrType)i );
125 if( ! strcmp( s.Data(), inStr.Data() ))
132 int AliJCard::GetN(corrType ctype){
133 //returns size of TVector
134 return GetN(GetKeyWord(ctype));
137 int AliJCard::GetNFast(corrType ctype){
138 //returns size of TVector
139 int findex = fIndexVector[ctype];
141 return (int) fValuesVector[findex].GetNrows();
143 cout<<"ERROR: fValuesVector fast findex out of range "<< findex << " " << (GetKeyWord( ctype )).Data() << endl;
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);
154 float AliJCard::GetFast(corrType ctype, int VectorComponent){
157 if(0<=VectorComponent && VectorComponent<GetNFast(ctype) && fIndexVector[ctype] > -1 ){
158 return fValuesVector[fIndexVector[ctype]][VectorComponent+1];
160 cout<<"ERROR: fValuesVector fast findex out of range "<< (GetKeyWord(ctype)).Data()<<endl;
165 void AliJCard::ReCompile(){
167 MakeFastCorrTypeIndex();
171 void AliJCard::InitCard(){
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;
180 void AliJCard::FinishCard(){
181 // Finish loading of card
182 AliJBaseCard::FinishCard();
183 // recompute fast idices
185 fpi0massbin = new Double_t*[GetNoOfBins( kCentrType )];
189 // read the pi0 mass bin parameters
190 for( int i = 0; i < GetNoOfBins( kCentrType ); i++ ){
191 fpi0massbin[i] = new Double_t[8];
193 for( int j = 0; j < 8; j++ ){
194 sprintf( centstr, "cent%d", i );
195 fpi0massbin[i][j] = Get( centstr, j );
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++ ){
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
222 int AliJCard::GetBin(corrType ctype, float val){
225 if(ctype == kNoType) return 0;
227 TVector * v = &fValuesVector[fIndexVector[ctype]];
228 int iBin2 = TMath::BinarySearch( v->GetNrows(), v->GetMatrixArray(), val );
229 if( iBin2 >= v->GetNrows()-1 ) iBin2 = -1;
234 int AliJCard::GetBinFast(corrType ctype, float val){
237 if(ctype == kNoType) return 0;
239 for(int i=0; i<(GetNFast(ctype)-1); i++)
240 if(GetFast(ctype,i)<=val && val<GetFast(ctype,i+1))
248 bool AliJCard::IsGoodRun(int runID){
251 for(int i=0; i<GetN("badRuns");i++) if(((int) Get("badRuns",i)) == runID) isgood = false;
256 bool AliJCard::MbTrigger(int triggin) const {
258 return (triggin & (1<<kMinBiasTriggerBitJCorran)) > 0; //masking on >0 masking off ==0 desired trigger
262 bool AliJCard::SimilarVertZ(float Z1, float Z2){
264 static double v = Get("maxMixDZ");
265 if( v < 0 ) return 1;
266 return fabs(Z1-Z2) < v ;
269 bool AliJCard::SimilarMultiplicity(float mult1, float mult2){
271 static double v = Get("maxMixDMult");
273 return fabs(mult1-mult2) < v;
277 bool AliJCard::SimilarCentrality(float c1, float c2, int cbin){
279 static TVector *v = GetVector("maxDCent");
280 if(v==NULL) return 1;
281 return fabs(c1-c2) < (*v)[cbin+1]; // TODO
285 //--------- P H E N I X C G L --------------
287 bool AliJCard::InPhiRange(float Phi){
290 for(int i=1; i<GetN("phiDCRange"); i+=2 )
291 isIn = isIn || (Get("phiDCRange",i-1)<Phi && Phi<Get("phiDCRange",i));
297 bool AliJCard::CheckTrackParamsInTPC(int NClustersTPC,float Chi2PerClusterTPC){
299 bool isGoodTrack = true;
300 if(NClustersTPC < Get("MinNClustersTPC")) isGoodTrack = false;
301 if(Chi2PerClusterTPC > Get("MaxChi2PerClusterTPC")) isGoodTrack = false;
305 bool AliJCard::CheckMinNumTPCClustPt(int NClustersTPC, float fpt){
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
313 bool AliJCard::CheckTrackImpact(float xyIm, float zIm, float fpt){
315 bool isGoodTrack = true;
316 if(TMath::Abs(xyIm) > Get("ParMaxDCAToVertexXYPtDep",0)+Get("ParMaxDCAToVertexXYPtDep",1)/pow(fpt,Get("ParMaxDCAToVertexXYPtDep",2))){
319 if(TMath::Abs(zIm) > Get("MaxDCAToVertexZ")) isGoodTrack = false;
326 bool AliJCard::DeltaEtaCheck(const AliJBaseTrack *ftk1, const AliJBaseTrack *ftk2) {
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");