ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
//
// Container class for the reference distributions for TRD PID
// The class contains the reference distributions and the momentum steps
// the references are taken at. Mapping is done inside. To derive references,
// the functions GetUpperReference and GetLowerReference return the next
// reference distribution object and the momentum step above respectively below
// the tracklet momentum.
//
// Authors:
//    Markus Fasel <M.Fasel@gsi.de>
//    Daniel Lohner <Daniel.Lohner@cern.ch>

#include "AliLog.h"

#include "AliTRDPIDResponseObject.h"

#ifndef AliTRDPIDREFERENCE_H
#include "AliTRDPIDReference.h"
#endif

#ifndef AliTRDPIDPARAMS_H
#include "AliTRDPIDParams.h"
#endif


ClassImp(AliTRDPIDResponseObject)

//____________________________________________________________
AliTRDPIDResponseObject::AliTRDPIDResponseObject():
    TNamed(),
    fNSlicesQ0(4)
{
    //
    // Dummy constructor
    //
    SetBit(kIsOwner, kTRUE);

    for(Int_t method=0;method<AliTRDPIDResponse::kNMethod;method++){
	fPIDParams[method]=NULL;
	fPIDReference[method]=NULL;
    }
}

//____________________________________________________________
AliTRDPIDResponseObject::AliTRDPIDResponseObject(const Char_t *name):
TNamed(name, "TRD PID Response Object"),
fNSlicesQ0(4)
{
	//
	// Default constructor
	//
	SetBit(kIsOwner, kTRUE);

	for(Int_t method=0;method<AliTRDPIDResponse::kNMethod;method++){
	    fPIDParams[method]=NULL;
	    fPIDReference[method]=NULL;
	}
}

//____________________________________________________________
AliTRDPIDResponseObject::AliTRDPIDResponseObject(const AliTRDPIDResponseObject &ref):
TNamed(ref),
fNSlicesQ0(ref.fNSlicesQ0)
{
    //
    // Copy constructor
    // Only copies pointers, object is not the owner of the references
    //
    SetBit(kIsOwner, kFALSE);

    for(Int_t method=0;method<AliTRDPIDResponse::kNMethod;method++){
	fPIDParams[method]=ref.fPIDParams[method];       // new Object is not owner, copy only pointer
	fPIDReference[method]=ref.fPIDReference[method];    // new Object is not owner, copy only pointer
    }
}
//____________________________________________________________
AliTRDPIDResponseObject &AliTRDPIDResponseObject::operator=(const AliTRDPIDResponseObject &ref){
	//
	// Assginment operator
	// Only copies poiters, object is not the owner of the references
	//
	if(this != &ref){
	    TNamed::operator=(ref);
	    fNSlicesQ0=ref.fNSlicesQ0;
	    for(Int_t method=0;method<AliTRDPIDResponse::kNMethod;method++){
	      if(TestBit(kIsOwner) && fPIDParams[method]){
		delete fPIDParams[method];
		fPIDParams[method]= 0;
	      }
	      if(TestBit(kIsOwner) && fPIDReference[method]){
		delete fPIDReference[method];
		fPIDReference[method] = 0;
	      }
	      printf("Assignment");
	      fPIDParams[method]=ref.fPIDParams[method];       // new Object is not owner, copy only pointer
	      fPIDReference[method]=ref.fPIDReference[method];    // new Object is not owner, copy only pointer
	    }
	    SetBit(kIsOwner, kFALSE);
	}
	return *this;
}

//____________________________________________________________
AliTRDPIDResponseObject::~AliTRDPIDResponseObject(){
	//
	// Destructor
	// references are deleted if the object is the owner
	//
    for(Int_t method=0;method<AliTRDPIDResponse::kNMethod;method++){
	if(fPIDParams[method] && TestBit(kIsOwner)){
	delete fPIDParams[method];fPIDParams[method] = 0;
      }
      if(fPIDReference[method] && TestBit(kIsOwner)){
	delete fPIDReference[method];
	fPIDReference[method] = 0;
      }
    }
}

