X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ZDC%2FAliZDCPreprocessor.cxx;h=c44776c70e2c7a3eb4f16afe81b993d49bbbe480;hb=c8b7b5d3a7d8e15d605e34af228fd41ff6e55331;hp=8e93a70c9fb83eacd10c63e0322a75754d7a4db9;hpb=86dc0caaefbdbc07a4bb4c5680be1951267fa20e;p=u%2Fmrichter%2FAliRoot.git diff --git a/ZDC/AliZDCPreprocessor.cxx b/ZDC/AliZDCPreprocessor.cxx index 8e93a70c9fb..c44776c70e2 100644 --- a/ZDC/AliZDCPreprocessor.cxx +++ b/ZDC/AliZDCPreprocessor.cxx @@ -38,7 +38,9 @@ AliZDCPreprocessor::AliZDCPreprocessor(AliShuttleInterface* shuttle) : AddRunType("STANDALONE_PEDESTAL"); AddRunType("STANDALONE_LASER"); AddRunType("STANDALONE_EMD"); - AddRunType("ALL"); + AddRunType("STANDALONE_COSMIC"); + AddRunType("STANDALONE_BC"); + AddRunType("PHYSICS"); } @@ -68,13 +70,116 @@ void AliZDCPreprocessor::Initialize(Int_t run, UInt_t startTime, fData = new AliZDCDataDCS(fRun, fStartTime, fEndTime); } +//______________________________________________________________________________________________ +UInt_t AliZDCPreprocessor::ProcessChMap(TString runType) +{ + // Reading the file for mapping from FXS + TList* daqSource = GetFileSources(kDAQ, runType.Data()); + if(!daqSource){ + AliError(Form("No sources run %d for run type %s!", fRun, runType.Data())); + return 1; + } + Log("\t List of sources "); daqSource->Print(); + // + TIter iter(daqSource); + TObjString* source = 0; + Int_t isou=0; + Int_t res=999; + Int_t readMap[48][6]; + // + while((source = dynamic_cast (iter.Next()))){ + Log(Form("\n\t Getting file #%d\n",++isou)); + TString fileName = "ZDCChMapping.dat"; + + if(fileName.Length() <= 0){ + Log(Form("No file from source %s!", source->GetName())); + return 1; + } + // --- Reading file with calibration data + //const char* fname = fileName.Data(); + if(fileName){ + FILE *file; + if((file = fopen(fileName,"r")) == NULL){ + printf("Cannot open file %s \n",fileName.Data()); + return 1; + } + Log(Form("File %s connected to process data for ADC mapping", fileName.Data())); + // + for(Int_t j=0; j<48; j++){ + for(Int_t k=0; k<6; k++){ + fscanf(file,"%d",&readMap[j][k]); + } + } + fclose(file); + } + else{ + Log(Form("File %s not found", fileName.Data())); + return 1; + } + } + delete daqSource; daqSource=0; + + // Store the currently read map ONLY IF it is different + // from the entry in the OCDB + Bool_t updateOCDB = kFALSE; + + AliCDBEntry *cdbEntry = GetFromOCDB("Calib","ChMap"); + if(!cdbEntry){ + Log("\t AliZDCPreprocessor -> WARNING! No CDB entry for ch. mapping\n"); + updateOCDB = kTRUE; + } + else{ + AliZDCChMap *chMap = (AliZDCChMap*) cdbEntry->GetObject(); + for(Int_t i=0; i<48; i++){ + if( (readMap[i][1] == chMap->GetADCModule(i)) + && (readMap[i][2] == chMap->GetADCChannel(i)) + && (readMap[i][4] == chMap->GetDetector(i)) + && (readMap[i][5] == chMap->GetSector(i))){ + updateOCDB = kFALSE; + } + else updateOCDB = kTRUE; + } + } + // + if(updateOCDB==kTRUE){ + Log("\t AliZDCPreprocessor -> A new entry ZDC/Calib/ChMap will be created"); + // + // --- Initializing mapping calibration object + AliZDCChMap *mapCalib = new AliZDCChMap("ZDC"); + // Writing channel map in the OCDB + for(Int_t k=0; k<48; k++){ + mapCalib->SetADCModule(k,readMap[k][1]); + mapCalib->SetADCChannel(k,readMap[k][2]); + mapCalib->SetDetector(k,readMap[k][4]); + mapCalib->SetSector(k,readMap[k][5]); + } + //mapCalib->Print(""); + // + AliCDBMetaData metaData; + metaData.SetBeamPeriod(0); + metaData.SetResponsible("Chiara Oppedisano"); + metaData.SetComment("Filling AliZDCChMap object"); + // + res = Store("Calib","ChMap",mapCalib, &metaData, 0, 1); + } + else{ + Log("\t AliZDCPreprocessor -> ZDC/Calib/ChMap entry in OCDB is valid and won't be updated\n"); + res = kTRUE; + } + + + return res; + +} + //______________________________________________________________________________________________ UInt_t AliZDCPreprocessor::Process(TMap* dcsAliasMap) { // *************** From DCS ****************** // Fills data into a AliZDCDataDCS object if(!dcsAliasMap) return 1; - + printf("Processing data from DCS\n"); + // The processing of the DCS input data is forwarded to AliZDCDataDCS Float_t dcsValues[28]; // DCSAliases=28 fData->SetCalibData(dcsValues); @@ -85,8 +190,8 @@ UInt_t AliZDCPreprocessor::Process(TMap* dcsAliasMap) metadata.SetComment("DCS data for ZDC"); Bool_t resDCSRef = kTRUE; resDCSRef = StoreReferenceData("DCS","Data",fData,&metadata); - //dcsAliasMap->Print(""); - // + dcsAliasMap->Print(""); + // --- Writing ZDC table positions into alignment object TClonesArray *array = new TClonesArray("AliAlignObjParams",10); TClonesArray &alobj = *array; @@ -97,10 +202,13 @@ UInt_t AliZDCPreprocessor::Process(TMap* dcsAliasMap) Double_t dyZP1 = (Double_t) (dcsValues[1]/10.); Double_t dyZN2 = (Double_t) (dcsValues[2]/10.); Double_t dyZP2 = (Double_t) (dcsValues[3]/10.); - const char *n1ZDC="ZDC/NeutronZDC1"; - const char *p1ZDC="ZDC/ProtonZDC1"; - const char *n2ZDC="ZDC/NeutronZDC2"; - const char *p2ZDC="ZDC/ProtonZDC2"; + // + + const char *n1ZDC="ZDC/NeutronZDC_C"; + const char *p1ZDC="ZDC/ProtonZDC_C"; + const char *n2ZDC="ZDC/NeutronZDC_A"; + const char *p2ZDC="ZDC/ProtonZDC_A"; + // UShort_t iIndex=0; AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer; UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iIndex); @@ -109,6 +217,7 @@ UInt_t AliZDCPreprocessor::Process(TMap* dcsAliasMap) new(alobj[1]) AliAlignObjParams(p1ZDC, volid, dx, dyZP1, dz, dpsi, dtheta, dphi, kTRUE); new(alobj[2]) AliAlignObjParams(n2ZDC, volid, dx, dyZN2, dz, dpsi, dtheta, dphi, kTRUE); new(alobj[3]) AliAlignObjParams(p2ZDC, volid, dx, dyZP2, dz, dpsi, dtheta, dphi, kTRUE); + // save in CDB storage AliCDBMetaData md; md.SetResponsible("Chiara Oppedisano"); @@ -124,86 +233,40 @@ TString runType = GetRunType(); printf("\n\t AliZDCPreprocessor -> beamType %s\n",beamType); printf("\t AliZDCPreprocessor -> runType %s\n\n",runType.Data()); -// ****************************************** -// ZDC ADC channel mapping -// ****************************************** -TList* daqAllSources = GetFileSources(kDAQ, "ALL"); -if(!daqAllSources){ - AliError(Form("No sources run %d !", fRun)); - return 1; -} -Log("\t List of sources "); daqAllSources->Print(); -// -TIter iterAll(daqAllSources); -TObjString* sourceAll = 0; -Int_t iAll=0; -while((sourceAll = dynamic_cast (iterAll.Next()))){ - Log(Form("\n\t Getting file #%d\n",++iAll)); - TString fileName = GetFile(kDAQ, "ALL", sourceAll->GetName()); - if(fileName.Length() <= 0){ - Log(Form("No file from source %s!", sourceAll->GetName())); - return 1; - } - // --- Initializing pedestal calibration object - AliZDCChMap *mapCalib = new AliZDCChMap("ZDC"); - // --- Reading file with pedestal calibration data - const char* fname = fileName.Data(); - if(fname){ - FILE *fileAll; - if((fileAll = fopen(fname,"r")) == NULL){ - printf("Cannot open file %s \n",fname); - return 1; - } - Log(Form("File %s connected to process data for ADC mapping", fname)); - // - Int_t chMap[48][6]; - for(Int_t j=0; j<48; j++){ - for(Int_t k=0; k<6; k++){ - fscanf(fileAll,"%d",&chMap[j][k]); - } - mapCalib->SetADCModule(j,chMap[j][1]); - mapCalib->SetADCChannel(j,chMap[j][2]); - mapCalib->SetDetector(j,chMap[j][4]); - mapCalib->SetSector(j,chMap[j][5]); - } - fclose(fileAll); - } - else{ - Log(Form("File %s not found", fname)); - return 1; - } - //mapCalib->Print(""); - // - AliCDBMetaData metaData; - metaData.SetBeamPeriod(0); - metaData.SetResponsible("Chiara Oppedisano"); - metaData.SetComment("Filling AliZDCChMap object"); - // - resChMap = Store("Calib","ChMap",mapCalib, &metaData, 0, 1); -} - -// if(strcmp(beamType,"p-p")==0){ - - // --- Initializing pedestal calibration object - AliZDCCalib *eCalib = new AliZDCCalib("ZDC"); - // - for(Int_t j=0; j<6; j++) eCalib->SetEnCalib(j,1.); - for(Int_t j=0; j<5; j++){ + + // --- Cheking if there is already the entry in the OCDB + AliCDBEntry *cdbEntry = GetFromOCDB("Calib", "EMDCalib"); + if(!cdbEntry){ + printf("\t AliZDCPreprocessor -> ZDC/Calib/EMDCalib entry will be created\n"); + // --- Initializing calibration object + AliZDCCalib *eCalib = new AliZDCCalib("ZDC"); + // + for(Int_t j=0; j<6; j++) eCalib->SetEnCalib(j,1.); + for(Int_t j=0; j<5; j++){ eCalib->SetZN1EqualCoeff(j, 1.); eCalib->SetZP1EqualCoeff(j, 1.); eCalib->SetZN2EqualCoeff(j, 1.); eCalib->SetZP2EqualCoeff(j, 1.); + } + //eCalib->Print(""); + // + AliCDBMetaData metaData; + metaData.SetBeamPeriod(0); + metaData.SetResponsible("Chiara Oppedisano"); + metaData.SetComment("AliZDCCalib object"); + // + resECal = Store("Calib","EMDCalib",eCalib, &metaData, 0, 1); + } + else{ + printf("\t AliZDCPreprocessor -> ZDC/Calib/EMDCalib object already existing in OCDB!!!\n"); + resECal = kTRUE; } - //eCalib->Print(""); - // - AliCDBMetaData metaData; - metaData.SetBeamPeriod(0); - metaData.SetResponsible("Chiara Oppedisano"); - metaData.SetComment("AliZDCCalib object"); - // - resECal = Store("Calib","EMDCalib",eCalib, &metaData, 0, 1); } +// ****************************************** +// ZDC ADC channel mapping +// ****************************************** +resChMap = ProcessChMap(runType); // // ***************************************************** // [a] PEDESTALS -> Pedestal subtraction @@ -241,22 +304,22 @@ if(runType=="STANDALONE_PEDESTAL"){ return 1; } Log(Form("File %s connected to process pedestal data", pedFileName)); - Float_t pedVal[(3*knZDCch)][3]; - for(Int_t k=0; k<(3*knZDCch); k++){ - for(Int_t j=0; j<3; j++){ + Float_t pedVal[(2*knZDCch)][2]; + for(Int_t k=0; k<(2*knZDCch); k++){ + for(Int_t j=0; j<2; j++){ fscanf(file,"%f",&pedVal[k][j]); //if(j==1) printf("pedVal[%d] -> %f, %f \n",k,pedVal[k][0],pedVal[k][1]); } if(kSetMeanPed(k,pedVal[k][1]); - pedCalib->SetMeanPedWidth(i,pedVal[k][2]); + pedCalib->SetMeanPed(k,pedVal[k][0]); + pedCalib->SetMeanPedWidth(i,pedVal[k][1]); } else if(k>=knZDCch && k<(2*knZDCch)){ - pedCalib->SetOOTPed(k-knZDCch,pedVal[k][1]); - pedCalib->SetOOTPedWidth(k-knZDCch,pedVal[k][2]); + pedCalib->SetOOTPed(k-knZDCch,pedVal[k][0]); + pedCalib->SetOOTPedWidth(k-knZDCch,pedVal[k][1]); } else if(k>=(2*knZDCch) && k<(3*knZDCch)){ - pedCalib->SetPedCorrCoeff(k-(2*knZDCch),pedVal[k][1],pedVal[k][2]); + pedCalib->SetPedCorrCoeff(k-(2*knZDCch),pedVal[k][0],pedVal[k][1]); } } fclose(file); @@ -311,26 +374,16 @@ else if(runType=="STANDALONE_LASER"){ } Log(Form("File %s connected to process data from LASER events", laserFileName)); // - Float_t ivalRef[2], ivalRead[2][4]; - for(Int_t j=0; j<3; j++){ - if(j==0){ - for(Int_t k=0; k<2; k++){ - fscanf(file,"%f",&ivalRef[k]); - printf(" %1.0f ",ivalRef[k]); - lCalib->SetReferenceValue(k,ivalRef[k]); - } - } - else{ - for(Int_t k=0; k<4; k++){ - fscanf(file,"%f",&ivalRead[j-1][k]); - printf(" %d %1.0f ",k, ivalRead[j-1][k]); - } - lCalib->SetSector(j-1, ivalRead[j-1][0]); - lCalib->SetGain(j-1, ivalRead[j-1][1]); - lCalib->SetfPMRefValue(j-1, ivalRead[j-1][2]); - lCalib->SetfPMRefWidth(j-1, ivalRead[j-1][3]); - } - printf("\n"); + Float_t ivalRead[22][4]; + for(Int_t j=0; j<22; j++){ + for(Int_t k=0; k<4; k++){ + fscanf(file,"%f",&ivalRead[j][k]); + //printf(" %d %1.0f ",k, ivalRead[j][k]); + } + lCalib->SetDetector(j, ivalRead[j][0]); + lCalib->SetSector(j, ivalRead[j][1]); + lCalib->SetfPMValue(j, ivalRead[j][2]); + lCalib->SetfPMWidth(j, ivalRead[j][3]); } fclose(file); } @@ -352,7 +405,7 @@ else if(runType=="STANDALONE_LASER"){ // ***************************************************** // [c] EMD EVENTS -> Energy calibration and equalization // ***************************************************** -else if(runType=="STANDALONE_EMD"){ +else if(runType=="STANDALONE_EMD" && strcmp(beamType,"Pb-Pb")==0){ TList* daqSources = GetFileSources(kDAQ, "EMDCALIB"); if(!daqSources){ AliError(Form("No sources for STANDALONE_EMD run %d !", fRun)); @@ -365,52 +418,52 @@ else if(runType=="STANDALONE_EMD"){ TObjString* source = 0; Int_t i=0; while((source = dynamic_cast (iter2.Next()))){ - Log(Form("\n\t Getting file #%d\n",++i)); - TString stringEMDFileName = GetFile(kDAQ, "EMDCALIB", source->GetName()); - if(stringEMDFileName.Length() <= 0){ - Log(Form("No EMDCALIB file from source %s!", source->GetName())); - return 1; - } - // --- Initializing pedestal calibration object - AliZDCCalib *eCalib = new AliZDCCalib("ZDC"); - // --- Reading file with pedestal calibration data - const char* emdFileName = stringEMDFileName.Data(); - if(emdFileName){ - FILE *file; - if((file = fopen(emdFileName,"r")) == NULL){ - printf("Cannot open file %s \n",emdFileName); - return 1; - } - Log(Form("File %s connected to process data from EM dissociation events", emdFileName)); - // - Float_t fitValEMD[6]; Float_t equalCoeff[5][4]; - Float_t calibVal[4]; - for(Int_t j=0; j<10; j++){ - if(j<6){ - fscanf(file,"%f",&fitValEMD[j]); - if(j<4){ - calibVal[j] = 2.76/fitValEMD[j]; - eCalib->SetEnCalib(j,calibVal[j]); - } - else eCalib->SetEnCalib(j,fitValEMD[j]); - } - else{ - for(Int_t k=0; k<5; k++){ - fscanf(file,"%f",&equalCoeff[j][k]); - if(j==6) eCalib->SetZN1EqualCoeff(k, equalCoeff[j][k]); - else if(j==7) eCalib->SetZP1EqualCoeff(k, equalCoeff[j][k]); - else if(j==8) eCalib->SetZN2EqualCoeff(k, equalCoeff[j][k]); - else if(j==9) eCalib->SetZP2EqualCoeff(k, equalCoeff[j][k]); - } - } - } - fclose(file); - } - else{ - Log(Form("File %s not found", emdFileName)); - return 1; - } - eCalib->Print(""); + Log(Form("\n\t Getting file #%d\n",++i)); + TString stringEMDFileName = GetFile(kDAQ, "EMDCALIB", source->GetName()); + if(stringEMDFileName.Length() <= 0){ + Log(Form("No EMDCALIB file from source %s!", source->GetName())); + return 1; + } + // --- Initializing pedestal calibration object + AliZDCCalib *eCalib = new AliZDCCalib("ZDC"); + // --- Reading file with pedestal calibration data + const char* emdFileName = stringEMDFileName.Data(); + if(emdFileName){ + FILE *file; + if((file = fopen(emdFileName,"r")) == NULL){ + printf("Cannot open file %s \n",emdFileName); + return 1; + } + Log(Form("File %s connected to process data from EM dissociation events", emdFileName)); + // + Float_t fitValEMD[6]; Float_t equalCoeff[5][4]; + Float_t calibVal[4]; + for(Int_t j=0; j<10; j++){ + if(j<6){ + fscanf(file,"%f",&fitValEMD[j]); + if(j<4){ + calibVal[j] = 2.76/fitValEMD[j]; + eCalib->SetEnCalib(j,calibVal[j]); + } + else eCalib->SetEnCalib(j,fitValEMD[j]); + } + else{ + for(Int_t k=0; k<5; k++){ + fscanf(file,"%f",&equalCoeff[j][k]); + if(j==6) eCalib->SetZN1EqualCoeff(k, equalCoeff[j][k]); + else if(j==7) eCalib->SetZP1EqualCoeff(k, equalCoeff[j][k]); + else if(j==8) eCalib->SetZN2EqualCoeff(k, equalCoeff[j][k]); + else if(j==9) eCalib->SetZP2EqualCoeff(k, equalCoeff[j][k]); + } + } + } + fclose(file); + } + else{ + Log(Form("File %s not found", emdFileName)); + return 1; + } + //eCalib->Print(""); // AliCDBMetaData metaData; metaData.SetBeamPeriod(0); @@ -420,10 +473,7 @@ else if(runType=="STANDALONE_EMD"){ resECal = Store("Calib","EMDCalib",eCalib, &metaData, 0, 1); } } -else { - Log(Form("Nothing to do: run type is %s", runType.Data())); - return 0; -} + // note that the parameters are returned as character strings! const char* nEvents = GetRunParameter("totalEvents");