/************************************************************************** * Copyright(c) 1998-2000, ALICE Experiment at CERN, All rights reserved. * * * * Author: The ALICE Off-line Project. * * Contributors are mentioned in the code where appropriate. * * * * Permission to use, copy, modify and distribute this software and its * * documentation strictly for non-commercial purposes is hereby granted * * without fee, provided that the above copyright notice appears in all * * copies and that both the copyright notice and this permission notice * * appear in the supporting documentation. The authors make no claims * * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ #include #include #include #include #include #include #include "AliFMDDigitizer.h" #include "AliFMD.h" #include "AliFMDhit.h" #include "AliFMDdigit.h" #include "AliRunDigitizer.h" #include "AliRun.h" #include "AliPDG.h" #include "AliLoader.h" #include "AliRunLoader.h" #include #include #include ClassImp(AliFMDDigitizer) //___________________________________________ AliFMDDigitizer::AliFMDDigitizer() :AliDigitizer() { // Default ctor - don't use it ; } //___________________________________________ AliFMDDigitizer::AliFMDDigitizer(AliRunDigitizer* manager) :AliDigitizer(manager) { cout<<"AliFMDDigitizer::AliFMDDigitizer"<2) // cerr<<"AliFMDDigitizer::AliFMDDigitizer" // <<"(AliRunDigitizer* manager) was processed"<> "<GetOutputFolderName()); outgime = outRL->GetLoader("FMDLoader"); cout<<"AliFMDDigitizer::Exec >> "<SDigits2Digits start...\n"; #endif Int_t volume, sector, ring, charge; Float_t e; Float_t de[10][50][520]; Int_t hit; Int_t digit[5]; Int_t ivol, iSector, iRing; for (Int_t i=0; i<10; i++) for(Int_t j=0; j<50; j++) for(Int_t ij=0; ij<520; ij++) de[i][j][ij]=0; Int_t NumberOfRings[5]= {512,256,512,256,512}; Int_t NumberOfSectors[5]= {20,40,20,40,20}; AliFMDhit *fmdHit=0; TTree *TH=0; TBranch *brHits=0; TBranch *brD=0; inRL = AliRunLoader::GetRunLoader(fManager->GetInputFolderName(0)); if (inRL == 0x0) { Error("Exec","Can not find Run Loader for input stream 0"); return; } Info("Exec","inRL->GetAliRun() %#x",inRL->GetAliRun()); inRL->LoadgAlice(); AliFMD * fFMD = (AliFMD *) inRL->GetAliRun()->GetDetector("FMD"); Info("Exec","inRL->GetAliRun(): %#x, FMD: %#x, InRL %#x.",inRL->GetAliRun(),fFMD,inRL); if (fFMD == 0x0) { Error("Exec","Can not get FMD from gAlice"); return; } // Loop over files to digitize Int_t nFiles=GetManager()->GetNinputs(); for (Int_t inputFile=0; inputFileGetOutputEventNr()<GetInputFolderName(inputFile)); ingime = inRL->GetLoader("FMDLoader"); ingime->LoadHits("READ");//probably it is necessary to load them before TH = ingime->TreeH(); if (TH == 0x0) { ingime->LoadHits("read"); TH = ingime->TreeH(); } brHits = TH->GetBranch("FMD"); if (brHits) { // brHits->SetAddress(&fHits); fFMD->SetHitsAddressBranch(brHits); }else{ Fatal("Exec","EXEC Branch FMD hit not found"); } TClonesArray *FMDhits = fFMD->Hits (); Int_t ntracks = (Int_t) TH->GetEntries(); cout<<"Number of tracks TreeH"<GetEntry(track); Int_t nhits = FMDhits->GetEntries (); // if(nhits>0) cout<<"nhits "<UncheckedAt(hit); volume = fmdHit->Volume (); sector = fmdHit->NumberOfSector (); ring = fmdHit->NumberOfRing (); e = fmdHit->Edep (); de[volume][sector][ring] += e; // if (fManager->GetOutputEventNr()>1) // cout<<" "<Gaus(500,250)); // digit[3]=PutNoise(charge); digit[3]=charge + pedestal; 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; fFMD->AddDigit(digit); } //ivol } //iSector } //iRing TTree* treeD = outgime->TreeD(); cout<<" treeD "<MakeTree("D"); treeD = outgime->TreeD(); cout<<" After MakeTree "<Clear(); treeD->Reset(); fFMD->MakeBranchInTreeD(treeD); brD = treeD->GetBranch("FMD"); cout<<" Make branch "<Fill(); //this operator does not work for events >1 treeD->Print(); outgime->WriteDigits("OVERWRITE"); gAlice->ResetDigits(); } }