X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=T0%2FAliT0Parameters.cxx;h=d6070c141f18d3deb31bbe45a22abd2c7a6fa879;hb=e84da0a59eb45371523942b58de22d42109c9d36;hp=83db0b48bb1cb24e54455a15a32faf46666572d6;hpb=e0bba6cc81aa1e2debbc76aee8cb48b94a4cf040;p=u%2Fmrichter%2FAliRoot.git diff --git a/T0/AliT0Parameters.cxx b/T0/AliT0Parameters.cxx index 83db0b48bb1..d6070c141f1 100644 --- a/T0/AliT0Parameters.cxx +++ b/T0/AliT0Parameters.cxx @@ -24,17 +24,28 @@ // Eventually, this class will use the Conditions DB to get the // various parameters, which code can then request from here. // +#include "AliT0.h" #include "AliLog.h" #include "AliT0Parameters.h" #include "AliT0CalibData.h" +#include "AliT0CalibWalk.h" +#include "AliT0CalibTimeEq.h" +#include "AliT0LookUpKey.h" #include "AliT0LookUpValue.h" #include #include -#include -#include - -AliT0CalibData* AliT0Parameters::fgCalibData = 0; +#include +#include +#include +//#include +#include +#include +#include +#include + +AliT0CalibTimeEq* AliT0Parameters::fgCalibData = 0; AliT0CalibData* AliT0Parameters::fgLookUp = 0; +AliT0CalibWalk* AliT0Parameters::fgSlewCorr =0; //==================================================================== ClassImp(AliT0Parameters) #if 0 @@ -44,42 +55,51 @@ ClassImp(AliT0Parameters) //____________________________________________________________________ AliT0Parameters* AliT0Parameters::fgInstance = 0; //____________________________________________________________________ -AliT0Parameters* -AliT0Parameters::Instance() +AliT0Parameters* AliT0Parameters::Instance() { // Get static instance - if (!fgInstance) fgInstance = new AliT0Parameters; + if (!fgInstance) { + fgInstance = new AliT0Parameters; + } return fgInstance; } //____________________________________________________________________ AliT0Parameters::AliT0Parameters() - :fIsInit(kFALSE),fPh2Mip(0),fmV2Mip(0),fChannelWidth(0),fmV2Channel(0),fQTmin(0),fQTmax(0),fFixedGain(0),fSlewingLED(),fSlewingRec(),fPMTeff(),fTimeDelayLED(0),fTimeDelayCFD(0),fTimeDelayTVD(0),fCalibentry() + :fIsInit(kFALSE), + fPh2Mip(0),fmV2Mip(0), + fChannelWidth(0),fmV2Channel(0), + fQTmin(0),fQTmax(0), + fAmpLEDRec(0), + fPMTeff(), + fWalk(0), + fQTC(0), + fAmpLED(0), + fTimeDelayCFD(0), + // fTimeV0(0), + fTimeDelayTVD(0), + fMeanT0(512), + fMeanVertex(0), + fLookUp(0), + fNumberOfTRMs(2), + fCalibentry(), fLookUpentry(),fSlewCorr() + + { // Default constructor - for (Int_t ipmt=0; ipmt<24; ipmt++) { - SetTimeDelayCablesCFD(ipmt); - SetTimeDelayCablesLED(ipmt); - SetTimeDelayElectronicCFD(ipmt); - SetTimeDelayElectronicLED(ipmt); - SetTimeDelayPMT(ipmt); - SetVariableDelayLine(ipmt); - SetSlewingLED(ipmt); - SetSlewingRec(ipmt); SetPh2Mip(); SetmV2Mip(); SetChannelWidth(); SetmV2channel(); - SetGain(); SetQTmin(); SetQTmax(); SetPMTeff(ipmt); - } + } SetTimeDelayTVD(); SetZposition(); - + } //__________________________________________________________________ @@ -88,143 +108,150 @@ AliT0Parameters::Init() { // Initialize the parameters manager. We need to get stuff from the // CDB here. - // if (fIsInit) return; - - AliCDBManager* cdb = AliCDBManager::Instance(); - // AliCDBStorage *stor = cdb->GetStorage("local://$ALICE_ROOT"); - fCalibentry = cdb->Get("T0/Calib/Gain_TimeDelay_Slewing_Walk"); - if (fCalibentry){ - fgCalibData = (AliT0CalibData*)fCalibentry->GetObject(); + if (fIsInit) return; + + AliCDBManager *stor =AliCDBManager::Instance(); + //time equalizing + fCalibentry = stor->Get("T0/Calib/TimeDelay"); + if (fCalibentry) + fgCalibData = (AliT0CalibTimeEq*)fCalibentry->GetObject(); + else { + AliFatal(" ALARM !!!! No time delays in CDB "); + fIsInit = kFALSE; + return; + } + //slewing correction + fSlewCorr = stor->Get("T0/Calib/Slewing_Walk"); + if (fSlewCorr){ + fgSlewCorr = (AliT0CalibWalk*)fSlewCorr->GetObject(); + } + else { + AliFatal(" ALARM !!!! No slewing correction in CDB "); + fIsInit = kFALSE; + return; } - fLookUpentry = cdb->Get("T0/Calib/LookUp_Table"); + //lookup table + fLookUpentry = stor->Get("T0/Calib/LookUp_Table"); if (fLookUpentry){ fgLookUp = (AliT0CalibData*)fLookUpentry->GetObject(); - // fgLookUp->Dump(); } else { - fgLookUp->ReadAsciiLookup("$ALICE_ROOT/T0/lookUpTable.txt"); + AliFatal(" ALARM !!!! No Lookup table in CDB "); + fIsInit = kFALSE; + return; } - fIsInit = kTRUE; } //__________________________________________________________________ -Float_t -AliT0Parameters::GetGain(Int_t ipmt) const -{ - // Returns the calibrated gain for each PMT - // - - if (!fCalibentry) - return fFixedGain; - - return fgCalibData->GetGain(ipmt); -} -//__________________________________________________________________ -Float_t -AliT0Parameters::GetTimeDelayLED(Int_t ipmt) +void AliT0Parameters::InitIfOnline() { - // return time delay for LED channel - // - if (!fCalibentry) { - fTimeDelayLED = fTimeDelayCablesLED[ipmt] + fTimeDelayElectronicLED[ipmt] + fTimeDelayPMT[ipmt]; - return fTimeDelayLED; - } - return fgCalibData ->GetTimeDelayLED(ipmt); +// should be used in online +// for switching to this one should write + // AliT0RawReader myrawreader(rawReader); +// myrawreader.SetOnlineMode(kTRUE); + + if (fIsInit) return; + //standart configuration (used for simulation) + //Int_t trm=0; Int_t tdc=0; Int_t chain=0; Int_t channel=0; + // configuration for test Jun07. + fgLookUp = new AliT0CalibData("T0"); + + fNumberOfTRMs = 1; + fgLookUp-> SetNumberOfTRMs(fNumberOfTRMs); + Int_t trm=7; Int_t tdc=0; Int_t chain=0; Int_t channel=0; + for (Int_t ik=0; ik<105; ik++) + { + AliT0LookUpKey * lookkey= new AliT0LookUpKey(); + AliT0LookUpValue * lookvalue= new AliT0LookUpValue(); + + + lookvalue->SetTRM(trm); + lookvalue->SetTDC(tdc); + lookvalue->SetChain(chain); + lookvalue->SetChannel(channel); + lookkey->SetKey(ik); + fgLookUp->GetMapLookup()->Add((TObject*)lookvalue,(TObject*)lookkey); + if (channel<6) channel +=2; + else {channel = 0; tdc++;} + if(ik==56) { tdc=0; channel=0; chain = 1;} + + } + + fIsInit=kTRUE; } //__________________________________________________________________ Float_t AliT0Parameters::GetTimeDelayCFD(Int_t ipmt) -{ + { // return time delay for CFD channel // if (!fCalibentry) { - fTimeDelayCFD = fTimeDelayCablesCFD[ipmt] + fTimeDelayElectronicCFD[ipmt] + fTimeDelayPMT[ipmt] + fVariableDelayLine[ipmt]; - return fTimeDelayCFD+37; + fTimeDelayCFD = 1000+ipmt*100; + return fTimeDelayCFD; } - return fgCalibData->GetTimeDelayCFD(ipmt); + return fgCalibData->GetTimeEq(ipmt); } - //__________________________________________________________________ -void -AliT0Parameters::SetSlewingLED(Int_t ipmt) -{ - // Set Slweing Correction for LED channel - Float_t mv[23] = {25, 30,40,60, 80,100,150,200,250,300, - 400,500,600,800,1000,1500, 2000, 3000, 4000, 5500, - 6000, 7000,8000}; - Float_t y[23] = {5044, 4719, 3835, 3224, 2847, 2691,2327, 2067, 1937, 1781, - 1560, 1456 ,1339, 1163.5, 1027, 819, 650, 520, 370.5, 234, - 156, 78, 0}; - - TGraph* gr = new TGraph(23,mv,y); - fSlewingLED.AddAtAndExpand(gr,ipmt); - } +Float_t +AliT0Parameters:: GetMeanVertex() +{ + if (!fCalibentry) + { + fMeanVertex=0; + return fMeanVertex; + } + + return fgCalibData->GetMeanVertex(); +} //__________________________________________________________________ -Float_t AliT0Parameters::GetSlewingLED(Int_t ipmt, Float_t mv) const +TGraph *AliT0Parameters::GetAmpLEDRec(Int_t ipmt) const { - if (!fCalibentry) { - return ((TGraph*)fSlewingLED.At(ipmt))->Eval(mv); + if (!fSlewCorr) { + AliError("No slewing correction is available!"); + return (TGraph*)fAmpLEDRec.At(ipmt); } - return fgCalibData->GetSlewingLED(ipmt, mv) ; + return fgSlewCorr -> GetAmpLEDRec(ipmt) ; } - //__________________________________________________________________ -TGraph *AliT0Parameters::GetSlew(Int_t ipmt) const +TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const { - if (!fCalibentry) { - return (TGraph*)fSlewingLED.At(ipmt); + if (!fSlewCorr) { + AliError("No walk correction is available!"); + return (TGraph*)fWalk.At(ipmt); } - return fgCalibData -> GetSlew(ipmt) ; + return fgSlewCorr -> GetWalk(ipmt) ; } //__________________________________________________________________ - -void -AliT0Parameters::SetSlewingRec(Int_t ipmt) -{ - // Set Slweing Correction for LED channel - Float_t mv[23] = {25, 30, 40,60, 80,100,150,200,250,300, - 400,500,600,800,1000,1500, 2000, 3000, 4000, 5500, - 6000, 7000,8000}; - Float_t y[23] = {5044, 4719, 3835, 3224, 2847, 2691,2327, 2067, 1937, 1781, - 1560, 1456 ,1339, 1163.5, 1027, 819, 650, 520, 370.5, 234, - 156, 78, 0}; - Float_t y1[23], mv1[23]; - for (Int_t i=0; i<23; i++){ - y1[i] = y[22-i]; mv1[i] = mv[22-i];} - - TGraph* gr = new TGraph(23,y1,mv1); - fSlewingRec.AddAtAndExpand(gr,ipmt); - -} -//__________________________________________________________________ - -Float_t AliT0Parameters::GetSlewingRec(Int_t ipmt, Float_t mv) const +TGraph *AliT0Parameters::GetQTC(Int_t ipmt) const { - if (!fCalibentry) { - return ((TGraph*)fSlewingRec.At(ipmt))->Eval(mv); + if (!fSlewCorr) { + AliError("No walk correction is available!"); + // return (TGraph*)fQTC.At(ipmt); + return 0; } - return fgCalibData -> GetSlewingRec(ipmt, mv) ; + return fgSlewCorr -> GetQTC(ipmt) ; } //__________________________________________________________________ - -TGraph *AliT0Parameters::GetSlewRec(Int_t ipmt) const +TGraph *AliT0Parameters::GetAmpLED(Int_t ipmt) const { - if (!fCalibentry) { - return (TGraph*)fSlewingRec.At(ipmt); + if (!fSlewCorr) { + AliError("No walk correction is available!"); + // return (TGraph*)fQTC.At(ipmt); + return 0; } - return fgCalibData -> GetSlewRec(ipmt) ; + return fgSlewCorr -> GetAmpLED(ipmt) ; } //__________________________________________________________________ @@ -253,18 +280,91 @@ Int_t AliT0Parameters::GetChannel(Int_t trm, Int_t tdc, Int_t chain, Int_t channel) { - - AliT0LookUpKey * lookkey; //= new AliT0LookUpKey(); - AliT0LookUpValue * lookvalue= new AliT0LookUpValue(trm,tdc,chain,channel); - - lookkey = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)lookvalue); - if (!lookkey ) { - cout<<" no such address "<GetMapLookup()->GetValue((TObject*)&key); + // AliT0LookUpKey *val = (AliT0LookUpKey*) fLookUp.GetValue((TObject*)&key); + if (val ) + return val->GetKey(); + else { + AliWarning(Form("No such address (%d %d %d %d)!",trm,tdc,chain,channel)); + return -1; + } } - + else { + AliError("No look up table has been loader!"); + return -1; + } + +} +//__________________________________________________________________ +TMap *AliT0Parameters::GetMapLookup() +{ + if (!fgLookUp){ + cout<<" No look up table in OCDB"; + return 0; + } + return fgLookUp->GetMapLookup(); +} +//__________________________________________________________________ + +Int_t +AliT0Parameters::GetNumberOfTRMs() +{ + // return number of trms + // + if (!fgLookUp) { + // fNumberOfTRMs = 2; + return fNumberOfTRMs; + } + return fgLookUp ->GetNumberOfTRMs(); +} +/* +//________________________________________________________________________________ +Double_t AliT0Parameters::GetZPosition(const char* symname){ +// Get the global z coordinate of the given T0 alignable volume +// + Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation(); - //cout<<"AliT0Parameters:: key "<GetKey()<GetKey(); + return tr[2]; +} +*/ +//________________________________________________________________________________ +Double_t AliT0Parameters::GetZPosition(const char* symname){ +// Get the global z coordinate of the given T0 alignable volume +// + Double_t *tr; + TGeoPNEntry *pne = gGeoManager->GetAlignableEntry(symname); + if (!pne) return 0; + TGeoPhysicalNode *pnode = pne->GetPhysicalNode(); + if(pnode){ + TGeoHMatrix* hm = pnode->GetMatrix(); + tr = hm->GetTranslation(); + }else{ + const char* path = pne->GetTitle(); + if(!gGeoManager->cd(path)){ + AliErrorClass(Form("Volume path %s not valid!",path)); + return 0; + } + tr = gGeoManager->GetCurrentMatrix()->GetTranslation(); + } + return tr[2]; + } +//________________________________________________________________________________ + +Double_t AliT0Parameters::GetZPositionShift(const char* symname) +{ +// Get the global z coordinate of the given T0 alignable volume +// + Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation(); + + TGeoHMatrix origmat; + AliGeomManager::GetOrigGlobalMatrix(symname,origmat); + Double_t *otr = origmat.GetTranslation(); + + return (tr[2]-otr[2]); +} +