From 4110645fa2ca22dd46e2c479b3b49a9ec9d9212e Mon Sep 17 00:00:00 2001 From: alla Date: Tue, 7 May 2002 10:07:05 +0000 Subject: [PATCH] Hits -> Digits directly --- FMD/AliFMD.cxx | 66 ++++++++++++++++--------- FMD/AliFMD.h | 29 +++++------ FMD/AliFMDDigitizer.cxx | 107 +++++++++++++++++++++------------------- FMD/AliFMDDigitizer.h | 20 +++++--- FMD/FMDLinkDef.h | 2 +- FMD/Makefile | 2 +- FMD/libFMD.pkg | 2 +- 7 files changed, 130 insertions(+), 98 deletions(-) diff --git a/FMD/AliFMD.cxx b/FMD/AliFMD.cxx index b43bd812ecf..5c0a7240559 100644 --- a/FMD/AliFMD.cxx +++ b/FMD/AliFMD.cxx @@ -97,7 +97,7 @@ AliDetector (name, title) fIdSens3 = 0; fIdSens4 = 0; fIdSens5 = 0; - fMerger = 0; + // fMerger = 0; SetMarkerColor (kRed); } @@ -174,34 +174,34 @@ void AliFMD::BuildGeometry () // FMD define the different volumes new TRotMatrix ("rot901", "rot901", 90, 0, 90, 90, 180, 0); - new TTUBE ("S_FMD0", "FMD volume 0", "void", 3.5, 16.8, 1.5); + new TTUBE ("S_FMD0", "FMD volume 0", "void", 4.2, 17.2, 1.5); top->cd (); node = new TNode ("FMD0", "FMD0", "S_FMD0", 0, 0, 62.8, ""); node->SetLineColor (kColorFMD); fNodes->Add (node); - new TTUBE ("S_FMD1", "FMD volume 1", "void", 22., 34.9, 1.5); + new TTUBE ("S_FMD1", "FMD volume 1", "void", 15.4, 28.4, 1.5); top->cd (); - node = new TNode ("FMD1", "FMD1", "S_FMD1", 0, 0, 75.1, ""); + node = new TNode ("FMD1", "FMD1", "S_FMD1", 0, 0, 75.2, ""); node->SetLineColor (kColorFMD); fNodes->Add (node); - new TTUBE ("S_FMD2", "FMD volume 2", "void", 3.5, 16.8, 1.5); + new TTUBE ("S_FMD2", "FMD volume 2", "void", 4.2, 17.2, 1.5); top->cd (); - node = new TNode ("FMD2", "FMD2", "S_FMD2", 0, 0, -62.8, ""); + node = new TNode ("FMD2", "FMD2", "S_FMD2", 0, 0, -83.2, ""); node->SetLineColor (kColorFMD); fNodes->Add (node); - new TTUBE ("S_FMD3", "FMD volume 3", "void", 22., 34.9, 1.5); + new TTUBE ("S_FMD3", "FMD volume 3", "void", 15.4, 28.4, 1.5); top->cd (); - node = new TNode ("FMD3", "FMD3", "S_FMD3", 0, 0, -75.1, ""); + node = new TNode ("FMD3", "FMD3", "S_FMD3", 0, 0, -75.2, ""); node->SetLineColor (kColorFMD); fNodes->Add (node); - new TTUBE ("S_FMD4", "FMD volume 4", "void", 3.5, 16.8, 1.5); + new TTUBE ("S_FMD4", "FMD volume 4", "void", 4.2, 17.2, 1.5); top->cd (); // node = new TNode("FMD4","FMD4","S_FMD4",0,0,-270,""); - node = new TNode ("FMD4", "FMD4", "S_FMD4", 0, 0, -345, ""); + node = new TNode ("FMD4", "FMD4", "S_FMD4", 0, 0, -340, ""); node->SetLineColor (kColorFMD); fNodes->Add (node); } @@ -287,6 +287,7 @@ void AliFMD::MakeBranch (Option_t * option, const char *file) MakeBranchInTree(gAlice->TreeD(), branchname,&fDigits, kBufferSize, file); + cout<<" tree "<TreeD()<<" "<TreeR(), @@ -336,44 +337,47 @@ void AliFMD::SetTreeAddress () //--------------------------------------------------------------------- -void AliFMD::SetRingsSi1(Int_t ringsSi1) +void AliFMD::SetRingsSi1(Int_t ringsSi1=256) { // fRingsSi1=ringsSi1; fRingsSi1=256; } -void AliFMD::SetSectorsSi1(Int_t sectorsSi1) +void AliFMD::SetSectorsSi1(Int_t sectorsSi1=20) { fSectorsSi1=20; } -void AliFMD::SetRingsSi2(Int_t ringsSi2) +void AliFMD::SetRingsSi2(Int_t ringsSi2=128) { fRingsSi2=128; } -void AliFMD::SetSectorsSi2(Int_t sectorsSi2) +void AliFMD::SetSectorsSi2(Int_t sectorsSi2=40) { fSectorsSi2=40; } //--------------------------------------------------------------------- - +/* void AliFMD::SDigits2Digits() { cout<<"AliFMD::SDigits2Digits"<SetRingsSi1(fRingsSi1); fMerger->SetRingsSi2(fRingsSi2); fMerger ->SetSectorsSi1(fSectorsSi1); fMerger ->SetSectorsSi2(fSectorsSi2); + fMerger->Init(); cout<<"AliFMD::SDigits2Digits Init"<Digitise(); cout<<"AliFMD::SDigits2Digits Digitise() "< start...\n"; //#endif - char * fileSDigits = 0 ; + char * fileSDigits = "FMD.SDigits.root"; char * fileHeader = 0; AliFMDSDigitizer * sd = new AliFMDSDigitizer(fileHeader,fileSDigits) ; sd->SetRingsSi1(fRingsSi1); sd->SetRingsSi2(fRingsSi2); sd->SetSectorsSi1(fSectorsSi1); sd->SetSectorsSi2(fSectorsSi2); - - + // sd->SetEventNumber(fEvNrSig); sd->Exec("") ; - sd->Print(""); - + delete sd ; } @@ -439,5 +441,23 @@ void AliFMD::Digits2Reco() reconstruction->Exec(""); delete reconstruction; } +//----------------------------------------------------------------------- + +void AliFMD::MakeBranchInTreeD(TTree *treeD, const char *file) +{ + // + // Create TreeD branches for the MUON. + // + const Int_t kBufferSize = 4000; + char branchname[20]; + + + sprintf(branchname,"%s",GetName()); + if(treeD){ + MakeBranchInTree(treeD, + branchname,&fDigits, + kBufferSize, file); + } +} diff --git a/FMD/AliFMD.h b/FMD/AliFMD.h index 58f4d5e5dda..98e487094bc 100644 --- a/FMD/AliFMD.h +++ b/FMD/AliFMD.h @@ -9,11 +9,12 @@ #include "AliDetector.h" #include "TString.h" -#include "AliFMDMerger.h" +#include "TBranch.h" +//#include "AliFMDMerger.h" #include "AliFMDSDigitizer.h" class TFile; class TTree; - class AliFMDMerger; +// class AliFMDMerger; class AliFMD : public AliDetector { public: @@ -30,29 +31,27 @@ public: virtual Int_t IsVersion() const =0; virtual void Init(); virtual void MakeBranch(Option_t *opt=" ",const char *file=0); + virtual void MakeBranchInTreeD(TTree *treeD, const char *file=0); virtual void SetTreeAddress(); virtual void ResetHits(); virtual void ResetDigits(); virtual void DrawDetector()=0; virtual void StepManager() {} - // Granularity - virtual void SetRingsSi1(Int_t ringsSi1); - virtual void SetSectorsSi1(Int_t sectorsSi1); - virtual void SetRingsSi2(Int_t ringsSi2); - virtual void SetSectorsSi2(Int_t sectorsSi2); + // Granularity + virtual void SetRingsSi1(Int_t ringsSi1=256); + virtual void SetSectorsSi1(Int_t sectorsSi1=20); + virtual void SetRingsSi2(Int_t ringsSi2=128); + virtual void SetSectorsSi2(Int_t sectorsSi2=40); + void SetEventNumber(Int_t i) {fEvNrSig = i;} void Eta2Radius(Float_t, Float_t, Float_t*); void Hits2SDigits();// void Digits2Reco(); - + virtual void SetHitsAddressBranch(TBranch *b){b->SetAddress(&fHits);} + // Digitisation TClonesArray *SDigits() const {return fSDigits;} -// virtual void SDigits2Digits(); - virtual void SDigits2Digits(); - virtual void SetMerger(AliFMDMerger* merger); - virtual AliFMDMerger* Merger(); TClonesArray *ReconParticles() const {return fReconParticles;} - Int_t fNevents ; // Number of events to digitize protected: Int_t fIdSens1; //Si sensetive volume @@ -66,8 +65,10 @@ public: Int_t fRingsSi2; // Number of rings Int_t fSectorsSi2; // Number of sectors + Int_t fNevents ; // Number of events to digitize + Int_t fEvNrSig; // signal event number - AliFMDMerger *fMerger; // ! pointer to merger + // AliFMDMerger *fMerger; // ! pointer to merger TClonesArray *fSDigits ; // List of summable digits TClonesArray *fReconParticles; diff --git a/FMD/AliFMDDigitizer.cxx b/FMD/AliFMDDigitizer.cxx index 5326776d16e..3b602ab5622 100644 --- a/FMD/AliFMDDigitizer.cxx +++ b/FMD/AliFMDDigitizer.cxx @@ -55,18 +55,12 @@ AliFMDDigitizer::AliFMDDigitizer(AliRunDigitizer* manager) // if (GetDebug()>2) // cerr<<"AliFMDDigitizer::AliFMDDigitizer" // <<"(AliRunDigitizer* manager) was processed"<Delete(); - delete fSDigits ; - fSDigits = 0; - } } //------------------------------------------------------------------------ @@ -89,89 +83,100 @@ void AliFMDDigitizer::Exec(Option_t* option) cout<<"AliFMDDigitizer::>SDigits2Digits start...\n"; #endif - AliFMD * FMD = (AliFMD *) gAlice->GetDetector("FMD") ; - cout<<" FMD "<TreeD () == 0) - gAlice->MakeTree ("D"); - fDigits = FMD->Digits(); - + // cout<<" FMD "<GetDetector("FMD") ; // Loop over files to digitize - for (Int_t inputFile=0; inputFileGetNinputs(); + Int_t nFiles=GetManager()->GetNinputs(); + for (Int_t inputFile=0; inputFileGetOutputEventNr()<Hits (); + TH = fManager->GetInputTreeH(inputFile); + brHits = TH->GetBranch("FMD"); + if (brHits) { + fFMD->SetHitsAddressBranch(brHits); + }else{ + cerr<<"EXEC Branch FMD hit not found"<GetEntries(); + + for (Int_t track = 0; track < ntracks; track++) + { + brHits->GetEntry(track); + Int_t nhits = FMDhits->GetEntries (); + + for (hit = 0; hit < nhits; hit++) + { + fmdHit = (AliFMDhit *) FMDhits->UncheckedAt (hit); + + volume = fmdHit->Volume (); + sector = fmdHit->NumberOfSector (); + ring = fmdHit->NumberOfRing (); + e = fmdHit->Edep (); + de[volume][sector][ring] += e; + + } //hit loop + } //track loop + } //if FMD - } + // Put noise and make ADC signal - for ( ivol=1; ivol<=5; ivol++){ + Float_t I = 1.664 * 0.04 * 2.33 / 22400; // = 0.69e-6; + for ( ivol=1; ivol<=5; ivol++){ for ( iSector=1; iSector<=NumberOfSectors[ivol-1]; iSector++){ for ( iRing=1; iRing<=NumberOfRings[ivol-1]; iRing++){ digit[0]=ivol; digit[1]=iSector; digit[2]=iRing; - digit[3]=PutNoise(chargeSum[ivol][iSector][iRing]); - if(chargeSum[ivol][iSector][iRing] <= 500) digit[3]=500; + charge = Int_t (de[ivol][iSector][iRing] / I); + digit[3]=PutNoise(charge); + if(digit[3]<= 500) digit[3]=500; //dynamic range from MIP(0.155MeV) to 30MIP(4.65MeV) //1024 ADC channels Float_t channelWidth=(22400*50)/1024; digit[4]=Int_t(digit[3]/channelWidth); if (digit[4]>1024) digit[4]=1024; - FMD->AddDigit(digit); - + fFMD->AddDigit(digit); } //ivol } //iSector } //iRing + TTree* treeD = fManager->GetTreeD(); + treeD->Clear(); treeD->Reset(); - FMD->MakeBranch("D"); + fFMD->MakeBranchInTreeD(treeD); treeD->Fill(); fManager->GetTreeD()->Write(0,TObject::kOverwrite); gAlice->ResetDigits(); - -} - -//--------------------------------------------------------------------- - -void AliFMDDigitizer::ReadDigit(Int_t chargeSum[][50][300], Int_t inputFile ) -{ - cout<<" AliFMDDigitizer::ReadDigit "<GetEvent(0) ; - AliFMD * FMD = (AliFMD *) gAlice->GetDetector("FMD") ; - Int_t ndig, k; - gAlice->ResetDigits(); - treeS->GetEvent(0); - - treeS->GetEvent(0); - TClonesArray * FMDSdigits = FMD->SDigits(); - - ndig=FMDSdigits->GetEntries(); - - - for (k=0; kUncheckedAt(k); - Int_t iVolume=fmddigit->Volume(); - Int_t iNumberOfSector =fmddigit->NumberOfSector(); - Int_t iNumberOfRing=fmddigit->NumberOfRing(); - chargeSum[iVolume][iNumberOfSector][iNumberOfRing]+=fmddigit->Charge(); } } - diff --git a/FMD/AliFMDDigitizer.h b/FMD/AliFMDDigitizer.h index 0e7787f61fc..a95f6ac97f6 100644 --- a/FMD/AliFMDDigitizer.h +++ b/FMD/AliFMDDigitizer.h @@ -6,7 +6,9 @@ #include "AliDigitizer.h" class AliRunDigitizer; - +//class AliFMD; +class AliFMDdigit; +class AliFMDhit; class AliFMDDigitizer : public AliDigitizer { public: @@ -14,24 +16,28 @@ class AliFMDDigitizer : public AliDigitizer { AliFMDDigitizer(AliRunDigitizer * manager); virtual ~AliFMDDigitizer(); virtual Bool_t Init(); - + // Do the main work void Exec(Option_t* option=0) ; Int_t PutNoise(Int_t charge){return (Int_t)(gRandom->Gaus(charge,500));} - TClonesArray *SDigits() const {return fSDigits;} + TClonesArray *Digits() const {return fDigits;} + TClonesArray *Hits() const {return fHits;} - void ReadDigit(Int_t a[][50][300], Int_t); enum {kBgTag = -1}; private: - TClonesArray *fDigits; // ! array with digits - TClonesArray *fSDigits ; // List of summable digits - + TClonesArray *fDigits; // ! array with digits + TClonesArray *fHits; // List of hits + AliRunDigitizer* GetManager(){return fManager;} + ClassDef(AliFMDDigitizer,0) }; #endif + + + diff --git a/FMD/FMDLinkDef.h b/FMD/FMDLinkDef.h index bd618b37abd..cd5fd35eb4d 100644 --- a/FMD/FMDLinkDef.h +++ b/FMD/FMDLinkDef.h @@ -16,6 +16,6 @@ #pragma link C++ class AliFMDReconstruction+; #pragma link C++ class AliFMDReconstParticles+; #pragma link C++ class AliFMDMerger+; -#pragma link C++ class AliFMDSDigitizer+; +#pragma link C++ class AliFMDDigitizer+; #endif diff --git a/FMD/Makefile b/FMD/Makefile index 1404e703d43..19e566a5aa1 100644 --- a/FMD/Makefile +++ b/FMD/Makefile @@ -9,7 +9,7 @@ PACKAGE = FMD # C++ sources -SRCS = AliFMD.cxx AliFMDv0.cxx AliFMDv1.cxx AliFMDhit.cxx AliFMDdigit.cxx AliFMDMerger.cxx AliFMDReconstruction.cxx AliFMDReconstParticles.cxx AliFMDSDigitizer.cxx +SRCS = AliFMD.cxx AliFMDv0.cxx AliFMDv1.cxx AliFMDhit.cxx AliFMDdigit.cxx AliFMDMerger.cxx AliFMDReconstruction.cxx AliFMDReconstParticles.cxx AliFMDDigitizer.cxx # C++ Headers diff --git a/FMD/libFMD.pkg b/FMD/libFMD.pkg index fec454852be..b8c21104abf 100644 --- a/FMD/libFMD.pkg +++ b/FMD/libFMD.pkg @@ -1,4 +1,4 @@ -SRCS= AliFMD.cxx AliFMDv0.cxx AliFMDv1.cxx AliFMDhit.cxx AliFMDdigit.cxx AliFMDMerger.cxx AliFMDReconstruction.cxx AliFMDReconstParticles.cxx AliFMDSDigitizer.cxx +SRCS= AliFMD.cxx AliFMDv0.cxx AliFMDv1.cxx AliFMDhit.cxx AliFMDdigit.cxx AliFMDMerger.cxx AliFMDReconstruction.cxx AliFMDReconstParticles.cxx AliFMDDigitizer.cxx HDRS= $(SRCS:.cxx=.h) -- 2.43.0