From d9ed1779f57640346781c7ad7aecc911a7687143 Mon Sep 17 00:00:00 2001 From: prino Date: Wed, 1 Jul 2009 08:29:22 +0000 Subject: [PATCH] SDD raw data format read from block attributes of CDH, RawStreamSDD instantiated on the basis of this attribuite, CDH for simulated raws written accordingly (F. Prino) --- ITS/AliITS.cxx | 8 +++---- ITS/AliITSClusterFinderV2SDD.cxx | 10 +++----- ITS/AliITSDDLRawData.cxx | 32 +++++++++++++++++++------- ITS/AliITSDDLRawData.h | 8 +++---- ITS/AliITSDetTypeSim.cxx | 14 ++---------- ITS/AliITSDetTypeSim.h | 4 +--- ITS/AliITSRawStreamSDD.cxx | 34 ++++++++++++++++++++++++++++ ITS/AliITSRawStreamSDD.h | 4 ++++ ITS/AliITSRawStreamSDDCompressed.cxx | 4 +++- ITS/AliITSSimuParam.cxx | 3 +++ ITS/AliITSSimuParam.h | 6 ++++- 11 files changed, 87 insertions(+), 40 deletions(-) diff --git a/ITS/AliITS.cxx b/ITS/AliITS.cxx index 2198c9924fe..234b90cdd53 100644 --- a/ITS/AliITS.cxx +++ b/ITS/AliITS.cxx @@ -1125,10 +1125,10 @@ void AliITS::Digits2Raw(){ AliITSDDLModuleMapSDD* ddlsdd=fDetTypeSim->GetDDLModuleMapSDD(); - Bool_t isHLTmodeC=fDetTypeSim->IsHLTmodeC(); + Char_t rawSDD=fDetTypeSim->GetSimuParam()->GetSDDRawDataFormat(); AliITSDDLRawData rawWriter; - if(isHLTmodeC) rawWriter.SetUseCompressedSDDFormat(kTRUE); - else rawWriter.SetUseCompressedSDDFormat(kFALSE); + + rawWriter.SetSDDRawFormat(rawSDD); //Verbose level // 0: Silent // 1: cout messages @@ -1145,7 +1145,7 @@ void AliITS::Digits2Raw(){ if(deleteFOsignalsLater) delete foSignals; //SILICON DRIFT DETECTOR - AliDebug(1,"Formatting raw data for SDD"); + AliDebug(1,Form("Formatting raw data for SDD - Format code =%d",rawSDD)); rawWriter.RawDataSDD(digits->GetBranch("ITSDigitsSDD"),ddlsdd); //SILICON STRIP DETECTOR diff --git a/ITS/AliITSClusterFinderV2SDD.cxx b/ITS/AliITSClusterFinderV2SDD.cxx index d8f971b4e3c..63618bba0a2 100644 --- a/ITS/AliITSClusterFinderV2SDD.cxx +++ b/ITS/AliITSClusterFinderV2SDD.cxx @@ -287,13 +287,9 @@ void AliITSClusterFinderV2SDD::RawdataToClusters(AliRawReader* rawReader,TClones //------------------------------------------------------------ // This function creates ITS clusters from raw data //------------------------------------------------------------ - rawReader->Reset(); - AliITSRawStream* inputSDD; - if(fDetTypeRec->IsHLTmodeC()==kTRUE){ - inputSDD=new AliITSRawStreamSDDCompressed(rawReader); - }else{ - inputSDD=new AliITSRawStreamSDD(rawReader); - } + + AliITSRawStream* inputSDD=AliITSRawStreamSDD::CreateRawStreamSDD(rawReader); + AliDebug(1,Form("%s is used",inputSDD->ClassName())); AliITSDDLModuleMapSDD *ddlmap=(AliITSDDLModuleMapSDD*)fDetTypeRec->GetDDLModuleMapSDD(); inputSDD->SetDDLModuleMap(ddlmap); diff --git a/ITS/AliITSDDLRawData.cxx b/ITS/AliITSDDLRawData.cxx index 79e11cc8b9b..5ce7908e9dd 100644 --- a/ITS/AliITSDDLRawData.cxx +++ b/ITS/AliITSDDLRawData.cxx @@ -46,7 +46,7 @@ AliITSDDLRawData::AliITSDDLRawData(): fVerbose(0), fIndex(-1), fHalfStaveModule(-1), -fUseCompressedSDDFormat(0){ +fSDDRawFormat(7){ //Default constructor } @@ -58,7 +58,7 @@ AliITSDDLRawData::AliITSDDLRawData(const AliITSDDLRawData &source) : fVerbose(source.fVerbose), fIndex(source.fIndex), fHalfStaveModule(source.fHalfStaveModule), -fUseCompressedSDDFormat(source.fUseCompressedSDDFormat){ +fSDDRawFormat(source.fSDDRawFormat){ //Copy Constructor } @@ -69,7 +69,7 @@ AliITSDDLRawData& AliITSDDLRawData::operator=(const AliITSDDLRawData &source){ this->fIndex=source.fIndex; this->fHalfStaveModule=source.fHalfStaveModule; this->fVerbose=source.fVerbose; - this->fUseCompressedSDDFormat=source.fUseCompressedSDDFormat; + this->fSDDRawFormat=source.fSDDRawFormat; return *this; } @@ -151,7 +151,16 @@ void AliITSDDLRawData::GetDigitsSDDCompressed(TClonesArray *ITSdigits, Int_t mod dataWord+=sid<<26; dataWord+=iz<<18; dataWord+=ix<<10; - dataWord+=is; + UInt_t adcEncoded=0; + Int_t shift=0; + if(is < 8) shift=2; + else if(is<16) shift=3; + else if(is<32) shift=4; + else if(is<64) shift=5; + else if(is<128) shift=6; + else shift=7; + adcEncoded=shift+((is-(1<WriteBuffer((char*)(&skippedword),sizeof(skippedword)); } @@ -663,7 +679,7 @@ Int_t AliITSDDLRawData::RawDataSDD(TBranch* branch, AliITSDDLModuleMapSDD* ddlsd //For each Module, buf contains the array of data words in Binary format //fIndex gives the number of 32 bits words in the buffer for each module // cout<<"MODULE NUMBER:"<WriteBuffer((char *)buf,((fIndex+1)*sizeof(UInt_t))); }else{ @@ -675,7 +691,7 @@ Int_t AliITSDDLRawData::RawDataSDD(TBranch* branch, AliITSDDLModuleMapSDD* ddlsd }//end if }//end for // 12 words with FIFO footers (=4 FIFO x 3 3F1F1F1F words per DDL) - if(!fUseCompressedSDDFormat){ + if(fSDDRawFormat!=0){ for(Int_t iw=0;iw<12;iw++) outfile->WriteBuffer((char*)(&fifoFooterWord),sizeof(fifoFooterWord)); } outfile->WriteBuffer((char*)(&jitterWord),sizeof(jitterWord)); diff --git a/ITS/AliITSDDLRawData.h b/ITS/AliITSDDLRawData.h index 4caf0b4549f..5edfba73f4f 100644 --- a/ITS/AliITSDDLRawData.h +++ b/ITS/AliITSDDLRawData.h @@ -29,8 +29,8 @@ class AliITSDDLRawData:public TObject{ // This method generates the files with the Silicon pixel detector data void SetVerbose(Int_t Verbose){fVerbose=Verbose;} // To set the verbose level - void SetUseCompressedSDDFormat(Bool_t opt=kFALSE){ - fUseCompressedSDDFormat=opt; + void SetSDDRawFormat(Char_t val=7){ + fSDDRawFormat=val; } private: void GetDigitsSPD(TClonesArray *ITSdigits, Int_t mod,Int_t ddl,UInt_t *buf, AliITSFOSignalsSPD* foSignals = NULL); @@ -48,9 +48,9 @@ class AliITSDDLRawData:public TObject{ Int_t fVerbose; //Verbose level (0:no msg, 1:msg, 2:digits in txt files) Int_t fIndex; //number of 32 words to be stored into the output file Int_t fHalfStaveModule; //first or second half of an Half Stave module - Bool_t fUseCompressedSDDFormat; // flag for use the compressed SDD raw data format + Char_t fSDDRawFormat; // index for SDD raw format - ClassDef(AliITSDDLRawData,2) + ClassDef(AliITSDDLRawData,3) }; #endif diff --git a/ITS/AliITSDetTypeSim.cxx b/ITS/AliITSDetTypeSim.cxx index 85949f1dc77..635b2f6d475 100644 --- a/ITS/AliITSDetTypeSim.cxx +++ b/ITS/AliITSDetTypeSim.cxx @@ -48,7 +48,6 @@ #include "AliITSCorrMapSDD.h" #include "AliITSDriftSpeedArraySDD.h" #include "AliITSDriftSpeedSDD.h" -#include "AliITSHLTforSDD.h" #include "AliITSCalibrationSSD.h" #include "AliITSNoiseSSDv2.h" #include "AliITSGainSSDv2.h" @@ -93,7 +92,6 @@ fDDLMapSDD(0), fkDigClassName(), // String with digit class name. fLoader(0), // local pointer to loader fFirstcall(kTRUE), -fIsHLTmodeC(0), // flag fFOGenerator(), fTriggerConditions(NULL) { @@ -182,7 +180,6 @@ fDDLMapSDD(source.fDDLMapSDD), fkDigClassName(), // String with digit class name. fLoader(source.fLoader), // local pointer to loader fFirstcall(source.fFirstcall), -fIsHLTmodeC(source.fIsHLTmodeC), fFOGenerator(source.fFOGenerator), fTriggerConditions(source.fTriggerConditions) { @@ -464,7 +461,6 @@ Bool_t AliITSDetTypeSim::GetCalibration() { AliCDBEntry *entrySDD = AliCDBManager::Instance()->Get("ITS/Calib/CalibSDD", run); AliCDBEntry *drSpSDD = AliCDBManager::Instance()->Get("ITS/Calib/DriftSpeedSDD",run); AliCDBEntry *ddlMapSDD = AliCDBManager::Instance()->Get("ITS/Calib/DDLMapSDD",run); - AliCDBEntry *hltforSDD = AliCDBManager::Instance()->Get("ITS/Calib/HLTforSDD"); //AliCDBEntry *mapASDD = AliCDBManager::Instance()->Get("ITS/Calib/MapsAnodeSDD",run); AliCDBEntry *mapTSDD = AliCDBManager::Instance()->Get("ITS/Calib/MapsTimeSDD",run); // AliCDBEntry *entrySSD = AliCDBManager::Instance()->Get("ITS/Calib/CalibSSD", run); @@ -474,7 +470,7 @@ Bool_t AliITSDetTypeSim::GetCalibration() { if(!deadSPD || !noisySPD || !foEffSPD || !foNoiSPD || !entrySDD || !entryNoiseSSD || !entryGainSSD || !entryBadChannelsSSD - || !drSpSDD || !ddlMapSDD || !hltforSDD || !mapTSDD){ + || !drSpSDD || !ddlMapSDD || !mapTSDD){ AliFatal("Calibration object retrieval failed! "); return kFALSE; } @@ -508,10 +504,6 @@ if(!deadSPD || !noisySPD || !foEffSPD || !foNoiSPD if(!isCacheActive)ddlMapSDD->SetObject(NULL); ddlMapSDD->SetOwner(kTRUE); - AliITSHLTforSDD* hltsdd=(AliITSHLTforSDD*)hltforSDD->GetObject(); - if(!isCacheActive)hltforSDD->SetObject(NULL); - hltforSDD->SetOwner(kTRUE); - // TObjArray *mapAn = (TObjArray *)mapASDD->GetObject(); // if(!isCacheActive)mapASDD->SetObject(NULL); // mapASDD->SetOwner(kTRUE); @@ -587,7 +579,6 @@ if(!deadSPD || !noisySPD || !foEffSPD || !foNoiSPD delete entryGainSSD; delete entryBadChannelsSSD; // delete mapASDD; - delete hltforSDD; delete mapTSDD; delete drSpSDD; delete ddlMapSDD; @@ -596,7 +587,7 @@ if(!deadSPD || !noisySPD || !foEffSPD || !foNoiSPD AliCDBManager::Instance()->SetCacheFlag(origCacheStatus); if ((!calDeadSPD) || (!calNoisySPD) || (!calFoEffSPD) || (!calFoNoiSPD) - || (!calSDD) || (!drSp) || (!ddlsdd) || (!hltsdd) + || (!calSDD) || (!drSp) || (!ddlsdd) || (!mapT) || (!noiseSSD)|| (!gainSSD)|| (!badChannelsSSD)) { AliWarning("Can not get calibration from calibration database !"); return kFALSE; @@ -620,7 +611,6 @@ if(!deadSPD || !noisySPD || !foEffSPD || !foNoiSPD fFOGenerator.SetNoise(calFoNoiSPD); // this cal object is used only by the generator fDDLMapSDD->SetDDLMap(ddlsdd); - fIsHLTmodeC=hltsdd->IsHLTmodeC(); Bool_t oldMapFormat=kFALSE; TObject* objmap=(TObject*)mapT->At(0); TString cname(objmap->ClassName()); diff --git a/ITS/AliITSDetTypeSim.h b/ITS/AliITSDetTypeSim.h index cf57a31a6f8..6f7fa795c29 100644 --- a/ITS/AliITSDetTypeSim.h +++ b/ITS/AliITSDetTypeSim.h @@ -70,7 +70,6 @@ class AliITSDetTypeSim : public TObject { } virtual AliITSSimuParam* GetSimuParam() const {return fSimuPar;} - virtual Bool_t IsHLTmodeC() const {return fIsHLTmodeC;} virtual AliITSDDLModuleMapSDD* GetDDLModuleMapSDD()const { return fDDLMapSDD;} TObjArray* GetCalibrationArray() const {return fCalibration;} TObjArray* GetSegmentation() const {return fSegmentation;} @@ -150,11 +149,10 @@ class AliITSDetTypeSim : public TObject { const Char_t* fkDigClassName[3]; //! String with digit class name. AliITSLoader* fLoader; //! loader Bool_t fFirstcall; //! flag - Bool_t fIsHLTmodeC; //! flag for HLT mode C status (used by SDD) AliITSFOGeneratorSPD fFOGenerator; //! Fast-OR generator object AliITSTriggerConditions* fTriggerConditions; //! Trigger conditions - ClassDef(AliITSDetTypeSim,10) // ITS Simulation structure + ClassDef(AliITSDetTypeSim,11) // ITS Simulation structure }; diff --git a/ITS/AliITSRawStreamSDD.cxx b/ITS/AliITSRawStreamSDD.cxx index 2682d00c2e7..379153fadd8 100644 --- a/ITS/AliITSRawStreamSDD.cxx +++ b/ITS/AliITSRawStreamSDD.cxx @@ -22,6 +22,7 @@ /////////////////////////////////////////////////////////////////////////////// #include "AliITSRawStreamSDD.h" +#include "AliITSRawStreamSDDCompressed.h" #include "AliRawReader.h" #include "AliLog.h" @@ -85,6 +86,39 @@ AliITSRawStreamSDD::~AliITSRawStreamSDD(){ if(fDDLModuleMap) delete fDDLModuleMap; } //______________________________________________________________________ +UChar_t AliITSRawStreamSDD::ReadBlockAttributes(AliRawReader* rawReader){ + // reads block attribuited from CDH + UChar_t *data; + rawReader->Reset(); + rawReader->Select("ITSSDD"); + do{ + if(!rawReader->ReadNextData(data)) return 0x0; + }while(rawReader->GetDataSize()==0); + UChar_t attr=rawReader->GetBlockAttributes(); + return attr; +} +//______________________________________________________________________ +AliITSRawStream* AliITSRawStreamSDD::CreateRawStreamSDD(AliRawReader* rawReader, UChar_t attributes){ + // instantiates the proper raw stream from block attributes value + + Int_t rawFormat=(attributes&0xE0)>>5; + rawReader->Reset(); + AliITSRawStream* inputSDD; + if(rawFormat==0){ + inputSDD=new AliITSRawStreamSDDCompressed(rawReader); + inputSDD->SetADCEncoded(kTRUE); + }else{ + inputSDD=new AliITSRawStreamSDD(rawReader); + } + return inputSDD; +} +//______________________________________________________________________ +AliITSRawStream* AliITSRawStreamSDD::CreateRawStreamSDD(AliRawReader* rawReader){ + // reads the data format from CDH and instantiates the proper raw stream + UChar_t attr=ReadBlockAttributes(rawReader); + return CreateRawStreamSDD(rawReader,attr); +} +//______________________________________________________________________ UInt_t AliITSRawStreamSDD::ReadBits() { // read bits from the given channel diff --git a/ITS/AliITSRawStreamSDD.h b/ITS/AliITSRawStreamSDD.h index 471f91bd2bf..d8e30257e90 100644 --- a/ITS/AliITSRawStreamSDD.h +++ b/ITS/AliITSRawStreamSDD.h @@ -24,6 +24,10 @@ class AliITSRawStreamSDD: public AliITSRawStream { AliITSRawStreamSDD& operator=(const AliITSRawStreamSDD& rs); virtual ~AliITSRawStreamSDD(); + static UChar_t ReadBlockAttributes(AliRawReader* rawReader); + static AliITSRawStream* CreateRawStreamSDD(AliRawReader* rawReader, UChar_t attributes); + static AliITSRawStream* CreateRawStreamSDD(AliRawReader* rawReader); + virtual Bool_t Next(); virtual Int_t GetAnode() const {return fCoord1;} diff --git a/ITS/AliITSRawStreamSDDCompressed.cxx b/ITS/AliITSRawStreamSDDCompressed.cxx index 9ddab4899c8..00953c6f0a9 100644 --- a/ITS/AliITSRawStreamSDDCompressed.cxx +++ b/ITS/AliITSRawStreamSDDCompressed.cxx @@ -164,7 +164,9 @@ Bool_t AliITSRawStreamSDDCompressed::Next() while(kTRUE){ if (!fRawReader->ReadNextInt(fData)) return kFALSE; // read next word UInt_t mostsigbits=fData>>28; - if(mostsigbits==maskeom){ + if(fData==0xFFFFFFFF){ + // CarlosRX header do nothing + } else if(mostsigbits==maskeom){ fCarlosId=fData&maskmod; fDDL=fRawReader->GetDDLID(); fModuleID = GetModuleNumber(fDDL,fCarlosId); diff --git a/ITS/AliITSSimuParam.cxx b/ITS/AliITSSimuParam.cxx index d903555f1cc..d4bb8a0d737 100644 --- a/ITS/AliITSSimuParam.cxx +++ b/ITS/AliITSSimuParam.cxx @@ -71,6 +71,7 @@ fSDDJitterError(fgkSDDJitterErrorDefault), fSDDDynamicRange(fgkSDDDynamicRangeDefault), fSDDMaxAdc(0.), fSDDChargeLoss(fgkSDDChargeLossDefault), +fSDDRawFormat(7), fSSDCouplingPR(0), fSSDCouplingPL(0), fSSDCouplingNR(0), @@ -116,6 +117,7 @@ fSDDJitterError(simpar.fSDDJitterError), fSDDDynamicRange(simpar.fSDDDynamicRange), fSDDMaxAdc(simpar.fSDDMaxAdc), fSDDChargeLoss(simpar.fSDDChargeLoss), +fSDDRawFormat(simpar.fSDDRawFormat), fSSDCouplingPR(simpar.fSSDCouplingPR), fSSDCouplingPL(simpar.fSSDCouplingPL), fSSDCouplingNR(simpar.fSSDCouplingNR), @@ -184,6 +186,7 @@ void AliITSSimuParam::PrintParameters() const{ printf("Dynamic Range = %f\n",fSDDDynamicRange); printf("Max. ADC = %f\n",fSDDMaxAdc); printf("Charge Loss = %f\n",fSDDChargeLoss); + printf("Raw Data Format = %d\n",fSDDRawFormat); printf("\n"); printf("===== SSD parameters =====\n"); printf("Coupling PR = %f\n",fSSDCouplingPR); diff --git a/ITS/AliITSSimuParam.h b/ITS/AliITSSimuParam.h index 125e9344e53..520180874fd 100644 --- a/ITS/AliITSSimuParam.h +++ b/ITS/AliITSSimuParam.h @@ -93,6 +93,9 @@ class AliITSSimuParam : public TObject { void SetSDDChargeLoss(Double_t p1) {fSDDChargeLoss=p1;} Float_t GetSDDChargeLoss() const {return fSDDChargeLoss;} + void SetSDDRawDataFormatCarlos() {fSDDRawFormat=7;} + void SetSDDRawDataFormatFixLen8bitEncoded() {fSDDRawFormat=0;} + Char_t GetSDDRawDataFormat() const {return fSDDRawFormat;} Int_t GetSSDZSThreshold() const { // ZS threshold return fSSDZSThreshold; } virtual void SetSSDZSThreshold(Int_t zsth) { fSSDZSThreshold = zsth; } @@ -222,6 +225,7 @@ class AliITSSimuParam : public TObject { Float_t fSDDDynamicRange; // SDD Dynamic Range Float_t fSDDMaxAdc; // SDD ADC saturation value Float_t fSDDChargeLoss; // Set Linear Coefficient for Charge Loss + Char_t fSDDRawFormat; // Index for SDD RawFormat Double_t fSSDCouplingPR; // SSD couplings Double_t fSSDCouplingPL; // SSD couplings @@ -237,6 +241,6 @@ class AliITSSimuParam : public TObject { Double_t fN; // the impurity concentration of the material in #/cm^3 (NOT USED!) Float_t fT; // The temperature of the Si in Degree K. - ClassDef(AliITSSimuParam,3); + ClassDef(AliITSSimuParam,4); }; #endif -- 2.43.0