- TString optionString = option;
- if (optionString.Data() == "deb") {
- Info("Digitize","Called with option deb ");
- fDebug = 3;
- }
-
- AliMUONChamber* chamber;
- AliSegmentation* c1Segmentation; //Cathode plane c1 of the chamber
- AliSegmentation* c2Segmentation; //Cathode place c2 of the chamber
-
- if (GetDebug()>2) Info("Digitize","AliMUONDigitizerv1::Digitize() starts");
- fTDList = new TObjArray;
-
- //Loaders (We assume input0 to be the output too)
- AliRunLoader * runloader; // Input loader
- AliLoader * gime;
-
- // Getting runloader
- runloader = AliRunLoader::GetRunLoader(fManager->GetInputFolderName(0));
- if (runloader == 0x0) {
- Error("Digitize","RunLoader is not in input file 0");
- return; // RunDigitizer is not working.
- }
- // Getting MUONloader
- gime = runloader->GetLoader("MUONLoader");
- if (gime->TreeH()==0x0) {
- if (GetDebug()>2) Info("Digitize","TreeH is not loaded yet. Loading...");
- gime->LoadHits("READ");
- if (GetDebug()>2) Info("Digitize","Now treeH is %#x. MUONLoader is %#x",gime->TreeH(),gime);
- }
-
- if (GetDebug()>2) Info("Digitize","Loaders ready");
-
- if (runloader->GetAliRun() == 0x0) runloader->LoadgAlice();
- gAlice = runloader->GetAliRun();
-
- // Getting Module MUON
- AliMUON *pMUON = (AliMUON *) gAlice->GetDetector("MUON");
- if (!pMUON) {
- Error("Digitize","Module MUON not found in the input file");
- return;
- }
- // Getting Muon data
- AliMUONData * muondata = pMUON->GetMUONData();
- muondata->SetLoader(gime);
- muondata->SetTreeAddress("H");
-
- // Loading Event
- Int_t currentevent = fManager->GetOutputEventNr();
-
- if (GetDebug()>2) cerr<<"AliMUONDigitizerv1::Digitize() Event Number is "<<currentevent <<endl;
- if ( (currentevent<10) ||
- (Int_t(TMath::Log10(currentevent)) == TMath::Log10(currentevent) ) )
- cout <<"ALiMUONDigitizerv1::Digitize() Event Number is "<< currentevent <<endl;
-
- // Output file for digits same as hits
- // AliRunLoader * runloaderout = AliRunLoader::GetRunLoader(fManager->GetOutputFolderName());
- //AliLoader * gimeout = runloaderout->GetLoader("MUONLoader");
- // New branch per chamber for MUON digit in the tree of digits
- if (gime->TreeD() == 0x0) {
- gime->MakeDigitsContainer();
- }
- TTree* treeD = gime->TreeD();
- muondata->MakeBranch("D");
- muondata->SetTreeAddress("D");
-
- // Array of pointer of the AliMUONHitMapA1:
- // two HitMaps per chamber, or one HitMap per cahtode plane
- fHitMap= new AliMUONHitMapA1* [2*AliMUONConstants::NCh()];
-
- //Loop over chambers for the definition AliMUONHitMap
- for (Int_t i=0; i<AliMUONConstants::NCh(); i++) {
- chamber = &(pMUON->Chamber(i));
- c1Segmentation = chamber->SegmentationModel(1); // Cathode plane 1
- fHitMap[i] = new AliMUONHitMapA1(c1Segmentation, fTDList);
- c2Segmentation = chamber->SegmentationModel(2); // Cathode plane 2
- fHitMap[i+AliMUONConstants::NCh()] = new AliMUONHitMapA1(c2Segmentation, fTDList);
- }
-
-// Loop over files to merge and to digitize
- fSignal = kTRUE;
- for (Int_t inputFile=0; inputFile<fManager->GetNinputs(); inputFile++) {
- if (GetDebug()>2) cerr<<"AliMUONDigitizerv1::Digitize() Input File is "<<inputFile<<endl;
-
-
- // Connect MUON Hit branch
- if (inputFile > 0 ) {
- fSignal = kFALSE;
- runloader = AliRunLoader::GetRunLoader(fManager->GetInputFolderName(inputFile));
- if (runloader == 0x0) {
- cerr<<"AliMUONDigitizerv1::Digitize() RunLoader for inputFile "<<inputFile<< " not found !!! "<<endl;
- }
- gime = runloader->GetLoader("MUONLoader");
- if (gime->TreeH() == 0x0) gime->LoadHits("READ");
- muondata->SetLoader(gime);
- muondata->SetTreeAddress("H");
- }
-
- // Setting the address
- TTree *treeH = gime->TreeH();
- if (treeH == 0x0) {
- Error("Digitize","Can not get TreeH from input %d",inputFile);
- Info("Digitize","Now treeH is %#x. MUONLoader is %#x",gime->TreeH(),gime);
- return;
- }
- if (GetDebug()>2) {
- cerr<<"AliMUONDigitizerv1::Exec inputFile is "<<inputFile<<" "<<endl;
- cerr<<"AliMUONDigitizerv1::Exec treeH" << treeH <<endl;
- }
-
- if (GetDebug()>2) cerr<<"AliMUONDigitizerv1::Exec Setting tree addresses"<<endl;
-
- fMask = fManager->GetMask(inputFile);
- //
- // Loop over tracks
- Int_t itrack;
- Int_t ntracks = (Int_t) treeH->GetEntries();
- for (itrack = 0; itrack < ntracks; itrack++) {
- if (GetDebug()>2) cerr<<"AliMUONDigitizerv1::Exec itrack = "<<itrack<<endl;
- muondata->ResetHits();
- treeH->GetEvent(itrack);
- //
- // Loop over hits
- Int_t ihit, ichamber;
- AliMUONHit* mHit;
- TClonesArray* hits = muondata->Hits();
- for(ihit = 0; ihit < hits->GetEntriesFast(); ihit++) {
- mHit = static_cast<AliMUONHit*>(hits->At(ihit));
- ichamber = mHit->Chamber()-1; // chamber number
- if (ichamber > AliMUONConstants::NCh()-1) {
- cerr<<"AliMUONDigitizer: ERROR: "
- <<"fNch > AliMUONConstants::NCh()-1, fNch, NCh(): "
- <<ichamber<<", "<< AliMUONConstants::NCh()<<endl;
- return;
- }
- chamber = &(pMUON->Chamber(ichamber));
- //
- //Dumping Hit content:
- if (GetDebug()>2) {
- cerr<<"AliMuonDigitizerv1::Exec ihit, ichamber, x, y, z, eloss " <<
- ihit << " " <<
- mHit->Chamber() << " " <<
- mHit->X() << " " <<
- mHit->Y() << " " <<
- mHit->Z() << " " <<
- mHit->Eloss() << " " << endl;
- }
- //
- // Inititializing Correlation
- chamber->ChargeCorrelationInit();
- if (ichamber < AliMUONConstants::NTrackingCh()) {
- // Tracking Chamber
- // Initialize hit position (cursor) in the segmentation model
- chamber->SigGenInit(mHit->X(), mHit->Y(), mHit->Z());
- } else {
- // Trigger Chamber
- }
- MakeTransientDigit(itrack, ihit, mHit);
- } // hit loop
- } // track loop
- } // end file loop
- if (GetDebug()>2) cerr<<"AliMUONDigitizer::Exec End of hits, track and file loops"<<endl;
-
- runloader = AliRunLoader::GetRunLoader(fManager->GetOutputFolderName());
- gime = runloader->GetLoader("MUONLoader");
- muondata->SetLoader(gime);
-
- // Loop on cathodes
- Int_t icat;
- for(icat=0; icat<2; icat++) {
- //
- // Filling Digit List
- Int_t tracks[kMAXTRACKS];
- Int_t charges[kMAXTRACKS];
- Int_t nentries = fTDList->GetEntriesFast();
- Int_t digits[6];
- for (Int_t nent = 0; nent < nentries; nent++) {
- AliMUONTransientDigit *address = (AliMUONTransientDigit*)fTDList->At(nent);
- if (address == 0) continue;
- Int_t ich = address->Chamber();
- Int_t q = address->Signal();
- chamber = &(pMUON->Chamber(ich));
- //
- // Digit Response (noise, threshold, saturation, ...)
- AliMUONResponse * response = chamber->ResponseModel();
- q = response->DigitResponse(q,address);
-
- if (!q) continue;
-
- digits[0] = address->PadX();
- digits[1] = address->PadY();
- digits[2] = address->Cathode()-1;
- digits[3] = q;
- digits[4] = address->Physics();
- digits[5] = address->Hit();
-
- Int_t nptracks = address->GetNTracks();
-
- if (nptracks > kMAXTRACKS) {
- if (GetDebug() >0) {
- cerr<<"AliMUONDigitizer:Exec nptracks > 10 "<<nptracks;
- cerr<<"reset to max value "<<kMAXTRACKS<<endl;
- }
- nptracks = kMAXTRACKS;
- }
- if (nptracks > 2 && GetDebug() >2) {
- cerr<<"AliMUONDigitizer::Exec nptracks > 2 "<<nptracks<<endl;
- // printf("cat,ich,ix,iy,q %d %d %d %d %d \n",icat,ich,digits[0],digits[1],q);
- }
- for (Int_t tr = 0; tr < nptracks; tr++) {
- tracks[tr] = address->GetTrack(tr);
- charges[tr] = address->GetCharge(tr);
- } //end loop over list of tracks for one pad
- // Sort list of tracks according to charge
- if (nptracks > 1) {
- SortTracks(tracks,charges,nptracks);
- }
- if (nptracks < kMAXTRACKS ) {
- for (Int_t i = nptracks; i < kMAXTRACKS; i++) {
- tracks[i] = -1;
- charges[i] = 0;
- }
- }
-
- // Add digits
- if (GetDebug()>3) cerr<<"AliMUONDigitzerv1::Exex TransientDigit to Digit"<<endl;
- if ( digits[2] == icat ) muondata->AddDigit(ich,tracks,charges,digits);
-// printf("test rm ich %d padX %d padY %d \n",ich, digits[0], digits[1]);
- }
- // Filling list of digits per chamber for a given cathode.
- muondata->Fill("D");
- muondata->ResetDigits();
- } // end loop cathode
- fTDList->Delete();
-
- for(Int_t ii = 0; ii < 2*AliMUONConstants::NCh(); ++ii) {
- if (fHitMap[ii]) {
- delete fHitMap[ii];
- fHitMap[ii] = 0;
- }
- }
-
- if (GetDebug()>2)
- cerr<<"AliMUONDigitizer::Exec: writing the TreeD: "
- <<treeD->GetName()<<endl;
-
- runloader = AliRunLoader::GetRunLoader(fManager->GetOutputFolderName());
- gime = runloader->GetLoader("MUONLoader");
- gime->WriteDigits("OVERWRITE");
- delete [] fHitMap;
- delete fTDList;
- muondata->ResetHits();
- gime->UnloadHits();
- gime->UnloadDigits();
-}