X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSsimulationSDD.cxx;h=6214c498502e81348065599bd40595e16f929663;hb=21b312002d48f0af6f47b2ace15b0d2eec941018;hp=ac010de6edc6f46ef723a1a529cd09a3159c16c4;hpb=417ff3f46a5d9853c6ea89609165fd4c77ea7fd8;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSsimulationSDD.cxx b/ITS/AliITSsimulationSDD.cxx index ac010de6edc..6214c498502 100644 --- a/ITS/AliITSsimulationSDD.cxx +++ b/ITS/AliITSsimulationSDD.cxx @@ -28,17 +28,19 @@ #include #include "AliITS.h" #include "AliITSMapA2.h" -#include "AliITSRawData.h" #include "AliITSdigitSPD.h" #include "AliITSetfSDD.h" #include "AliITSmodule.h" #include "AliITShit.h" #include "AliITSpList.h" #include "AliITSCalibrationSDD.h" +#include "AliITSresponseSDD.h" #include "AliITSsimulationSDD.h" #include "AliLog.h" #include "AliRun.h" +using std::endl; +using std::cout; ClassImp(AliITSsimulationSDD) //////////////////////////////////////////////////////////////////////// // Version: 0 // @@ -73,49 +75,7 @@ fScaleSize(0){ SetCrosstalkFlag(); SetDoFFT(); } -//______________________________________________________________________ -AliITSsimulationSDD::AliITSsimulationSDD(const AliITSsimulationSDD &source) : - AliITSsimulation(source), -fITS(source.fITS), -fHitMap2(source.fHitMap2), -fHitSigMap2(source.fHitSigMap2), -fHitNoiMap2(source.fHitNoiMap2), -fElectronics(source.fElectronics), -fInZR(source.fInZR), -fInZI(source.fInZI), -fOutZR(source.fOutZR), -fOutZI(source.fOutZI), -fAnodeFire(source.fAnodeFire), -fHis(source.fHis), -fFlag(source.fFlag), -fCrosstalkFlag(source.fCrosstalkFlag), -fDoFFT(source.fDoFFT), -fNofMaps(source.fNofMaps), -fMaxNofSamples(source.fMaxNofSamples), -fScaleSize(source.fScaleSize){ - // Copy constructor to satify Coding roules only. - -} -//______________________________________________________________________ -AliITSsimulationSDD& AliITSsimulationSDD::operator=(const AliITSsimulationSDD &src){ - // Assignment operator to satify Coding roules only. - - if(this==&src) return *this; - Error("AliITSsimulationSDD","Not allowed to make a = with " - "AliITSsimulationSDD Using default creater instead"); - return *this ; -} -/* -//______________________________________________________________________ -AliITSsimulation& AliITSsimulationSDD::operator=(const AliITSsimulation &src){ - // Assignment operator to satify Coding roules only. - if(this==&src) return *this; - Error("AliITSsimulationSSD","Not allowed to make a = with " - "AliITSsimulationSDD Using default creater instead"); - return *this ; -} -*/ //______________________________________________________________________ AliITSsimulationSDD::AliITSsimulationSDD(AliITSDetTypeSim* dettyp): AliITSsimulation(dettyp), @@ -398,7 +358,13 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) { Double_t nsigma = simpar->GetNSigmaIntegration(); // Int_t nlookups = simpar->GetGausNLookUp(); // Float_t jitter = simpar->GetSDDJitterError(); // - Float_t trigDelay = simpar->GetSDDTrigDelay(); + Float_t mapsmear = simpar->GetSDDCorrMapPrecision(); // + Float_t trigDelay = simpar->GetSDDTrigDelay(); // compensation for MC time zero + if(res->IsAMAt20MHz()) trigDelay+=12.5; // compensation for discretization step + + Float_t timeZero=fDetType->GetResponseSDD()->GetTimeZero(fModule); + Float_t adcscale = fDetType->GetResponseSDD()->GetADCtokeV(fModule); + adcscale/=simpar->GetSDDkeVtoADC(); // Piergiorgio's part (apart for few variables which I made float // when i thought that can be done @@ -447,12 +413,11 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) { if(!mod->LineSegmentL(ii,xL[0],dxL[0],xL[1],dxL[1],xL[2],dxL[2], depEnergy,itrack)) continue; Float_t xloc=xL[0]; - if(xloc>0) iWing=0; // left side, carlos channel 0 - else iWing=1; // right side - Float_t zloc=xL[2]+0.5*dxL[2]; zAnode=seg->GetAnodeFromLocal(xloc,zloc); // anode number in the range 0.-511. driftSpeed = res->GetDriftSpeedAtAnode(zAnode); + driftSpeed+= fDetType->GetResponseSDD()->GetDeltaVDrift(fModule,zAnode>255); + if(timeStep*fMaxNofSamples < sddLength/driftSpeed) { AliWarning("Time Interval > Allowed Time Interval"); } @@ -468,17 +433,25 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) { tof=0.; AliITShit* h=(AliITShit*)hits->At(ii); - if(h) tof=h->GetTOF()*1E9; - AliDebug(1,Form("TOF for hit %d on mod %d (particle %d)=%g",ii,fModule,h->Track(),tof)); - + if(h){ + tof=h->GetTOF()*1E9; + AliDebug(1,Form("TOF for hit %d on mod %d (particle %d)=%g",ii,fModule,h->Track(),tof)); + } + + Float_t corrx=0, corrz=0; + res->GetShiftsForSimulation(xL[2],xL[0],corrz,corrx,seg); + xL[2]-=corrz; + xL[0]-=corrx; + xL[0] += 0.0001*gRandom->Gaus( 0, mapsmear); // xL[0] += 0.0001*gRandom->Gaus( 0, jitter ); // + pathInSDD = TMath::Sqrt(dxL[0]*dxL[0]+dxL[1]*dxL[1]+dxL[2]*dxL[2]); if (fFlag && pathInSDD) { depEnergy *= (0.03/pathInSDD); } drPath = TMath::Abs(10000.*(dxL[0]+2.*xL[0])*0.5); drPath = sddLength-drPath; if(drPath < 0) { - AliDebug(1, // this should be fixed at geometry level + AliInfo( // this should be fixed at geometry level Form("negative drift path drPath=%e sddLength=%e dxL[0]=%e xL[0]=%e", drPath,sddLength,dxL[0],xL[0])); continue; @@ -502,7 +475,11 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) { theSteps+=1.; theAverage+=avAnode; zAnode = seg->GetAnodeFromLocal(avDrft,avAnode); + // if(avDrft*xloc<0) AliDebug(1,Form("Swap of side xloc_orig=%f xloc_now=%f",xloc,avDrft)); + iWing = seg->GetSideFromLocalX(avDrft); + driftSpeed = res->GetDriftSpeedAtAnode(zAnode); + driftSpeed+= fDetType->GetResponseSDD()->GetDeltaVDrift(fModule,zAnode>255); driftPath = TMath::Abs(10000.*avDrft); driftPath = sddLength-driftPath; if(driftPath < 0) { @@ -517,7 +494,8 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) { sigT = sigA/driftSpeed; drTime+=tof; // take into account Time Of Flight from production point - drTime+=trigDelay; + drTime-=trigDelay; + drTime+=timeZero; timeSample = (Int_t) (fScaleSize*drTime/timeStep + 1.001); // time bin in range 1-256 !!! if(zAnode>nofAnodes) zAnode-=nofAnodes; // to have the anode number between 0. and 256. iAnode = (Int_t) (1.001+zAnode); // iAnode in range 1-256 !!!! @@ -527,6 +505,7 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) { (timeStep*eVpairs*2.*acos(-1.)); chargeloss = 1.-cHloss*driftPath/1000.; amplitude *= chargeloss; + amplitude *= adcscale; width = 2.*nsigma/(nlookups-1); // Spread the charge nsplitAn = 4; @@ -729,10 +708,6 @@ void AliITSsimulationSDD::ApplyCrosstalk(Int_t mod) { // create and inizialice crosstalk map Float_t* ctk = new Float_t[fNofMaps*fMaxNofSamples+1]; - if( ctk == NULL ) { - Error( "ApplyCrosstalk", "no memory for temporal map: exit " ); - return; - } memset( ctk, 0, sizeof(Float_t)*(fNofMaps*fMaxNofSamples+1) ); AliITSCalibrationSDD* calibr = (AliITSCalibrationSDD*)GetCalibrationModel(mod); for( Int_t z=0; z 2 && i < fMaxNofSamples-2 ) dev[i] = -0.2*fHitMap2->GetSignal( z,i-2 ) @@ -900,18 +870,16 @@ void AliITSsimulationSDD::StoreAllDigits(){ } //______________________________________________________________________ void AliITSsimulationSDD::CreateHistograms(Int_t scale){ - // Creates histograms of maps for debugging - Int_t i; - - fHis=new TObjArray(fNofMaps); - for (i=0;iAddAt(new TH1F(sddName.Data(),"SDD maps",scale*fMaxNofSamples, - 0.,(Float_t) scale*fMaxNofSamples), i); - } // end for i + // Creates histograms of maps for debugging + Int_t i; + + fHis=new TObjArray(fNofMaps); + for (i=0;iAddAt(new TH1F(sddName.Data(),"SDD maps",scale*fMaxNofSamples, + 0.,(Float_t) scale*fMaxNofSamples), i); + } // end for i } //______________________________________________________________________ void AliITSsimulationSDD::FillHistograms(){ @@ -1007,3 +975,4 @@ void AliITSsimulationSDD::PrintStatus() const { cout << "Scale size factor: " << fScaleSize << endl; cout << "**************************************************" << endl; } +