//____________________________________________________________
void AliTRDPIDResponseObject::SetPIDParams(AliTRDPIDParams *params,AliTRDPIDResponse::ETRDPIDMethod method){

    if(Int_t(method)>=Int_t(AliTRDPIDResponse::kNMethod)||Int_t(method)<0){
	AliError("Method does not exist");
	return;
    }
    if(fPIDParams[method]){
	delete fPIDParams[method];
        fPIDParams[method]=NULL;
    }

    fPIDParams[method]=new AliTRDPIDParams(*params);
}

//____________________________________________________________
void AliTRDPIDResponseObject::SetPIDReference(AliTRDPIDReference *reference,AliTRDPIDResponse::ETRDPIDMethod method){

    if(Int_t(method)>=Int_t(AliTRDPIDResponse::kNMethod)||Int_t(method)<0){
        AliError("Method does not exist");
	return;
    }
    if(fPIDReference[method]){
	delete fPIDReference[method];
	fPIDReference[method]=NULL;
    }
    fPIDReference[method]=new AliTRDPIDReference(*reference);
}

//____________________________________________________________
TObject *AliTRDPIDResponseObject::GetUpperReference(AliPID::EParticleType spec, Float_t p, Float_t &pUpper,AliTRDPIDResponse::ETRDPIDMethod method) const{

    if(Int_t(method)>=Int_t(AliTRDPIDResponse::kNMethod)||Int_t(method)<0){
	AliError("Method does not exist");
	return NULL;
    }
   
    if(fPIDReference[method]){
	return fPIDReference[method]->GetUpperReference(spec,p,pUpper);
    }
    return NULL;
}


//____________________________________________________________
TObject *AliTRDPIDResponseObject::GetLowerReference(AliPID::EParticleType spec, Float_t p, Float_t &pLower,AliTRDPIDResponse::ETRDPIDMethod method) const{

    if(Int_t(method)>=Int_t(AliTRDPIDResponse::kNMethod)||Int_t(method)<0){
	AliError("Method does not exist");
	return NULL;
    }

    if(fPIDReference[method]){
	 return fPIDReference[method]->GetLowerReference(spec,p,pLower);
     }
    return NULL;
}

//____________________________________________________________
Bool_t AliTRDPIDResponseObject::GetThresholdParameters(Int_t ntracklets, Double_t efficiency, Double_t *params,Double_t centrality,AliTRDPIDResponse::ETRDPIDMethod method) const{

    if(Int_t(method)>=Int_t(AliTRDPIDResponse::kNMethod)||Int_t(method)<0){
	AliError("Method does not exist");
	return kFALSE;
    }

    if(fPIDParams[method]){
	return fPIDParams[method]->GetThresholdParameters(ntracklets,efficiency,params,centrality);
    }
    AliError("TRD Threshold Container does not exist");
    return kFALSE;
}

//____________________________________________________________
Int_t AliTRDPIDResponseObject::GetNumberOfMomentumBins(AliTRDPIDResponse::ETRDPIDMethod method) const{

    if(Int_t(method)>=Int_t(AliTRDPIDResponse::kNMethod)||Int_t(method)<0){
	AliError("Method does not exist");
	return 0;
    }

    if(fPIDReference[method]){
	return fPIDReference[method]->GetNumberOfMomentumBins();
    }
    return 0;
}

