+
// @(#) $Id$
// Original: AliHLTTransform.cxx,v 1.53 2005/06/14 10:55:21 cvetan
#include <AliTPCRF1D.h>
#endif
#ifdef use_root
+#include <TError.h>
#include <TFile.h>
-#include <TUnixSystem.h>
#include <TTimeStamp.h>
-#include <TError.h>
+#include <TUnixSystem.h>
#endif
#include "AliHLTTPCLogging.h"
// fVersion==kVdeprecated: dont use old (before July 2003) style of transformer
//
</pre>
+* @ingroup alihlt_tpc
*/
ClassImp(AliHLTTPCTransform)
#endif
// The following definition is generated by MakeInitFile function
-Double_t AliHLTTPCTransform::fgBField = 0.2;
-Double_t AliHLTTPCTransform::fgSolenoidBField = 2;
+Double_t AliHLTTPCTransform::fgBField = 0.5;
+Double_t AliHLTTPCTransform::fgSolenoidBField = 5;
Double_t AliHLTTPCTransform::fgBFieldFactor = 1;
Int_t AliHLTTPCTransform::fgVersion = kVdefault;
Int_t AliHLTTPCTransform::fgNTimeBins = 1024; // = 1024; //446
-0.1736481786
};
-#ifdef use_aliroot
-Bool_t AliHLTTPCTransform::Init(AliRunLoader *runLoader)
-{
- //init with runloader
- if(!runLoader) {
- LOG(AliHLTTPCLog::kFatal,"AliHLTTPCTransform::Init","RunLoader")
- <<" Missing RunLoader! 0x0"<<ENDLOG;
- return kFALSE;
- }
-
- if(fgVersion != kVdefault)
- LOG(AliHLTTPCLog::kWarning,"AliHLTTPCTransform::Init","Init values")
- <<AliHLTTPCLog::kDec<<"You are initializing the parameters more than once; check your code please! "<<fgVersion<<ENDLOG;
-
- TDirectory* savedir1 = gDirectory;
- runLoader->CdGAFile();
- AliTPCParamSR *param=(AliTPCParamSR*)gDirectory->Get(GetParamName());
- savedir1->cd();
- if(!param)
- {
- LOG(AliHLTTPCLog::kFatal,"AliHLTTPCTransform::Init","File")
- <<"No TPC parameters found!"<<ENDLOG;
- return kFALSE;
- }
-
- AliTPCPRF2D * prfinner = new AliTPCPRF2D;
- AliTPCPRF2D * prfouter1 = new AliTPCPRF2D;
- AliTPCPRF2D * prfouter2 = new AliTPCPRF2D;
- AliTPCRF1D * rf = new AliTPCRF1D(kTRUE);
- rf->SetGauss(param->GetZSigma(),param->GetZWidth(),1.);
- rf->SetOffset(3*param->GetZSigma());
- rf->Update();
-
- TDirectory *savedir2=gDirectory;
- TFile *prf_file = TFile::Open("$ALICE_ROOT/TPC/AliTPCprf2d.root");
- if (!prf_file->IsOpen())
- {
- LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::Init","File")
- <<"Can't open $ALICE_ROOT/TPC/AliTPCprf2d.root !"<<ENDLOG;
- return kFALSE;
- }
- prfinner ->Read("prf_07504_Gati_056068_d02");
- prfouter1->Read("prf_10006_Gati_047051_d03");
- prfouter2->Read("prf_15006_Gati_047051_d03");
- prf_file->Close();
- savedir2->cd();
-
- param->SetInnerPRF(prfinner);
- param->SetOuter1PRF(prfouter1);
- param->SetOuter2PRF(prfouter2);
- param->SetTimeRF(rf);
-
- fgNTimeBins = param->GetMaxTBin()+1;
- fgNRowLow = param->GetNRowLow();
- fgNRowUp = param->GetNRowUp();
- fgNRowUp1 = param->GetNRowUp1();
- fgNRowUp2 = param->GetNRowUp2();
- fgNRow= fgNRowLow + fgNRowUp;
- if(fgNRow!=159){
- LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::Init","fNRow")
- <<"Number of rows have changed in ALIROOT"<<ENDLOG;
- return kFALSE;
- }
-
- fgNSectorLow = param->GetNInnerSector();
- fgNSectorUp = param->GetNOuterSector();
- fgNSector = fgNSectorLow + fgNSectorUp;
-
- //test whether they were changes to the rotation shift
- fgNRotShift=0;
- Float_t irotshift = param->GetInnerAngleShift(); //shift angle
- Float_t orotshift = param->GetOuterAngleShift(); //shift angle
- const Float_t kDegtoRad = 0.01745329251994;
- Int_t shift1=TMath::Nint(irotshift/kDegtoRad);
- Int_t shift2=TMath::Nint(orotshift/kDegtoRad+0.1);
- if((shift1!=shift2) || (shift1!=10)){
- LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::Init","Rotshiftangle")
- <<"Rotation shift angle has changed in ALIROOT"<<ENDLOG;
- return kFALSE;
- } else {
- fgNRotShift=0.5; //our version of the shift angle
- }
-
- fgVersion=kValiroot;
- SetBFieldFactor((Double_t)runLoader->GetAliRun()->Field()->Factor());
- SetSolenoidBField(-
- (Double_t)runLoader->GetAliRun()->Field()->SolenoidField()/
- (Double_t)runLoader->GetAliRun()->Field()->Factor()
- );
- fgPadPitchWidthLow=param->GetInnerPadPitchWidth();
- fgPadPitchWidthUp=param->GetOuterPadPitchWidth();
- fgZWidth=param->GetZWidth();
- fgZSigma=param->GetZSigma();
- fgZLength=param->GetZLength();
- fgZOffset=param->GetZOffset();
- fgDiffT=param->GetDiffT();
- fgDiffL=param->GetDiffL();
- fgOmegaTau=param->GetOmegaTau();
- fgInnerPadLength=param->GetInnerPadLength();
- fgOuter1PadLength=param->GetOuter1PadLength();
- fgOuter2PadLength=param->GetOuter2PadLength();
- fgInnerPRFSigma=param->GetInnerPRF()->GetSigmaX();
- fgOuter1PRFSigma=param->GetOuter1PRF()->GetSigmaX();
- fgOuter2PRFSigma=param->GetOuter2PRF()->GetSigmaX();
- fgTimeSigma=param->GetTimeRF()->GetSigma();
- fgADCSat=param->GetADCSat();
- fgZeroSup=param->GetZeroSup();
- fgNSlice=fgNSectorLow;
-
- //now do the arrays
- for(Int_t i=0;i<fgNRow;i++){
- Int_t sec,row;
- if( i < fgNRowLow){sec =0;row =i;}
- else{sec = fgNSectorLow;row =i-fgNRowLow;}
- fgX[i]=param->GetPadRowRadii(sec,row);
- }
- for(Int_t i=0;i<fgNRow;i++){
- Int_t sec,row;
- if( i < fgNRowLow){sec =0;row =i;}
- else{sec = fgNSectorLow;row =i-fgNRowLow;}
- fgNPads[i]=param->GetNPads(sec,row);
- }
- for(Int_t i=0;i<fgNSector;i++){
- if(i<fgNSectorLow) fgSectorLow[i]=1;
- else fgSectorLow[i]=0;
- }
-
- return kTRUE;
-
- /* not needed
- TTimeStamp time;
- Char_t tmpfile[1024];
- sprintf(tmpfile,"./l3transform.config-%d",(Int_t)time.GetSec());
-
- return SaveInitFile(tmpfile);
- */
-}
-#endif
-
-Bool_t AliHLTTPCTransform::Init(Char_t* path,Bool_t UseAliTPCParam)
-{
- //Overwrite the parameters with values stored in file "l3transform.config" in path.
- //If file does not exist, old default values will be used.
- //If flag UseAliTPCParam is set, the parameters will be read from the the rootfile
- //which then has to be called path/digitfile.root
-
- if(fgVersion != kVdefault)
- LOG(AliHLTTPCLog::kWarning,"AliHLTTPCTransform::Init","Init values")
- <<AliHLTTPCLog::kDec<<"You are initializing the parameters more than once; check your code please! "<<fgVersion<<ENDLOG;
-
- if(UseAliTPCParam) //use rootfile to generate temporary init file
- return ReadInit(path);
-
- //create filename
- Char_t pathname[1024];
- strcpy(pathname,path);
-
- //test whether provided path is the file itself
- Int_t isdir = 0;
- DIR *testdir=opendir(pathname);
- if(testdir){
- isdir=1;
- closedir(testdir);
- }
-
- if(isdir) strcat(pathname,"/l3transform.config");
-
- return ReadInitFile(pathname);
-}
-
-Bool_t AliHLTTPCTransform::ReadInitFile(Char_t* pathname)
-{
- //read transformer settings from pathname
- FILE *fptr=fopen(pathname,"r");
- if(!fptr){
- LOG(AliHLTTPCLog::kWarning,"AliHLTTPCTransform::ReadInitFile","File Open")
- <<"Pointer to Config File \""<<pathname<<"\" 0x0!"<<ENDLOG;
- return kFALSE;
- }
-
- Char_t d1[250], d2[100], d3[100];
- Int_t dummy=0;
- Double_t ddummy=0.0;
-
- while(!feof(fptr)) {
- fscanf(fptr,"%s",d1);
- if(strcmp(d1,"fVersion")==0){fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgVersion=dummy;}
- else if(strcmp(d1,"fBFieldFactor")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgBFieldFactor=(Double_t)ddummy;}
- else if(strcmp(d1,"fSolenoidBField")==0)
- {
- fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);
- fgSolenoidBField=(Double_t)ddummy;
- }
- else if(strcmp(d1,"fNTimeBins")==0){fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgNTimeBins=(Int_t)dummy;}
- else if(strcmp(d1,"fNRowLow")==0)
- {
- fscanf(fptr,"%s %d %s",d2,&dummy,d3);
- fgNRowLow=(Int_t)dummy;
- if(fgNRowLow != 63)
- LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::ReadInitFile","Overflow")
- <<"Number of inner PadRows should be 63! Check and fgrep the code for 63 to see the consequences of this major change!"<<ENDLOG;
- }
- else if(strcmp(d1,"fNRowUp")==0){fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgNRowUp=(Int_t)dummy;}
- else if(strcmp(d1,"fNRowUp1")==0){fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgNRowUp1=(Int_t)dummy;}
- else if(strcmp(d1,"fNRowUp2")==0){fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgNRowUp2=(Int_t)dummy;}
- else if(strcmp(d1,"fNSectorLow")==0){fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgNSectorLow=(Int_t)dummy;}
- else if(strcmp(d1,"fNSectorUp")==0){fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgNSectorUp=(Int_t)dummy;}
- else if(strcmp(d1,"fNSector")==0){fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgNSector=(Int_t)dummy;}
- else if(strcmp(d1,"fPadPitchWidthLow")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgPadPitchWidthLow=(Double_t)ddummy;}
- else if(strcmp(d1,"fPadPitchWidthUp")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgPadPitchWidthUp=(Double_t)ddummy;}
- else if(strcmp(d1,"fZWidth")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgZWidth=(Double_t)ddummy;}
- else if(strcmp(d1,"fZSigma")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgZSigma=(Double_t)ddummy;}
- else if(strcmp(d1,"fZLength")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgZLength=(Double_t)ddummy;}
- else if(strcmp(d1,"fZOffset")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgZOffset=(Double_t)ddummy;}
- else if(strcmp(d1,"fNSlice")==0){fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgNSlice=(Int_t)dummy;}
- else if(strcmp(d1,"fDiffT")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgDiffT=(Double_t)ddummy;}
- else if(strcmp(d1,"fDiffL")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgDiffL=(Double_t)ddummy;}
- else if(strcmp(d1,"fOmegaTau")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgOmegaTau=(Double_t)ddummy;}
- else if(strcmp(d1,"fInnerPadLength")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgInnerPadLength=(Double_t)ddummy;}
- else if(strcmp(d1,"fOuter1PadLength")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgOuter1PadLength=(Double_t)ddummy;}
- else if(strcmp(d1,"fOuter2PadLength")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgOuter2PadLength=(Double_t)ddummy;}
- else if(strcmp(d1,"fInnerPRFSigma")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgInnerPRFSigma=(Double_t)ddummy;}
- else if(strcmp(d1,"fOuter1PRFSigma")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgOuter1PRFSigma=(Double_t)ddummy;}
- else if(strcmp(d1,"fOuter2PRFSigma")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgOuter2PRFSigma=(Double_t)ddummy;}
- else if(strcmp(d1,"fTimeSigma")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgTimeSigma=(Double_t)ddummy;}
- else if(strcmp(d1,"fADCSat")==0){fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgADCSat=(Int_t)dummy;}
- else if(strcmp(d1,"fZeroSup")==0){fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgZeroSup=(Int_t)dummy;}
- else if(strcmp(d1,"fNRow")==0){
- fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgNRow=(Int_t)dummy;
- if(fgNRow!=159){
- LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::ReadInitFile","Overflow")<<"Number of PadRows should be 159! Check and fgrep the code for 159 to see the consequences of this major change!"<<ENDLOG;
- }
- }
- else if(strcmp(d1,"fNRotShift")==0){fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgNRotShift=(Double_t)ddummy;}
- else if(strcmp(d1,"fX[0]")==0){
- fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgX[0]=(Double_t)ddummy;
- for(Int_t i=1;i<fgNRow;i++){fscanf(fptr,"%s %s %lf %s",d1,d2,&ddummy,d3);fgX[i]=(Double_t)ddummy;}
- }
- else if(strcmp(d1,"fNPads[0]")==0){
- fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgNPads[0]=(Int_t)dummy;
- for(Int_t i=1;i<fgNRow;i++){fscanf(fptr,"%s %s %d %s",d1,d2,&dummy,d3);fgNPads[i]=(Int_t)dummy;}
- }
- else if(strcmp(d1,"fNRows[0]")==0){
- fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgNRows[0]=(Int_t)dummy;
- for(Int_t i=1;i<fgNPatches;i++){fscanf(fptr,"%s %s %d %s",d1,d2,&dummy,d3);fgNRows[i]=(Int_t)dummy;}
- }
- else if(strcmp(d1,"fRows[0][0]")==0){
- fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgRows[0][0]=(Int_t)dummy;
- fscanf(fptr,"%s %s %d %s",d1,d2,&dummy,d3);fgRows[0][1]=(Int_t)dummy;
- for(Int_t i=1;i<fgNPatches;i++){
- fscanf(fptr,"%s %s %d %s",d1,d2,&dummy,d3);fgRows[i][0]=(Int_t)dummy;
- fscanf(fptr,"%s %s %d %s",d1,d2,&dummy,d3);fgRows[i][1]=(Int_t)dummy;
- }
- }
- else if(strcmp(d1,"fSlice2Sector[0][0]")==0){
- fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgSlice2Sector[0][0]=(Int_t)dummy;
- fscanf(fptr,"%s %s %d %s",d1,d2,&dummy,d3);fgSlice2Sector[0][1]=(Int_t)dummy;
- for(Int_t i=1;i<fgNSlice;i++){
- fscanf(fptr,"%s %s %d %s",d1,d2,&dummy,d3);fgSlice2Sector[i][0]=(Int_t)dummy;
- fscanf(fptr,"%s %s %d %s",d1,d2,&dummy,d3);fgSlice2Sector[i][1]=(Int_t)dummy;
- }
- }
- else if(strcmp(d1,"fSector2Slice[0]")==0){
- fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgSector2Slice[0]=(Int_t)dummy;
- for(Int_t i=1;i<fgNSector;i++){fscanf(fptr,"%s %s %d %s",d1,d2,&dummy,d3);fgSector2Slice[i]=(Int_t)dummy;}
- }
- else if(strcmp(d1,"fSectorLow[0]")==0){
- fscanf(fptr,"%s %d %s",d2,&dummy,d3);fgSectorLow[0]=(Int_t)dummy;
- for(Int_t i=1;i<fgNSector;i++){fscanf(fptr,"%s %s %d %s",d1,d2,&dummy,d3);fgSectorLow[i]=(Int_t)dummy;}
- }
- else if(strcmp(d1,"fCos[0]")==0){
- fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgCos[0]=(Double_t)ddummy;
- for(Int_t i=1;i<fgNSlice;i++){fscanf(fptr,"%s %s %lf %s",d1,d2,&ddummy,d3);fgCos[i]=(Double_t)ddummy;}
- }
- else if(strcmp(d1,"fSin[0]")==0){
- fscanf(fptr,"%s %lf %s",d2,&ddummy,d3);fgSin[0]=(Double_t)ddummy;
- for(Int_t i=1;i<fgNSlice;i++){fscanf(fptr,"%s %s %lf %s",d1,d2,&ddummy,d3);fgSin[i]=(Double_t)ddummy;}
- }
- }
- fclose(fptr);
-
- //The first multiplier gives the scale factor used to modify the field map
- //defined by the second multiplier.
- fgBField=fgBFieldFactor*fgSolenoidBField*0.1;
-
- //Test if new config file has been used.
- if(fgVersion==kVdeprecated){
- LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::ReadInitFile","Version")
- <<"Version is deprecated, you have to create a new config file."<<ENDLOG;
- return kFALSE;
- }
-
- LOG(AliHLTTPCLog::kInformational,"AliHLTTPCTransform::ReadInitFile","Config")
- <<"Successfully loaded values from config file \""<<pathname<<"\""<<ENDLOG;
-
- return kTRUE;
-}
-
-Bool_t AliHLTTPCTransform::ReadInit(Char_t *path)
-{
- //Read all the parameters from a aliroot file, and store it in a temporary
- //file which is read by Init. Use this if you want to read the parameters from
- //the rootfile "every" time.
-
-#ifndef use_aliroot
- LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::ReadInit","Version")
- <<"You have to compile with use_aliroot flag in order to read from AliROOT file"<<ENDLOG;
- return kFALSE;
-#else
- Char_t filename[1024];
- //first test whether provided path is the rootfile itself
- Int_t saveErrIgLevel=gErrorIgnoreLevel;
- gErrorIgnoreLevel=kFatal; //dont report errors
- TFile *rootfile = TFile::Open(path);
- if(!rootfile || rootfile->IsZombie())
- { //ok assume its path to alirunfile file
- sprintf(filename,"%s/alirunfile.root",path); //create rootfile name
- } else { //path contains itself the rootfile name
- rootfile->Close();
- sprintf(filename,"%s",path);
- }
- gErrorIgnoreLevel=saveErrIgLevel;
-
- //finally make dummy init file /tmp/$USER/l3transform.config-`date`
- Char_t tmppath[1024];
- sprintf(tmppath,"/tmp/%s",gSystem->Getenv("USER"));
- gSystem->mkdir(tmppath);
- TTimeStamp time;
- Char_t tmpfile[1024];
- sprintf(tmpfile,"%s/l3transform.config-%d",tmppath,(Int_t)time.GetSec());
- return MakeInitFile(filename,tmpfile);
-#endif
-}
-
-Bool_t AliHLTTPCTransform::MakeInitFile(Char_t *rootfilename,Char_t *filename)
-{
- //Get the parameters from rootfile, and store it on the file "l3transform.config"
- //which is being read by Init. fVersion will be kV_aliroot!
-
-#ifndef use_aliroot
- LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::MakeInitFile","Version")
- <<"You have to compile with use_aliroot flag in order to use this function"<<ENDLOG;
- return kFALSE;
-#else
- TFile *rootfile = TFile::Open(rootfilename);
- if(!rootfile)
- {
- LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::MakeInitFile","File")
- <<"Could not open file: "<<rootfilename<<ENDLOG;
- return kFALSE;
- }
- AliRun *gAlice = (AliRun*)rootfile->Get("gAlice");
- if(!gAlice)
- {
- LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::MakeInitFile","File")
- <<"No gAlice in file: "<<rootfilename<<ENDLOG;
- return kFALSE;
- }
- AliTPCParamSR *param=(AliTPCParamSR*)rootfile->Get(GetParamName());
- if(!param)
- {
- LOG(AliHLTTPCLog::kWarning,"AliHLTTPCTransform::MakeInitFile","File")
- <<"No TPC parameters found in \""<<rootfilename
- <<"\", creating standard parameters "
- <<"which might not be what you want!"<<ENDLOG;
- param=new AliTPCParamSR;
- }
-
- AliTPCPRF2D * prfinner = new AliTPCPRF2D;
- AliTPCPRF2D * prfouter1 = new AliTPCPRF2D;
- AliTPCPRF2D * prfouter2 = new AliTPCPRF2D;
- AliTPCRF1D * rf = new AliTPCRF1D(kTRUE);
- rf->SetGauss(param->GetZSigma(),param->GetZWidth(),1.);
- rf->SetOffset(3*param->GetZSigma());
- rf->Update();
-
- TDirectory *savedir=gDirectory;
- TFile *prf_file = TFile::Open("$ALICE_ROOT/TPC/AliTPCprf2d.root");
- if (!prf_file->IsOpen())
- {
- LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::MakeInitFile","File")
- <<"Can't open $ALICE_ROOT/TPC/AliTPCprf2d.root !"<<ENDLOG;
- return kFALSE;
- }
- prfinner ->Read("prf_07504_Gati_056068_d02");
- prfouter1->Read("prf_10006_Gati_047051_d03");
- prfouter2->Read("prf_15006_Gati_047051_d03");
- prf_file->Close();
- savedir->cd();
-
- param->SetInnerPRF(prfinner);
- param->SetOuter1PRF(prfouter1);
- param->SetOuter2PRF(prfouter2);
- param->SetTimeRF(rf);
-
- fgNTimeBins = param->GetMaxTBin()+1;
- fgNRowLow = param->GetNRowLow();
- fgNRowUp = param->GetNRowUp();
- fgNRowUp1 = param->GetNRowUp1();
- fgNRowUp2 = param->GetNRowUp2();
- fgNRow= fgNRowLow + fgNRowUp;
- if(fgNRow!=159){
- LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::MakeInitFile","fNRow")
- <<"Number of rows have changed in ALIROOT"<<ENDLOG;
- return kFALSE;
- }
-
- fgNSectorLow = param->GetNInnerSector();
- fgNSectorUp = param->GetNOuterSector();
- fgNSector = fgNSectorLow + fgNSectorUp;
-
- //test whether they were changes to the rotation shift
- fgNRotShift=0;
- Float_t irotshift = param->GetInnerAngleShift(); //shift angle
- Float_t orotshift = param->GetOuterAngleShift(); //shift angle
- const Float_t kDegtoRad = 0.01745329251994;
- Int_t shift1=TMath::Nint(irotshift/kDegtoRad);
- Int_t shift2=TMath::Nint(orotshift/kDegtoRad+0.1);
- if((shift1!=shift2) || (shift1!=10)){
- LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::MakeInitFile","Rotshiftangle")
- <<"Rotation shift angle has changed in ALIROOT"<<ENDLOG;
- return kFALSE;
- } else {
- fgNRotShift=0.5; //our version of the shift angle
- }
-
- fgVersion=kValiroot;
- SetBFieldFactor((Double_t)gAlice->Field()->Factor());
- SetSolenoidBField(-
- (Double_t)gAlice->Field()->SolenoidField()/
- (Double_t)gAlice->Field()->Factor()
- );
- fgPadPitchWidthLow=param->GetInnerPadPitchWidth();
- fgPadPitchWidthUp=param->GetOuterPadPitchWidth();
- fgZWidth=param->GetZWidth();
- fgZSigma=param->GetZSigma();
- fgZLength=param->GetZLength();
- fgZOffset=param->GetZOffset();
- fgDiffT=param->GetDiffT();
- fgDiffL=param->GetDiffL();
- fgOmegaTau=param->GetOmegaTau();
- fgInnerPadLength=param->GetInnerPadLength();
- fgOuter1PadLength=param->GetOuter1PadLength();
- fgOuter2PadLength=param->GetOuter2PadLength();
- fgInnerPRFSigma=param->GetInnerPRF()->GetSigmaX();
- fgOuter1PRFSigma=param->GetOuter1PRF()->GetSigmaX();
- fgOuter2PRFSigma=param->GetOuter2PRF()->GetSigmaX();
- fgTimeSigma=param->GetTimeRF()->GetSigma();
- fgADCSat=param->GetADCSat();
- fgZeroSup=param->GetZeroSup();
- fgNSlice=fgNSectorLow;
-
- //now do the arrays
- for(Int_t i=0;i<fgNRow;i++){
- Int_t sec,row;
- if( i < fgNRowLow){sec =0;row =i;}
- else{sec = fgNSectorLow;row =i-fgNRowLow;}
- fgX[i]=param->GetPadRowRadii(sec,row);
- }
- for(Int_t i=0;i<fgNRow;i++){
- Int_t sec,row;
- if( i < fgNRowLow){sec =0;row =i;}
- else{sec = fgNSectorLow;row =i-fgNRowLow;}
- fgNPads[i]=param->GetNPads(sec,row);
- }
- for(Int_t i=0;i<fgNSector;i++){
- if(i<fgNSectorLow) fgSectorLow[i]=1;
- else fgSectorLow[i]=0;
- }
-
- delete gAlice;
- rootfile->Close();
- delete rootfile;
-
- return SaveInitFile(filename);
-#endif
-}
-
-Bool_t AliHLTTPCTransform::SaveInitFile(Char_t *filenamepath)
-{
- //store the parameters in the file "filenamepath"
-
- FILE *f = fopen(filenamepath,"w");
- if(!f){
- LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::SaveInitFile","File")
- <<"Could not open file: "<<filenamepath<<ENDLOG;
- return kFALSE;
- }
-
- fprintf(f,"void AliHLTTPCTransform::Init(){\n");
- fprintf(f," fVersion = %d;\n", fgVersion);
- fprintf(f," fBFieldFactor = %.3f;\n",fgBFieldFactor);
- fprintf(f," fSolenoidBField = %.3f;\n",fgSolenoidBField);
- fprintf(f," fNTimeBins = %d;\n",fgNTimeBins);
- fprintf(f," fNRowLow = %d;\n",fgNRowLow);
- fprintf(f," fNRowUp = %d;\n",fgNRowUp);
- fprintf(f," fNRowUp1 = %d;\n",fgNRowUp1);
- fprintf(f," fNRowUp2 = %d;\n",fgNRowUp2);
- fprintf(f," fNSectorLow = %d;\n",fgNSectorLow);
- fprintf(f," fNSectorUp = %d;\n",fgNSectorUp);
- fprintf(f," fNSector = %d;\n",fgNSector);
- fprintf(f," fPadPitchWidthLow = %.3f;\n",fgPadPitchWidthLow);
- fprintf(f," fPadPitchWidthUp = %.3f;\n",fgPadPitchWidthUp);
- fprintf(f," fZWidth = %.4f;\n",fgZWidth);
- fprintf(f," fZSigma = %.4f;\n",fgZSigma);
- fprintf(f," fZLength = %.4f;\n",fgZLength);
- fprintf(f," fZOffset = %.4f;\n",fgZOffset);
- fprintf(f," fDiffT = %.4f;\n",fgDiffT);
- fprintf(f," fDiffL = %.4f;\n",fgDiffL);
- fprintf(f," fOmegaTau = %.4f;\n",fgOmegaTau);
- fprintf(f," fInnerPadLength = %.3f;\n",fgInnerPadLength);
- fprintf(f," fOuter1PadLength = %.3f;\n",fgOuter1PadLength);
- fprintf(f," fOuter2PadLength = %.3f;\n",fgOuter2PadLength);
- fprintf(f," fInnerPRFSigma = %.6f;\n",fgInnerPRFSigma);
- fprintf(f," fOuter1PRFSigma = %.6f;\n",fgOuter1PRFSigma);
- fprintf(f," fOuter2PRFSigma = %.6f;\n",fgOuter2PRFSigma);
- fprintf(f," fTimeSigma = %.6f;\n",fgTimeSigma);
- fprintf(f," fADCSat = %d;\n",fgADCSat);
- fprintf(f," fZeroSup = %d;\n",fgZeroSup);
- fprintf(f," fNSlice = %d;\n",fgNSlice);
- fprintf(f," fNRow = %d;\n",fgNRow);
- fprintf(f," fNRotShift = %.2f;\n",fgNRotShift);
- //now do the arrays
- for(Int_t i=0;i<fgNRow;i++){
- fprintf(f," fX[%d] = %3.2f;\n",i,fgX[i]);
- }
- for(Int_t i=0;i<fgNRow;i++){
- fprintf(f," fNPads[%d] = %d;\n",i,fgNPads[i]);
- }
-
- //Slice/Sector dont belong to aliroot, but we want to be flexible
- for(Int_t i=0;i<fgNSlice;i++){
- fprintf(f," fSlice2Sector[%d][0] = %d;\n",i,fgSlice2Sector[i][0]);
- fprintf(f," fSlice2Sector[%d][1] = %d;\n",i,fgSlice2Sector[i][1]);
- }
- for(Int_t i=0;i<fgNSector;i++){
- fprintf(f," fSector2Slice[%d] = %d;\n",i,fgSector2Slice[i]);
- }
- for(Int_t i=0;i<fgNSector;i++){
- fprintf(f," fSectorLow[%d] = %d;\n",i,fgSectorLow[i]);
- }
-
- //Patches also dont really belong to the aliroot settings (but nevermind)
- for(Int_t i=0;i<fgNPatches;i++){
- fprintf(f," fNRows[%d] = %d;\n",i,fgNRows[i]);
- }
- for(Int_t i=0;i<fgNPatches;i++){
- fprintf(f," fRows[%d][0] = %d;\n",i,fgRows[i][0]);
- fprintf(f," fRows[%d][1] = %d;\n",i,fgRows[i][1]);
- }
-
- //Rotation shift is an addon, too
- for(Int_t i=0;i<fgNSlice;i++){
- Float_t cs = cos( (2*fgkPi/18) * (i+fgNRotShift) );
- fprintf(f," fCos[%d] = %.10f;\n",i,cs);
- }
- for(Int_t i=0;i<fgNSlice;i++){
- Float_t sn = sin( (2*fgkPi/18) * (i+fgNRotShift) );
- fprintf(f," fSin[%d] = %.10f;\n",i,sn);
- }
-
- fprintf(f,"}\n");
- fclose(f);
-
- LOG(AliHLTTPCLog::kInformational,"AliHLTTPCTransform::SaveInitFile","File created")
- <<"Init file \""<<filenamepath<<"\" created"<<ENDLOG;
-
- return kTRUE;
-}
-
Int_t AliHLTTPCTransform::GetNPads(Int_t row)
{
//get number of pads per row
Double_t drift;
if(z > 0)
- drift = AliHLTTPCTransform::GetZLength() - z;
+ drift = AliHLTTPCTransform::GetZLength()-0.275 - z;
else
- drift = AliHLTTPCTransform::GetZLength() + z;
+ drift = AliHLTTPCTransform::GetZLength()-0.302 + z;
Double_t t1 = fgZSigma*fgZSigma;
Double_t t2 = fgDiffL*fgDiffL*drift;
Bool_t AliHLTTPCTransform::Slice2Sector(Int_t slice, Int_t slicerow, Int_t & sector, Int_t &row)
{
- //slice to sector number
+ //slice no to sector number
+ //row no to local sector row no
if(slicerow<0&&slicerow>=fgNRow){
LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::Slice2Sector","Slicerow")
<<AliHLTTPCLog::kDec<<"Wrong slicerow "<<slicerow<<ENDLOG;
Double_t AliHLTTPCTransform::GetMaxY(Int_t slicerow)
{
//get maximum y value (for slice 0)
+ if (slicerow>=fgNRow) {
+ LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::GetMaxY","Slicerow")
+ <<AliHLTTPCLog::kDec<<"slicerow out of range"<<slicerow<<ENDLOG;
+ }
if(slicerow < fgNRowLow)
return fgPadPitchWidthLow*fgNPads[slicerow]/2;
//Transformation from rawdata to local coordinate system
Int_t slice,slicerow;
- Sector2Slice(slice, slicerow, sector, row);
+ if (Sector2Slice(slice, slicerow, sector, row)==kFALSE) return;
//X-Value
xyz[0]=Row2X(slicerow);
//Y-Value
+ if (slicerow>=fgNRow) {
+ LOG(AliHLTTPCLog::kError,"AliHLTTPCTransform::GetMaxY","Slicerow")
+ <<AliHLTTPCLog::kDec<<"slicerow out of range"<<slicerow<<ENDLOG;
+ return;
+ }
Int_t npads= fgNPads[slicerow];
if(fgSectorLow[sector])
//Z-Value (remember PULSA Delay)
if(slice < 18)
- xyz[2]=fgZLength-fgZWidth*time+fgZOffset;
+ xyz[2]=GetZLength()-GetZWidth()*time+GetZOffset();
else
- xyz[2]=fgZWidth*time-fgZOffset-fgZLength;
+ xyz[2]=GetZWidth()*time-GetZOffset()-GetZLength();
}
void AliHLTTPCTransform::Raw2Local(Float_t *xyz,Int_t sector,Int_t row,Int_t pad,Int_t time)
//Z-Value (remember PULSA Delay)
if(slice < 18)
- xyz[2]=fgZLength-fgZWidth*time+fgZOffset;
+ xyz[2]=GetZLength()-GetZWidth()*time+GetZOffset();
else
- xyz[2]=fgZWidth*time-fgZOffset-fgZLength;
+ xyz[2]=GetZWidth()*time-GetZOffset()-GetZLength();
}
void AliHLTTPCTransform::RawHLT2Local(Float_t *xyz,Int_t slice,
//Z-Value
if(slice < 18)
- xyz[2]=fgZLength-fgZWidth*time+fgZOffset;
+ xyz[2]=GetZLength()-GetZWidth()*time+GetZOffset();
else
- xyz[2]=fgZWidth*time-fgZOffset-fgZLength;
+ xyz[2]=GetZWidth()*time-GetZOffset()-GetZLength();
}
void AliHLTTPCTransform::RawHLT2Local(Float_t *xyz,Int_t slice,
//Z-Value
if(slice < 18)
- xyz[2]=fgZLength-fgZWidth*time+fgZOffset;
+ xyz[2]=GetZLength()-GetZWidth()*time+GetZOffset();
else
- xyz[2]=fgZWidth*time-fgZOffset-fgZLength;
+ xyz[2]=GetZWidth()*time-GetZOffset()-GetZLength();
}
void AliHLTTPCTransform::Local2Global(Float_t *xyz,Int_t sector,Int_t row)
xyz[1]=xyz[1]/fgPadPitchWidthUp+0.5*(fgNPads[slicerow]-1);
if(slice < 18)
- xyz[2]=(fgZLength-xyz[2]+fgZOffset)/fgZWidth;
+ xyz[2]=(GetZLength()-xyz[2]+GetZOffset())/GetZWidth();
else
- xyz[2]=(fgZLength+xyz[2]+fgZOffset)/fgZWidth;
+ xyz[2]=(GetZLength()+xyz[2]+GetZOffset())/GetZWidth();
}
void AliHLTTPCTransform::LocHLT2Raw(Float_t *xyz,Int_t slice,Int_t slicerow)
xyz[1]=xyz[1]/fgPadPitchWidthUp+0.5*(fgNPads[slicerow]-1);
if(slice < 18)
- xyz[2]=(fgZLength-xyz[2]+fgZOffset)/fgZWidth;
+ xyz[2]=(GetZLength()-xyz[2]+GetZOffset())/GetZWidth();
else
- xyz[2]=(fgZLength+xyz[2]+fgZOffset)/fgZWidth;
+ xyz[2]=(GetZLength()+xyz[2]+GetZOffset())/GetZWidth();
}
void AliHLTTPCTransform::Global2Raw(Float_t *xyz,Int_t sector,Int_t row)
cout << "NOT including any support for TPC Hough transformations." << endl;
#endif // INCLUDE_TPC_HOUGH
-#ifdef use_logging
- cout << "Using logging classes (MLUC): -Duse_logging was given." << endl;
-#else
- cout << "NOT using logging classes (MLUC): -Duse_logging not was given." << endl;
-#endif
-
}