X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSCalibrator.cxx;h=f6ad49fe9dd6d939c6da36f60ad1232597d49692;hb=8a95132f82bbc413bdce050cbc8a5b2986dfb16d;hp=1d2404c1ad1026711bf966fe95d6113d3cfe1a4c;hpb=00953b030008258922b1c5ba85179754b7ad41df;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSCalibrator.cxx b/PHOS/AliPHOSCalibrator.cxx index 1d2404c1ad1..f6ad49fe9dd 100644 --- a/PHOS/AliPHOSCalibrator.cxx +++ b/PHOS/AliPHOSCalibrator.cxx @@ -13,6 +13,15 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ +/* $Id$ */ + +/* History of cvs commits: + * + * $Log$ + * Revision 1.10 2005/05/28 14:19:04 schutz + * Compilation warnings fixed by T.P. + * + */ //_________________________________________________________________________ // Class to calculate calibration parameters from beam tests etc. @@ -45,17 +54,29 @@ ////////////////////////////////////////////////////////////////////////////// // --- ROOT system --- -#include "TROOT.h" #include "TF1.h" +#include "TFile.h" #include "TObjString.h" +#include "TROOT.h" +#include "TClonesArray.h" + // --- Standard library --- // --- AliRoot header files --- -#include "AliPHOSGetter.h" -#include "AliPHOSCalibrator.h" -#include "AliPHOSConTableDB.h" +#include "AliLog.h" #include "AliPHOSCalibrManager.h" #include "AliPHOSCalibrationData.h" +#include "AliPHOSCalibrator.h" +#include "AliPHOSConTableDB.h" +#include "AliRawReaderDate.h" +#include "AliPHOSRawStream2004.h" +#include "AliPHOSDigit.h" + +#ifdef ALI_DATE +#include "event.h" +#else +#define PHYSICS_EVENT 7 +#endif ClassImp(AliPHOSCalibrator) @@ -65,6 +86,7 @@ ClassImp(AliPHOSCalibrator) { //Default constuctor for root. Normally should not be used fRunList=0 ; + fBeamEnergy = 0. ; fNch = 0 ; fPedHistos = 0 ; fGainHistos = 0 ; @@ -75,24 +97,19 @@ ClassImp(AliPHOSCalibrator) fConTableDBFile = "ConTableDB.root" ; } //____________________________________________________________________________ -AliPHOSCalibrator::AliPHOSCalibrator(const char* file, const char* title,Bool_t toSplit): +AliPHOSCalibrator::AliPHOSCalibrator(const char* file, const char* title): TTask("AliPHOSCalibrator",title) { //Constructor which should normally be used. //file: path/galice.root - header file //title: branch name of PHOS reconstruction (e.g. "Default") - //toSplit: wether we work in Split mode? + fRunList = new TList() ; fRunList->SetOwner() ; fRunList->Add(new TObjString(file)) ; - fToSplit = toSplit ; fNch = 0 ; - fPedPat = 257 ; //Patterns for different kind of events - fPulPat = 33 ; - fLEDPat = 129 ; - fWBPat = 1027 ; - fNBPat = 1029 ; + fBeamEnergy = 10. ; fNChan = 100 ; fGainMax = 0.1 ; @@ -143,7 +160,7 @@ void AliPHOSCalibrator::AddRun(const char * filename) TObjString * r ; while((r=(TObjString *)(next()))){ if(fn->String().CompareTo(r->String())==0){ - Error("Run already in list: ",filename) ; + AliError(Form("Run already in list: %s",filename)) ; return ; } } @@ -169,14 +186,7 @@ void AliPHOSCalibrator::Init(void) //check if ConTableDB already read if(!fctdb){ - TFile * v = gROOT->GetFile(fConTableDBFile) ; - if(!v) - v = TFile::Open(fConTableDBFile) ; - if(!v){ - Fatal("Can not open file with Connection Table DB:",fConTableDBFile) ; - return ; - } - fctdb = dynamic_cast(v->Get("AliPHOSConTableDB")) ; + SetConTableDB(fConTableDBFile) ; } fNch = fctdb->GetNchanels() ; @@ -191,7 +201,7 @@ void AliPHOSCalibrator::SetConTableDB(const char * file,const char * name) //Reads Connection Table database with name "name" from file "file" if(file==0 || name == 0){ - Error("Please, specify file with database"," and its title") ; + AliError(Form("Please, specify file with database and its title")) ; return ; } if(fctdb && strcmp(fctdb->GetTitle(),name)==0) //already read @@ -207,10 +217,11 @@ void AliPHOSCalibrator::SetConTableDB(const char * file,const char * name) if(!v) v = TFile::Open(fConTableDBFile) ; if(!v){ - Error("Can not open file with Connection Table DB:",fConTableDBFile) ; + AliError(Form("Can not open file with Connection Table DB: %s",fConTableDBFile.Data())) ; return ; } - fctdb = dynamic_cast(v->Get("AliPHOSConTableDB")) ; + fctdb = new AliPHOSConTableDB(*(dynamic_cast(v->Get("AliPHOSConTableDB")))) ; + v->Close() ; } //____________________________________________________________________________ @@ -221,7 +232,7 @@ void AliPHOSCalibrator::PlotPedestal(Int_t chanel) static_cast(fPedHistos->At(chanel))->Draw() ; } else{ - printf("Histograms not created yet! \n") ; + AliInfo(Form("Histograms not created yet! \n")) ; } } //____________________________________________________________________________ @@ -238,7 +249,7 @@ void AliPHOSCalibrator::PlotGain(Int_t chanel) static_cast(fGainHistos->At(chanel))->Draw() ; } else{ - printf("Histograms not created yet! \n") ; + AliInfo(Form("Histograms not created yet! \n")) ; } } //____________________________________________________________________________ @@ -281,27 +292,39 @@ void AliPHOSCalibrator::ScanPedestals(Option_t * option ) while((file = static_cast(next()))){ if(strstr(option,"deb")) printf("Processing file %s \n ",file->String().Data()) ; - AliPHOSGetter * gime = AliPHOSGetter::GetInstance(file->String().Data(),GetTitle(),fToSplit) ; - Int_t ievent ; - for(ievent = 0; ieventMaxEvent() ; ievent++){ - gime->Event(ievent,"D") ; - if(gime->EventPattern() == fPedPat ){ - Int_t idigit ; - TClonesArray * digits = gime->Digits() ; - for(idigit = 0; idigitGetEntriesFast() ; idigit++){ - AliPHOSDigit * digit = static_cast(digits->At(idigit) ) ; - ich = fctdb->AbsId2Raw(digit->GetId()); - - if(ich>=0){ - Float_t amp = digit->GetAmp() ; - TH1F * hh = dynamic_cast(fPedHistos->At(ich)) ; - hh->Fill(amp) ; + + //Now open data file + AliRawReaderDate *rawReader = new AliRawReaderDate(file->String().Data()) ; + AliPHOSRawStream2004 *rawStream = new AliPHOSRawStream2004(rawReader) ; + rawStream->SetConTableDB(fctdb) ; + TClonesArray * digits = new TClonesArray("AliPHOSDigit",300) ; + Int_t nevents=0 ; + //Scan all event in file + while(rawReader->NextEvent()){ + //Is it PHYSICAL event + if(rawReader->GetType() == PHYSICS_EVENT){ + nevents++ ; + if(rawStream->ReadDigits(digits)){ + if(rawStream->IsPEDevent()){ + for(Int_t idigit = 0; idigitGetEntriesFast() ; idigit++){ + AliPHOSDigit * digit = static_cast(digits->At(idigit) ) ; + ich = fctdb->AbsId2Raw(digit->GetId()); + if(ich>=0){ + Float_t amp = digit->GetAmp() ; + TH1F * hh = dynamic_cast(fPedHistos->At(ich)) ; + hh->Fill(amp) ; + } + } } } } } - } - + if(strstr(option,"deb")) + AliInfo(Form(" found %d events \n ",nevents)) ; + delete rawStream ; + delete rawReader ; + delete digits ; + } } //____________________________________________________________________________ void AliPHOSCalibrator::CalculatePedestals() @@ -310,7 +333,7 @@ void AliPHOSCalibrator::CalculatePedestals() //find mean and width, check deviation from mean for each channel. if(!fPedHistos || !fPedHistos->At(0)){ - Error("CalculatePedestals","You should run ScanPedestals first!") ; + AliError(Form("You should run ScanPedestals first!")) ; return ; } @@ -350,7 +373,7 @@ void AliPHOSCalibrator::CalculatePedestals() out+= ped ; out+= "it is too far from mean " ; out+= meanPed ; - Error("PHOSCalibrator",out) ; + AliError(Form("PHOSCalibrator %s",out.Data())) ; } } delete p0 ; @@ -370,7 +393,7 @@ void AliPHOSCalibrator::ScanGains(Option_t * option) fGainHistos->Delete() ; if(!fGainHistos){ if(strstr(option,"deball")) - printf("creating array for %d channels \n",fNch) ; + AliInfo(Form("creating array for %d channels \n",fNch)) ; fGainHistos = new TObjArray(fNch) ; } @@ -389,47 +412,52 @@ void AliPHOSCalibrator::ScanGains(Option_t * option) } } - Bool_t all =!(Bool_t)strstr(option,"narrow") ; - - TIter next(fRunList) ; TObjString * file ; while((file = static_cast(next()))){ - - AliPHOSGetter * gime = AliPHOSGetter::GetInstance(file->String().Data(),GetTitle(),fToSplit) ; - Int_t handled = 0; - Int_t ievent ; - for(ievent = 0; ieventMaxEvent() ; ievent++){ - gime->Event(ievent,"D") ; - if(gime->EventPattern() == fNBPat || - (all && gime->EventPattern() == fWBPat)){ - handled ++ ; - Int_t idigit ; - TClonesArray * digits = gime->Digits() ; - AliPHOSDigit * digit ; - Int_t max = 0 ; - Int_t imax = 0; - for(idigit = 0; idigitGetEntriesFast() ; idigit++){ - digit = static_cast(digits->At(idigit) ) ; - if(digit->GetAmp() > max){ - imax = idigit ; - max = digit->GetAmp() ; + //Now open data file + AliRawReaderDate *rawReader = new AliRawReaderDate(file->String().Data()) ; + AliPHOSRawStream2004 *rawStream = new AliPHOSRawStream2004(rawReader) ; + rawStream->SetConTableDB(fctdb) ; + + TClonesArray * digits = new TClonesArray("AliPHOSDigit",300) ; + Int_t nevents=0 ; + //Scan all event in file + while(rawReader->NextEvent()){ + //Is it PHYSICAL event + if(rawReader->GetType() == PHYSICS_EVENT){ + if(rawStream->ReadDigits(digits)){ + //Test trigger + if(rawStream->IsNELevent() || rawStream->IsWELevent()){ + nevents ++ ; + AliPHOSDigit * digit ; + Int_t max = 0 ; + Int_t imax = 0; + for(Int_t idigit = 0; idigitGetEntriesFast() ; idigit++){ + digit = static_cast(digits->At(idigit) ) ; + if(digit->GetAmp() > max){ + imax = idigit ; + max = digit->GetAmp() ; + } + } + digit = static_cast(digits->At(imax) ) ; + Int_t ich = fctdb->AbsId2Raw(digit->GetId()); + if(ich>=0){ + Float_t pedestal = fhPedestals->GetBinContent(ich) ; + const Float_t kshowerInCrystall = 0.9 ; + Float_t gain = fBeamEnergy*kshowerInCrystall/ + (digit->GetAmp() - pedestal) ; + static_cast(fGainHistos->At(ich))->Fill(gain) ; + } } } - digit = static_cast(digits->At(imax) ) ; - Int_t ich = fctdb->AbsId2Raw(digit->GetId()); - if(ich>=0){ - Float_t pedestal = fhPedestals->GetBinContent(ich) ; - const Float_t kshowerInCrystall = 0.9 ; - Float_t beamEnergy = gime->BeamEnergy() ; - Float_t gain = beamEnergy*kshowerInCrystall/ - (digit->GetAmp() - pedestal) ; - static_cast(fGainHistos->At(ich))->Fill(gain) ; - } } } - if(strstr(option,"deb")) - printf("Hadled %d events \n",handled) ; + delete rawReader ; + delete rawStream ; + delete digits ; + if(strstr(option,"deb")) + AliInfo(Form(" found %d events \n",nevents)) ; } } //____________________________________________________________________________ @@ -438,7 +466,7 @@ void AliPHOSCalibrator::CalculateGains(void) //calculates gain if(!fGainHistos || !fGainHistos->GetEntriesFast()){ - Error("CalculateGains","You should run ScanGains first!") ; + AliError(Form("You should run ScanGains first!")) ; return ; } @@ -479,22 +507,58 @@ void AliPHOSCalibrator::CalculateGains(void) out+= gain ; out+= "it is too far from mean " ; out+= meanGain ; - Error("PHOSCalibrator",out) ; + AliError(Form("PHOSCalibrator %s",out.Data())) ; } } delete p0 ; } +//____________________________________________________________________________ +void AliPHOSCalibrator::ReadFromASCII(const char * filename){ +// We read pedestals and gains from *.dat file with following format: +// 0 0 0 0 37.09 1972. // next nmodrows*nmodcols*ncryrows*ncrycols lines +// 0 0 0 1 28.53 2072. // contains +// 0 0 0 2 30.93 1938. // +// where module is an array of 8*8 crystals and RR and CC are module raw and column position + FILE * file = fopen(filename, "r"); + if (!file) { + Error("ReadFromASCII", "could not open file %s", filename); + return; + } + if(!fctdb || !fhPedestals || !fhGains){ + Init() ; + } + else{ + //Clean Hitograms + Reset() ; + } + Int_t modRaw,modCol,raw,col; + Float_t ped,pik; + Int_t nread = 0 ; + while(fscanf(file,"%d %d %d %d %f %f",&modRaw,&modCol,&raw,&col,&ped,&pik)==6){ + //Calculate plain crystal position: + Int_t rawPosition = (modRaw*8+raw)*fctdb->GetNColumns()+modCol*8+col ; + fhPedestals->SetBinContent(rawPosition,ped) ; + if(pik!=0.) + fhGains->SetBinContent(rawPosition,1./pik); + else + fhGains->SetBinContent(rawPosition,0.); + nread++ ; + } + if(nread != fctdb->GetNColumns()*fctdb->GetNRaws()){ + Error("ReadFromASCII","Read %d parameters instead of %d\n",nread,fctdb->GetNColumns()*fctdb->GetNRaws()) ; + } + fclose(file) ; +} //_____________________________________________________________________________ -void AliPHOSCalibrator::WritePedestals(const char * version, - Int_t begin,Int_t end) +void AliPHOSCalibrator::WritePedestals(const char * version) { //Write calculated data to file using AliPHOSCalibrManager //version and validitirange (begin-end) will be used to identify data if(!fctdb){ - Error("WritePedestals","\n Please, supply Connection Table DB (use SetConTableDB()) \n" ) ; + AliError(Form("\n Please, supply Connection Table DB (use SetConTableDB()) \n" )) ; return ; } //fill data @@ -505,39 +569,38 @@ void AliPHOSCalibrator::WritePedestals(const char * version, ped.SetDataCheck(absid,fhPedestalsWid->GetBinContent(i)) ; } - //evaluate validity range - if(begin==0){ - TIter next(fRunList) ; - Int_t ibegin=99999; - Int_t iend=0 ; - TObjString * file ; - while((file=((TObjString*)next()))){ - TString s = file->GetString() ; - TString ss = s(s.Last('_'),s.Last('.')); - Int_t tmp ; - if(sscanf(ss.Data(),"%d",&tmp)){ - if(ibegintmp) - iend=tmp ; - } - } - ped.SetValidityRange(ibegin,iend) ; - } - else - ped.SetValidityRange(begin,end) ; +// //evaluate validity range +// if(begin==0){ +// TIter next(fRunList) ; +// Int_t ibegin=99999; +// Int_t iend=0 ; +// TObjString * file ; +// while((file=((TObjString*)next()))){ +// TString s = file->GetString() ; +// TString ss = s(s.Last('_'),s.Last('.')); +// Int_t tmp ; +// if(sscanf(ss.Data(),"%d",&tmp)){ +// if(ibegintmp) +// iend=tmp ; +// } +// } +// ped.SetValidityRange(ibegin,iend) ; +// } +// else +// ped.SetValidityRange(begin,end) ; //check, may be Manager instance already configured? AliPHOSCalibrManager * cmngr = AliPHOSCalibrManager::GetInstance() ; if(!cmngr){ - Warning("Write Pedestals","Using database file 'PHOSBTCalibration.root'") ; + AliWarning(Form("Using database file 'PHOSBTCalibration.root'")) ; cmngr = AliPHOSCalibrManager::GetInstance("PHOSBTCalibration.root") ; } - cmngr->WriteData(&ped) ; + cmngr->WriteData(ped) ; } //_____________________________________________________________________________ -void AliPHOSCalibrator::ReadPedestals(const char * version, - Int_t range) +void AliPHOSCalibrator::ReadPedestals(const char * version) { //Read data from file using AliPHOSCalibrManager //version and range will be used to choose proper data @@ -545,10 +608,10 @@ void AliPHOSCalibrator::ReadPedestals(const char * version, AliPHOSCalibrationData ped("Pedestals",version); AliPHOSCalibrManager * cmngr = AliPHOSCalibrManager::GetInstance() ; if(!cmngr){ - Warning("ReadPedestals","Using database file 'PHOSBTCalibration.root'") ; + AliWarning(Form("Using database file 'PHOSBTCalibration.root'")) ; cmngr = AliPHOSCalibrManager::GetInstance("PHOSBTCalibration.root") ; } - cmngr->ReadFromRoot(ped,range) ; + cmngr->GetParameters(ped) ; Int_t npeds=ped.NChannels() ; fNch = fctdb->GetNchanels() ; if(fhPedestals) @@ -563,8 +626,7 @@ void AliPHOSCalibrator::ReadPedestals(const char * version, } } //_____________________________________________________________________________ -void AliPHOSCalibrator::ReadGains(const char * version, - Int_t range) +void AliPHOSCalibrator::ReadGains(const char * version) { //Read data from file using AliPHOSCalibrManager //version and range will be used to choose proper data @@ -572,10 +634,10 @@ void AliPHOSCalibrator::ReadGains(const char * version, AliPHOSCalibrationData gains("Gains",version); AliPHOSCalibrManager * cmngr = AliPHOSCalibrManager::GetInstance() ; if(!cmngr){ - Warning("ReadGainss","Using database file 'PHOSBTCalibration.root'") ; + AliWarning(Form("Using database file 'PHOSBTCalibration.root'")) ; cmngr = AliPHOSCalibrManager::GetInstance("PHOSBTCalibration.root") ; } - cmngr->ReadFromRoot(gains,range) ; + cmngr->GetParameters(gains) ; Int_t npeds=gains.NChannels() ; fNch = fctdb->GetNchanels() ; if(fhGains) @@ -590,14 +652,13 @@ void AliPHOSCalibrator::ReadGains(const char * version, } } //_____________________________________________________________________________ -void AliPHOSCalibrator::WriteGains(const char * version, - Int_t begin,Int_t end) +void AliPHOSCalibrator::WriteGains(const char * version) { //Write gains through AliPHOSCalibrManager //version and validity range(begin-end) are used to identify data if(!fctdb){ - Error("WriteGains","\n Please, supply Connection Table DB (use SetConTableDB()) \n" ) ; + AliError(Form("\n Please, supply Connection Table DB (use SetConTableDB()) \n" )) ; return ; } @@ -607,38 +668,38 @@ void AliPHOSCalibrator::WriteGains(const char * version, gains.SetData(absid,fhGains->GetBinContent(i)) ; gains.SetDataCheck(absid,fhGainsWid->GetBinContent(i)) ; } - if(begin==0){ - TIter next(fRunList) ; - Int_t ibegin=99999; - Int_t iend=0 ; - TObjString * file ; - while((file=((TObjString*)next()))){ - TString s = file->GetString() ; - TSubString ss = s(s.Last('_'),s.Last('.')); - Int_t tmp ; - if(sscanf(ss.Data(),"%d",&tmp)){ - if(ibegintmp) - iend=tmp ; - } - } - gains.SetValidityRange(ibegin,iend) ; - } - else - gains.SetValidityRange(begin,end) ; +// if(begin==0){ +// TIter next(fRunList) ; +// Int_t ibegin=99999; +// Int_t iend=0 ; +// TObjString * file ; +// while((file=((TObjString*)next()))){ +// TString s = file->GetString() ; +// TSubString ss = s(s.Last('_'),s.Last('.')); +// Int_t tmp ; +// if(sscanf(ss.Data(),"%d",&tmp)){ +// if(ibegintmp) +// iend=tmp ; +// } +// } +// gains.SetValidityRange(ibegin,iend) ; +// } +// else +// gains.SetValidityRange(begin,end) ; AliPHOSCalibrManager * cmngr = AliPHOSCalibrManager::GetInstance() ; if(!cmngr){ - Warning("WriteGains","Using database file 'PHOSBTCalibration.root'") ; + AliWarning(Form("Using database file 'PHOSBTCalibration.root'")) ; cmngr = AliPHOSCalibrManager::GetInstance("PHOSBTCalibration.root") ; } - cmngr->WriteData(&gains) ; + cmngr->WriteData(gains) ; } //_____________________________________________________________________________ -void AliPHOSCalibrator::Print(const Option_t * option)const +void AliPHOSCalibrator::Print(const Option_t *)const { // prints everything - printf("--------------AliPHOSCalibrator-----------------\n") ; + AliInfo(Form("--------------PHOS Calibrator-----------------\n")) ; printf("Files to handle:\n") ; TIter next(fRunList) ; TObjString * r ; @@ -653,10 +714,5 @@ void AliPHOSCalibrator::Print(const Option_t * option)const printf("Number of bins in Gain histos:..........%d\n",fNGainBins) ; printf("Number of channels to calibrate:........%d\n",fNch) ; printf("Number of bins in pedestal histos:......%d\n",fNChan) ; - printf("trigger pattern for PEDESTAL events:....%d\n",fPedPat) ; - printf("trigger pattern for PULSER events:......%d\n",fPulPat) ; - printf("trigger pattern for LED events:.........%d\n",fLEDPat) ; - printf("trigger pattern for WIDE BEAM events:...%d\n",fWBPat) ; - printf("trigger pattern for NARROW BEAM events:.%d\n",fNBPat) ; printf("--------------------------------------------------\n") ; }