//____________________________________________________________
void AliTRDPIDResponseObject::Print(const Option_t* opt) const{
	//
	// Print content of the PID object
	//
    printf("Content of AliTRDPIDResponseObject \n\n");
   
    for(Int_t method=0;method<AliTRDPIDResponse::kNMethod;method++){
	if(fPIDReference[method])fPIDReference[method]->Print(opt);
	if(fPIDParams[method])fPIDParams[method]->Print(opt);
    }
}
 AliTRDPIDResponseObject.cxx:1
 AliTRDPIDResponseObject.cxx:2
 AliTRDPIDResponseObject.cxx:3
 AliTRDPIDResponseObject.cxx:4
 AliTRDPIDResponseObject.cxx:5
 AliTRDPIDResponseObject.cxx:6
 AliTRDPIDResponseObject.cxx:7
 AliTRDPIDResponseObject.cxx:8
 AliTRDPIDResponseObject.cxx:9
 AliTRDPIDResponseObject.cxx:10
 AliTRDPIDResponseObject.cxx:11
 AliTRDPIDResponseObject.cxx:12
 AliTRDPIDResponseObject.cxx:13
 AliTRDPIDResponseObject.cxx:14
 AliTRDPIDResponseObject.cxx:15
 AliTRDPIDResponseObject.cxx:16
 AliTRDPIDResponseObject.cxx:17
 AliTRDPIDResponseObject.cxx:18
 AliTRDPIDResponseObject.cxx:19
 AliTRDPIDResponseObject.cxx:20
 AliTRDPIDResponseObject.cxx:21
 AliTRDPIDResponseObject.cxx:22
 AliTRDPIDResponseObject.cxx:23
 AliTRDPIDResponseObject.cxx:24
 AliTRDPIDResponseObject.cxx:25
 AliTRDPIDResponseObject.cxx:26
 AliTRDPIDResponseObject.cxx:27
 AliTRDPIDResponseObject.cxx:28
 AliTRDPIDResponseObject.cxx:29
 AliTRDPIDResponseObject.cxx:30
 AliTRDPIDResponseObject.cxx:31
 AliTRDPIDResponseObject.cxx:32
 AliTRDPIDResponseObject.cxx:33
 AliTRDPIDResponseObject.cxx:34
 AliTRDPIDResponseObject.cxx:35
 AliTRDPIDResponseObject.cxx:36
 AliTRDPIDResponseObject.cxx:37
 AliTRDPIDResponseObject.cxx:38
 AliTRDPIDResponseObject.cxx:39
 AliTRDPIDResponseObject.cxx:40
 AliTRDPIDResponseObject.cxx:41
 AliTRDPIDResponseObject.cxx:42
 AliTRDPIDResponseObject.cxx:43
 AliTRDPIDResponseObject.cxx:44
 AliTRDPIDResponseObject.cxx:45
 AliTRDPIDResponseObject.cxx:46
 AliTRDPIDResponseObject.cxx:47
 AliTRDPIDResponseObject.cxx:48
 AliTRDPIDResponseObject.cxx:49
 AliTRDPIDResponseObject.cxx:50
 AliTRDPIDResponseObject.cxx:51
 AliTRDPIDResponseObject.cxx:52
 AliTRDPIDResponseObject.cxx:53
 AliTRDPIDResponseObject.cxx:54
 AliTRDPIDResponseObject.cxx:55
 AliTRDPIDResponseObject.cxx:56
 AliTRDPIDResponseObject.cxx:57
 AliTRDPIDResponseObject.cxx:58
 AliTRDPIDResponseObject.cxx:59
 AliTRDPIDResponseObject.cxx:60
 AliTRDPIDResponseObject.cxx:61
 AliTRDPIDResponseObject.cxx:62
 AliTRDPIDResponseObject.cxx:63
 AliTRDPIDResponseObject.cxx:64
 AliTRDPIDResponseObject.cxx:65
 AliTRDPIDResponseObject.cxx:66
 AliTRDPIDResponseObject.cxx:67
 AliTRDPIDResponseObject.cxx:68
 AliTRDPIDResponseObject.cxx:69
 AliTRDPIDResponseObject.cxx:70
 AliTRDPIDResponseObject.cxx:71
 AliTRDPIDResponseObject.cxx:72
 AliTRDPIDResponseObject.cxx:73
 AliTRDPIDResponseObject.cxx:74
 AliTRDPIDResponseObject.cxx:75
 AliTRDPIDResponseObject.cxx:76
 AliTRDPIDResponseObject.cxx:77
 AliTRDPIDResponseObject.cxx:78
 AliTRDPIDResponseObject.cxx:79
 AliTRDPIDResponseObject.cxx:80
 AliTRDPIDResponseObject.cxx:81
 AliTRDPIDResponseObject.cxx:82
 AliTRDPIDResponseObject.cxx:83
 AliTRDPIDResponseObject.cxx:84
 AliTRDPIDResponseObject.cxx:85
 AliTRDPIDResponseObject.cxx:86
 AliTRDPIDResponseObject.cxx:87
 AliTRDPIDResponseObject.cxx:88
 AliTRDPIDResponseObject.cxx:89
 AliTRDPIDResponseObject.cxx:90
 AliTRDPIDResponseObject.cxx:91
 AliTRDPIDResponseObject.cxx:92
 AliTRDPIDResponseObject.cxx:93
 AliTRDPIDResponseObject.cxx:94
 AliTRDPIDResponseObject.cxx:95
 AliTRDPIDResponseObject.cxx:96
 AliTRDPIDResponseObject.cxx:97
 AliTRDPIDResponseObject.cxx:98
 AliTRDPIDResponseObject.cxx:99
 AliTRDPIDResponseObject.cxx:100
 AliTRDPIDResponseObject.cxx:101
 AliTRDPIDResponseObject.cxx:102
 AliTRDPIDResponseObject.cxx:103
 AliTRDPIDResponseObject.cxx:104
 AliTRDPIDResponseObject.cxx:105
 AliTRDPIDResponseObject.cxx:106
 AliTRDPIDResponseObject.cxx:107
 AliTRDPIDResponseObject.cxx:108
 AliTRDPIDResponseObject.cxx:109
 AliTRDPIDResponseObject.cxx:110
 AliTRDPIDResponseObject.cxx:111
 AliTRDPIDResponseObject.cxx:112
 AliTRDPIDResponseObject.cxx:113
 AliTRDPIDResponseObject.cxx:114
 AliTRDPIDResponseObject.cxx:115
 AliTRDPIDResponseObject.cxx:116
 AliTRDPIDResponseObject.cxx:117
 AliTRDPIDResponseObject.cxx:118
 AliTRDPIDResponseObject.cxx:119
 AliTRDPIDResponseObject.cxx:120
 AliTRDPIDResponseObject.cxx:121
 AliTRDPIDResponseObject.cxx:122
 AliTRDPIDResponseObject.cxx:123
 AliTRDPIDResponseObject.cxx:124
 AliTRDPIDResponseObject.cxx:125
 AliTRDPIDResponseObject.cxx:126
 AliTRDPIDResponseObject.cxx:127
 AliTRDPIDResponseObject.cxx:128
 AliTRDPIDResponseObject.cxx:129
 AliTRDPIDResponseObject.cxx:130
 AliTRDPIDResponseObject.cxx:131
 AliTRDPIDResponseObject.cxx:132
 AliTRDPIDResponseObject.cxx:133
 AliTRDPIDResponseObject.cxx:134
 AliTRDPIDResponseObject.cxx:135
 AliTRDPIDResponseObject.cxx:136
 AliTRDPIDResponseObject.cxx:137
 AliTRDPIDResponseObject.cxx:138
 AliTRDPIDResponseObject.cxx:139
 AliTRDPIDResponseObject.cxx:140
 AliTRDPIDResponseObject.cxx:141
 AliTRDPIDResponseObject.cxx:142
 AliTRDPIDResponseObject.cxx:143
 AliTRDPIDResponseObject.cxx:144
 AliTRDPIDResponseObject.cxx:145
 AliTRDPIDResponseObject.cxx:146
 AliTRDPIDResponseObject.cxx:147
 AliTRDPIDResponseObject.cxx:148
 AliTRDPIDResponseObject.cxx:149
 AliTRDPIDResponseObject.cxx:150
 AliTRDPIDResponseObject.cxx:151
 AliTRDPIDResponseObject.cxx:152
 AliTRDPIDResponseObject.cxx:153
 AliTRDPIDResponseObject.cxx:154
 AliTRDPIDResponseObject.cxx:155
 AliTRDPIDResponseObject.cxx:156
 AliTRDPIDResponseObject.cxx:157
 AliTRDPIDResponseObject.cxx:158
 AliTRDPIDResponseObject.cxx:159
 AliTRDPIDResponseObject.cxx:160
 AliTRDPIDResponseObject.cxx:161
 AliTRDPIDResponseObject.cxx:162
 AliTRDPIDResponseObject.cxx:163
 AliTRDPIDResponseObject.cxx:164
 AliTRDPIDResponseObject.cxx:165
 AliTRDPIDResponseObject.cxx:166
 AliTRDPIDResponseObject.cxx:167
 AliTRDPIDResponseObject.cxx:168
 AliTRDPIDResponseObject.cxx:169
 AliTRDPIDResponseObject.cxx:170
 AliTRDPIDResponseObject.cxx:171
 AliTRDPIDResponseObject.cxx:172
 AliTRDPIDResponseObject.cxx:173
 AliTRDPIDResponseObject.cxx:174
 AliTRDPIDResponseObject.cxx:175
 AliTRDPIDResponseObject.cxx:176
 AliTRDPIDResponseObject.cxx:177
 AliTRDPIDResponseObject.cxx:178
 AliTRDPIDResponseObject.cxx:179
 AliTRDPIDResponseObject.cxx:180
 AliTRDPIDResponseObject.cxx:181
 AliTRDPIDResponseObject.cxx:182
 AliTRDPIDResponseObject.cxx:183
 AliTRDPIDResponseObject.cxx:184
 AliTRDPIDResponseObject.cxx:185
 AliTRDPIDResponseObject.cxx:186
 AliTRDPIDResponseObject.cxx:187
 AliTRDPIDResponseObject.cxx:188
 AliTRDPIDResponseObject.cxx:189
 AliTRDPIDResponseObject.cxx:190
 AliTRDPIDResponseObject.cxx:191
 AliTRDPIDResponseObject.cxx:192
 AliTRDPIDResponseObject.cxx:193
 AliTRDPIDResponseObject.cxx:194
 AliTRDPIDResponseObject.cxx:195
 AliTRDPIDResponseObject.cxx:196
 AliTRDPIDResponseObject.cxx:197
 AliTRDPIDResponseObject.cxx:198
 AliTRDPIDResponseObject.cxx:199
 AliTRDPIDResponseObject.cxx:200
 AliTRDPIDResponseObject.cxx:201
 AliTRDPIDResponseObject.cxx:202
 AliTRDPIDResponseObject.cxx:203
 AliTRDPIDResponseObject.cxx:204
 AliTRDPIDResponseObject.cxx:205
 AliTRDPIDResponseObject.cxx:206
 AliTRDPIDResponseObject.cxx:207
 AliTRDPIDResponseObject.cxx:208
 AliTRDPIDResponseObject.cxx:209
 AliTRDPIDResponseObject.cxx:210
 AliTRDPIDResponseObject.cxx:211
 AliTRDPIDResponseObject.cxx:212
 AliTRDPIDResponseObject.cxx:213
 AliTRDPIDResponseObject.cxx:214
 AliTRDPIDResponseObject.cxx:215
 AliTRDPIDResponseObject.cxx:216
 AliTRDPIDResponseObject.cxx:217
 AliTRDPIDResponseObject.cxx:218
 AliTRDPIDResponseObject.cxx:219
 AliTRDPIDResponseObject.cxx:220
 AliTRDPIDResponseObject.cxx:221
 AliTRDPIDResponseObject.cxx:222
 AliTRDPIDResponseObject.cxx:223
 AliTRDPIDResponseObject.cxx:224
 AliTRDPIDResponseObject.cxx:225
 AliTRDPIDResponseObject.cxx:226
 AliTRDPIDResponseObject.cxx:227
 AliTRDPIDResponseObject.cxx:228
 AliTRDPIDResponseObject.cxx:229
 AliTRDPIDResponseObject.cxx:230
 AliTRDPIDResponseObject.cxx:231
 AliTRDPIDResponseObject.cxx:232