X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FAliTPC.cxx;h=b7aa8998cdd3b9277f01948c68a08500adc14092;hb=dd4bfd89c346ca0dd412e1327c6122a7e34d53de;hp=a2948ae7139e4c31c9bc5afb01846d2b4121f7fc;hpb=6980e2a3e6739fe13dfd37bb26dbde58871db087;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/AliTPC.cxx b/TPC/AliTPC.cxx index a2948ae7139..b7aa8998cdd 100644 --- a/TPC/AliTPC.cxx +++ b/TPC/AliTPC.cxx @@ -52,6 +52,7 @@ #include #include #include +#include #include "AliDigits.h" #include "AliMagF.h" @@ -78,7 +79,7 @@ #include "AliTPCCalROC.h" #include "AliTPCExB.h" #include "AliRawReader.h" -#include "AliTPCRawStream.h" +#include "AliTPCRawStreamV3.h" #include "TTreeStream.h" ClassImp(AliTPC) @@ -99,13 +100,16 @@ ClassImp(AliTPC) fCurrentNoise(0), fActiveSectors(0), fGainFactor(1.), - fDebugStreamer(0) + fDebugStreamer(0), + fLHCclockPhaseSw(0), + fIsGEM(0) { // // Default constructor // fIshunt = 0; + for(Int_t i=0;i<4;i++) fCurrentIndex[i]=0; // fTrackHitsOld = 0; #if ROOT_VERSION_CODE >= ROOT_VERSION(4,0,1) @@ -132,8 +136,10 @@ AliTPC::AliTPC(const char *name, const char *title) fNoiseTable(0), fCurrentNoise(0), fActiveSectors(0), - fGainFactor(1.), - fDebugStreamer(0) + fGainFactor(1.), + fDebugStreamer(0), + fLHCclockPhaseSw(0), + fIsGEM(0) { // @@ -162,7 +168,7 @@ AliTPC::AliTPC(const char *name, const char *title) fHitType = 2; #endif - + for(Int_t i=0;i<4;i++) fCurrentIndex[i]=0; // fIshunt = 0; @@ -184,7 +190,12 @@ AliTPC::AliTPC(const char *name, const char *title) } } - +void AliTPC::CreateDebugStremer(){ + // + // Create Debug streamer to check simulation + // + fDebugStreamer = new TTreeSRedirector("TPCSimdebug.root"); +} //_____________________________________________________________________________ AliTPC::~AliTPC() { @@ -259,7 +270,7 @@ void AliTPC::CreateMaterials() wmat[0]=0.2729; wmat[1]=0.7271; - density=0.0018872; + density=0.001754609; AliMixture(10,"CO2",amat,zmat,density,2,wmat); @@ -285,30 +296,33 @@ void AliTPC::CreateMaterials() // // Drift gases 1 - nonsensitive, 2 - sensitive - // Ne-CO2-N2 (90-10-5) (volume) values at 20deg and 1 atm. - // rho(Ne) = 0.839 g/cm^3, rho(CO2) = 1.842 g/cm^3, rho(N2) = 1.165 g/cm^3 - // for the calculation - everything is normalized to 1 + // Ne-CO2 (90-10) (volume) values at 20deg and 1 atm. + // rho(Ne) = 0.839 g/cm^3, rho(CO2) = 1.842 g/cm^3 + amat[0]= 20.18; amat[1]=12.011; amat[2]=15.9994; - amat[3]=14.007; + // amat[3]=14.007; zmat[0]= 10.; zmat[1]=6.; zmat[2]=8.; - zmat[3]=7.; - - wmat[0]=0.756992632; - wmat[1]=0.056235789; - wmat[2]=0.128469474; - wmat[3]=0.058395789; + // zmat[3]=7.; + + //wmat[0]=0.756992632; + wmat[0]=0.8038965; + //wmat[1]=0.056235789; + wmat[1]= 0.053519; + //wmat[2]=0.128469474; + wmat[2]= 0.1425743; + // wmat[3]=0.058395789; - density=0.0009733; + density=0.0009393; - AliMixture(12,"Ne-CO2-N-1",amat,zmat,density,4,wmat); - AliMixture(13,"Ne-CO2-N-2",amat,zmat,density,4,wmat); - AliMixture(30,"Ne-CO2-N-3",amat,zmat,density,4,wmat); + AliMixture(12,"Ne-CO2-1",amat,zmat,density,3,wmat); + AliMixture(13,"Ne-CO2-2",amat,zmat,density,3,wmat); + AliMixture(35,"Ne-CO2-3",amat,zmat,density,3,wmat); //---------------------------------------------------------------------- // solid materials //---------------------------------------------------------------------- @@ -671,10 +685,10 @@ void AliTPC::CreateMaterials() //---------------------------------------------------------- AliMedium(0, "Air", 11, 0, iSXFLD, sXMGMX, 10., 999., .1, .01, .1); - AliMedium(1, "Ne-CO2-N-1", 12, 0, iSXFLD, sXMGMX, 10., 999.,.1,.001, .001); - AliMedium(2, "Ne-CO2-N-2", 13, 1, iSXFLD, sXMGMX, 10., 999.,.1,.001, .001); + AliMedium(1, "Ne-CO2-1", 12, 0, iSXFLD, sXMGMX, 10., 999.,.1,.001, .001); + AliMedium(2, "Ne-CO2-2", 13, 1, iSXFLD, sXMGMX, 10., 999.,.1,.001, .001); AliMedium(3,"CO2",10,0, iSXFLD, sXMGMX, 10., 999.,.1, .001, .001); - AliMedium(20, "Ne-CO2-N-3", 30, 1, iSXFLD, sXMGMX, 10., 999.,.1,.001, .001); + AliMedium(20, "Ne-CO2-3", 35, 1, iSXFLD, sXMGMX, 10., 999.,.1,.001, .001); //----------------------------------------------------------- // tracking media for solids //----------------------------------------------------------- @@ -765,17 +779,19 @@ void AliTPC::SetActiveSectors(Int_t flag) return; } for (Int_t i=0;iGetNSector();i++) fActiveSectors[i]=kFALSE; - TBranch * branch=0; + //TBranch * branch=0; if (fLoader->TreeH() == 0x0) { AliFatal("Can not find TreeH in folder"); return; } - if (fHitType>1) branch = fLoader->TreeH()->GetBranch("TPC2"); - else branch = fLoader->TreeH()->GetBranch("TPC"); + //if (fHitType>1) branch = fLoader->TreeH()->GetBranch("TPC2"); + if (fHitType>1) fLoader->TreeH()->GetBranch("TPC2"); + //else branch = fLoader->TreeH()->GetBranch("TPC"); + else fLoader->TreeH()->GetBranch("TPC"); Stat_t ntracks = fLoader->TreeH()->GetEntries(); // loop over all hits - AliDebug(1,Form("Got %d tracks",ntracks)); + AliDebug(1,Form("Got %d tracks", (Int_t) ntracks)); for(Int_t track=0;trackGetBranch("Segment")->SetAddress(&digrow); @@ -938,8 +955,17 @@ Bool_t AliTPC::Raw2SDigits(AliRawReader* rawReader){ const Int_t kNOS = fTPCParam->GetNOuterSector(); const Int_t kNS = kNIS + kNOS; - Short_t** allBins = NULL; //array which contains the data for one sector - + // Setup storage + AliTPCROC * roc = AliTPCROC::Instance(); + Int_t nRowsMax = roc->GetNRows(roc->GetNSector()-1); + Int_t nPadsMax = roc->GetNPads(roc->GetNSector()-1,nRowsMax-1); + Short_t** allBins = new Short_t*[nRowsMax]; + for (Int_t iRow = 0; iRow < nRowsMax; iRow++) { + Int_t maxBin = kmaxTime*nPadsMax; + allBins[iRow] = new Short_t[maxBin]; + memset(allBins[iRow],0,sizeof(Short_t)*maxBin); + } + for(Int_t iSector = 0; iSector < kNS; iSector++) { Int_t nRows = fTPCParam->GetNRow(iSector); @@ -953,55 +979,65 @@ Bool_t AliTPC::Raw2SDigits(AliRawReader* rawReader){ indexDDL = (iSector-kNIS) * 4 + kNIS * 2; } - // Loas the raw data for corresponding DDLs + // Load the raw data for corresponding DDLs rawReader->Reset(); - AliTPCRawStream input(rawReader); + + AliTPCAltroMapping** mapping =AliTPCcalibDB::Instance()->GetMapping(); + AliTPCRawStreamV3 input(rawReader,(AliAltroMapping**)mapping); rawReader->Select("TPC",indexDDL,indexDDL+nDDLs-1); - // Alocate and init the array with the sector data - allBins = new Short_t*[nRows]; - for (Int_t iRow = 0; iRow < nRows; iRow++) { - Int_t maxPad = fTPCParam->GetNPads(iSector,iRow); - Int_t maxBin = kmaxTime*maxPad; - allBins[iRow] = new Short_t[maxBin]; + // Clean storage + for (Int_t iRow = 0; iRow < nRowsMax; iRow++) { + Int_t maxBin = kmaxTime*nPadsMax; memset(allBins[iRow],0,sizeof(Short_t)*maxBin); } // Begin loop over altro data - while (input.Next()) { + while (input.NextDDL()) { if (input.GetSector() != iSector) AliFatal(Form("Sector index mismatch ! Expected (%d), but got (%d) !",iSector,input.GetSector())); - Int_t iRow = input.GetRow(); - if (iRow < 0 || iRow >= nRows) - AliFatal(Form("Pad-row index (%d) outside the range (%d -> %d) !", - iRow, 0, nRows -1)); - Int_t iPad = input.GetPad(); - - Int_t maxPad = fTPCParam->GetNPads(iSector,iRow); - - if (iPad < 0 || iPad >= maxPad) - AliFatal(Form("Pad index (%d) outside the range (%d -> %d) !", - iPad, 0, maxPad -1)); - - Int_t iTimeBin = input.GetTime(); - if ( iTimeBin < 0 || iTimeBin >= kmaxTime) - AliFatal(Form("Timebin index (%d) outside the range (%d -> %d) !", - iTimeBin, 0, kmaxTime -1)); - - Int_t maxBin = kmaxTime*maxPad; - - if (((iPad*kmaxTime+iTimeBin) >= maxBin) || - ((iPad*kmaxTime+iTimeBin) < 0)) - AliFatal(Form("Index outside the allowed range" - " Sector=%d Row=%d Pad=%d Timebin=%d" - " (Max.index=%d)",iSector,iRow,iPad,iTimeBin,maxBin)); - - allBins[iRow][iPad*kmaxTime+iTimeBin] = input.GetSignal(); + //loop over pads + while ( input.NextChannel() ) { + + Int_t iRow = input.GetRow(); + if (iRow < 0 || iRow >= nRows) + AliFatal(Form("Pad-row index (%d) outside the range (%d -> %d) !", + iRow, 0, nRows -1)); + Int_t iPad = input.GetPad(); + + Int_t maxPad = fTPCParam->GetNPads(iSector,iRow); + + if (iPad < 0 || iPad >= maxPad) + AliFatal(Form("Pad index (%d) outside the range (%d -> %d) !", + iPad, 0, maxPad -1)); + + //loop over bunches + while ( input.NextBunch() ){ + Int_t startTbin = (Int_t)input.GetStartTimeBin(); + Int_t bunchlength = (Int_t)input.GetBunchLength(); + const UShort_t *sig = input.GetSignals(); + for (Int_t iTime = 0; iTime= kmaxTime) { + continue; + //AliFatal(Form("Timebin index (%d) outside the range (%d -> %d) !", + // iTimeBin, 0, kmaxTime -1)); + } + + Int_t maxBin = kmaxTime*maxPad; + if (((iPad*kmaxTime+iTimeBin) >= maxBin) || + ((iPad*kmaxTime+iTimeBin) < 0)) + AliFatal(Form("Index outside the allowed range" + " Sector=%d Row=%d Pad=%d Timebin=%d" + " (Max.index=%d)",iSector,iRow,iPad,iTimeBin,maxBin)); + allBins[iRow][iPad*kmaxTime+iTimeBin] = sig[iTime]; + } + } + } // End loop over altro data + } - } // End loop over altro data - // Now fill the digits array if (fDigitsArray->GetTree()==0) { AliFatal("Tree not set in fDigitsArray"); @@ -1009,7 +1045,6 @@ Bool_t AliTPC::Raw2SDigits(AliRawReader* rawReader){ for (Int_t iRow = 0; iRow < nRows; iRow++) { AliDigits * dig = fDigitsArray->CreateRow(iSector,iRow); - Int_t maxPad = fTPCParam->GetNPads(iSector,iRow); for(Int_t iPad = 0; iPad < maxPad; iPad++) { for(Int_t iTimeBin = 0; iTimeBin < kmaxTime; iTimeBin++) { @@ -1017,6 +1052,7 @@ Bool_t AliTPC::Raw2SDigits(AliRawReader* rawReader){ if (q <= 0) continue; q *= 16; dig->SetDigitFast((Short_t)q,iTimeBin,iPad); + ((AliSimDigits*)dig)->SetTrackIDFast( 3141593, iTimeBin,iPad,0); } } fDigitsArray->StoreRow(iSector,iRow); @@ -1029,26 +1065,42 @@ Bool_t AliTPC::Raw2SDigits(AliRawReader* rawReader){ fDigitsArray->ClearRow(iSector,iRow); } // end of the sector digitization - - for (Int_t iRow = 0; iRow < nRows; iRow++) - delete [] allBins[iRow]; - - delete [] allBins; - } + // get LHC clock phase from the digits tree - fLoader->WriteSDigits("OVERWRITE"); + TParameter *ph; + Float_t phase; + TTree *digtree = fLoader->TreeD(); + // + if(digtree){ // if TreeD exists + ph = (TParameter*)digtree->GetUserInfo()->FindObject("lhcphase0"); + phase = ph->GetVal(); + } + else{ //TreeD does not exist + phase = 0.; + } + // + // store lhc clock phase in S-digits tree + // + fLoader->TreeS()->GetUserInfo()->Add(new TParameter("lhcphase0",phase)); + // + fLoader->WriteSDigits("OVERWRITE"); if(GetDigitsArray()) delete GetDigitsArray(); SetDigitsArray(0x0); + // cleanup storage + for (Int_t iRow = 0; iRow < nRowsMax; iRow++) + delete [] allBins[iRow]; + delete [] allBins; + return kTRUE; } //______________________________________________________________________ -AliDigitizer* AliTPC::CreateDigitizer(AliRunDigitizer* manager) const +AliDigitizer* AliTPC::CreateDigitizer(AliDigitizationInput* digInput) const { - return new AliTPCDigitizer(manager); + return new AliTPCDigitizer(digInput); } //__ void AliTPC::SDigits2Digits2(Int_t /*eventnumber*/) @@ -1165,25 +1217,20 @@ void AliTPC::SetDefaults(){ // AliRunLoader* rl = (AliRunLoader*)fLoader->GetEventFolder()->FindObject(AliRunLoader::GetRunLoaderName()); rl->CdGAFile(); - AliTPCParamSR *param=(AliTPCParamSR*)gDirectory->Get("75x40_100x60"); - // if(param){ -// AliInfo("You are using 2 pad-length geom hits with 3 pad-lenght geom digits..."); -// delete param; -// param = new AliTPCParamSR(); -// } -// else { -// param=(AliTPCParamSR*)gDirectory->Get("75x40_100x60_150x60"); -// } - param = (AliTPCParamSR*)AliTPCcalibDB::Instance()->GetParameters(); + //AliTPCParamSR *param=(AliTPCParamSR*)gDirectory->Get("75x40_100x60"); + //gDirectory->Get("75x40_100x60"); + AliTPCParamSR *param = (AliTPCParamSR*)AliTPCcalibDB::Instance()->GetParameters(); + if(!param){ + AliFatal("No TPC parameters found"); + return; + } if (!param->IsGeoRead()){ // // read transformation matrices for gGeoManager // param->ReadGeoMatrices(); } - if(!param){ - AliFatal("No TPC parameters found"); - } + AliTPCPRF2D * prfinner = new AliTPCPRF2D; @@ -1199,37 +1246,65 @@ void AliTPC::SetDefaults(){ // Use gamma 4 // char strgamma4[1000]; - sprintf(strgamma4,"AliTPCRF1D::Gamma4((x-0.135+%f)*%f,55,160)",3*param->GetZSigma(), 1000000000*param->GetTSample()/param->GetZWidth()); + //sprintf(strgamma4,"AliTPCRF1D::Gamma4((x-0.135+%f)*%f,55,160)",3*param->GetZSigma(), 1000000000*param->GetTSample()/param->GetZWidth()); + snprintf(strgamma4,1000,"AliTPCRF1D::Gamma4((x-0.135+%f)*%f,55,160)",3*param->GetZSigma(), 1000000000*param->GetTSample()/param->GetZWidth()); TF1 * fgamma4 = new TF1("fgamma4",strgamma4, -1,1); AliTPCRF1D * rf = new AliTPCRF1D(kTRUE,1000); rf->SetParam(fgamma4,param->GetZWidth(), 1,0.2); rf->SetOffset(3*param->GetZSigma()); rf->Update(); - TDirectory *savedir=gDirectory; - TFile *f=TFile::Open("$ALICE_ROOT/TPC/AliTPCprf2d.root"); - if (!f->IsOpen()) - AliFatal("Can't open $ALICE_ROOT/TPC/AliTPCprf2d.root !"); - - TString s; - prfinner->Read("prf_07504_Gati_056068_d02"); - //PH Set different names - s=prfinner->GetGRF()->GetName(); - s+="in"; - prfinner->GetGRF()->SetName(s.Data()); - - prfouter1->Read("prf_10006_Gati_047051_d03"); - s=prfouter1->GetGRF()->GetName(); - s+="out1"; - prfouter1->GetGRF()->SetName(s.Data()); - - prfouter2->Read("prf_15006_Gati_047051_d03"); - s=prfouter2->GetGRF()->GetName(); - s+="out2"; - prfouter2->GetGRF()->SetName(s.Data()); - - f->Close(); + + if (fIsGEM==0){ + printf ("TPC MWPC readout\n"); + TFile *f=TFile::Open("$ALICE_ROOT/TPC/AliTPCprf2d.root"); + if (!f->IsOpen()) + AliFatal("Can't open $ALICE_ROOT/TPC/AliTPCprf2d.root !"); + + TString s; + prfinner->Read("prf_07504_Gati_056068_d02"); + //PH Set different names + s=prfinner->GetGRF()->GetName(); + s+="in"; + prfinner->GetGRF()->SetName(s.Data()); + + prfouter1->Read("prf_10006_Gati_047051_d03"); + s=prfouter1->GetGRF()->GetName(); + s+="out1"; + prfouter1->GetGRF()->SetName(s.Data()); + + prfouter2->Read("prf_15006_Gati_047051_d03"); + s=prfouter2->GetGRF()->GetName(); + s+="out2"; + prfouter2->GetGRF()->SetName(s.Data()); + f->Close(); + } + + if (fIsGEM==1){ + printf ("TPC GEM readout\n"); + TFile *f=TFile::Open("$ALICE_ROOT/TPC/AliTPCprf2dGEM.root"); + if (!f->IsOpen()) + AliFatal("Can't open $ALICE_ROOT/TPC/AliTPCprf2dGEM.root !"); + + TString s; + prfinner->Read("prf0"); + //PH Set different names + s=prfinner->GetGRF()->GetName(); + s+="in"; + prfinner->GetGRF()->SetName(s.Data()); + + prfouter1->Read("prf1"); + s=prfouter1->GetGRF()->GetName(); + s+="out1"; + prfouter1->GetGRF()->SetName(s.Data()); + + prfouter2->Read("prf2"); + s=prfouter2->GetGRF()->GetName(); + s+="out2"; + prfouter2->GetGRF()->SetName(s.Data()); + f->Close(); + } savedir->cd(); param->SetInnerPRF(prfinner); @@ -1309,14 +1384,32 @@ void AliTPC::Hits2Digits(Int_t eventnumber) SetDigitsArray(arr); fDigitsSwitch=0; // standard digits - + // here LHC clock phase + Float_t lhcph = 0.; + switch (fLHCclockPhaseSw){ + case 0: + // no phase + lhcph=0.; + break; + case 1: + // random phase + lhcph = (Int_t)(gRandom->Rndm()/0.25); + break; + case 2: + lhcph=0.; + // not implemented yet + break; + } + // adding phase to the TreeD user info + fLoader->TreeD()->GetUserInfo()->Add(new TParameter("lhcphase0",lhcph)); + // for(Int_t isec=0;isecGetNSector();isec++) if (IsSectorActive(isec)) { - AliDebug(1,Form("Hits2Digits","Sector %d is active.",isec)); + AliDebug(1,Form("Hits2Digits: Sector %d is active.",isec)); Hits2DigitsSector(isec); } else { - AliDebug(1,Form("Hits2Digits","Sector %d is NOT active.",isec)); + AliDebug(1,Form("Hits2Digits: Sector %d is NOT active.",isec)); } fLoader->WriteDigits("OVERWRITE"); @@ -1376,6 +1469,25 @@ void AliTPC::Hits2SDigits2(Int_t eventnumber) fDigitsSwitch=1; // summable digits // set zero suppression to "0" + // here LHC clock phase + Float_t lhcph = 0.; + switch (fLHCclockPhaseSw){ + case 0: + // no phase + lhcph=0.; + break; + case 1: + // random phase + lhcph = (Int_t)(gRandom->Rndm()/0.25); + break; + case 2: + lhcph=0.; + // not implemented yet + break; + } + // adding phase to the TreeS user info + + fLoader->TreeS()->GetUserInfo()->Add(new TParameter("lhcphase0",lhcph)); fTPCParam->SetZeroSup(0); @@ -1401,7 +1513,6 @@ void AliTPC::Hits2SDigits() //----------------------------------------------------------- // summable digits - 16 bit "ADC", no noise, no saturation //----------------------------------------------------------- - if (0) fDebugStreamer = new TTreeSRedirector("TPCSimdebug.root"); if (!fTPCParam->IsGeoRead()){ // @@ -1420,7 +1531,7 @@ void AliTPC::Hits2SDigits() SetActiveSectors(); Hits2SDigits2(iEvent); } - + fLoader->UnloadHits(); fLoader->UnloadSDigits(); if (fDebugStreamer) { @@ -1457,13 +1568,10 @@ void AliTPC::Hits2DigitsSector(Int_t isec) Stat_t ntracks = tH->GetEntries(); - - - TObjArray **row; - Int_t nrows =fTPCParam->GetNRow(isec); - row= new TObjArray* [nrows+2]; // 2 extra rows for cross talk + TObjArray **row=new TObjArray* [nrows+2]; // 2 extra rows for cross talk + for(Int_t j=0;j *ph; + if(fDigitsSwitch){// s-digits + ph = (TParameter*)fLoader->TreeS()->GetUserInfo()->FindObject("lhcphase0"); + } + else{ // normal digits + ph = (TParameter*)fLoader->TreeD()->GetUserInfo()->FindObject("lhcphase0"); + } // Loop over all electrons // for(Int_t nel=0; nelGetTotalNormFac(); Float_t xyz[4]={v(idx+1),v(idx+2),v(idx+3),v(idx+5)}; - Int_t n = ((AliTPCParamSR*)fTPCParam)->CalcResponseFast(xyz,fCurrentIndex,fCurrentIndex[3]); + Int_t n = ((AliTPCParamSR*)fTPCParam)->CalcResponseFast(xyz,fCurrentIndex, + fCurrentIndex[3],ph->GetVal()); Int_t *index = fTPCParam->GetResBin(0); Float_t *weight = & (fTPCParam->GetResWeight(0)); @@ -2233,7 +2351,8 @@ void AliTPC::MakeBranch(Option_t *option) AliDebug(1,""); if (fHitType<2) return; char branchname[10]; - sprintf(branchname,"%s2",GetName()); + //sprintf(branchname,"%s2",GetName()); + snprintf(branchname,10,"%s2",GetName()); // // Get the pointer to the header const char *cH = strstr(option,"H"); @@ -2270,7 +2389,8 @@ void AliTPC::SetTreeAddress2() TBranch *branch; char branchname[20]; - sprintf(branchname,"%s2",GetName()); + //sprintf(branchname,"%s2",GetName()); + snprintf(branchname,20,"%s2",GetName()); // // Branch address for hit tree TTree *treeH = fLoader->TreeH(); @@ -2482,7 +2602,8 @@ AliTPCParam* AliTPC::LoadTPCParam(TFile *file) { // and one has to decide where to store the TPC parameters // M.Kowalski char paramName[50]; - sprintf(paramName,"75x40_100x60_150x60"); + //sprintf(paramName,"75x40_100x60_150x60"); + snprintf(paramName,50,"75x40_100x60_150x60"); AliTPCParam *paramTPC=(AliTPCParam*)file->Get(paramName); if (paramTPC) { AliDebugClass(1,Form("TPC parameters %s found.",paramName));