ROOT logo
/* $Id$ */
MakeRaw()
{
  // Create DDL files manually by firing each crystal.
  // The DDL files are stored into directory raw0
  // Yuri Kharlov. 15 February 2006
  
  const Int_t kAdcThreshold = 1; // Lower ADC threshold to write to raw data

  Int_t prevDDL = -1;

  // Create a shaper pulse object
  AliPHOSPulseGenerator pulse;

  Int_t *adcValuesLow = new Int_t[pulse.GetRawFormatTimeBins()];
  Int_t *adcValuesHigh= new Int_t[pulse.GetRawFormatTimeBins()];

  const Int_t maxDDL = 20;
  AliAltroBuffer  *buffer[maxDDL];
  AliAltroMapping *mapping[maxDDL];

  // loop over digits
  Float_t energy = 2.;
  Float_t time   = 15.6e-09;
  Int_t module   = 1;
  for (Int_t iX=0; iX<64; iX++) {
    for (Int_t iZ=0; iZ<56; iZ++) {
      
      Int_t iRCU = -111;
      if     ( 0<=iX&&iX<32 &&  0<=iZ&&iZ<28) iRCU=0;
      else if( 0<=iX&&iX<32 && 28<=iZ&&iZ<56) iRCU=1;
      else if(32<=iX&&iX<64 &&  0<=iZ&&iZ<28) iRCU=2;
      else if(32<=iX&&iX<64 && 28<=iZ&&iZ<56) iRCU=3;
      Int_t iDDL = 4 * (module - 1) + iRCU;
      
      // new DDL
      if (iDDL != prevDDL) {
	if (buffer[iDDL] == 0) {
	  // open new file and write dummy header
	  TString fileName = AliDAQ::DdlFileName("PHOS",iDDL);
	  
	  TString path = gSystem->Getenv("ALICE_ROOT");
	  path += "/PHOS/mapping/RCU";
	  path += iRCU;
	  path += ".data";
	  
	  // 	printf("DDL %d, mapping %s\n",iDDL,path.Data());
	  mapping[iDDL] = new AliCaloAltroMapping(path.Data());
	  buffer[iDDL]  = new AliAltroBuffer(fileName.Data(),mapping[iDDL]);
	  buffer[iDDL]->WriteDataHeader(kTRUE, kFALSE);  //Dummy;
	}
	prevDDL = iDDL;
      }
      
      // if a signal is out of time range, write only trailer
      if (time > pulse.GetRawFormatTimeMax()*0.5 ) {
	AliInfo("Signal is out of time range.\n");
	buffer[iDDL]->FillBuffer(0);
	buffer[iDDL]->FillBuffer(pulse.GetRawFormatTimeBins() );  // time bin
	buffer[iDDL]->FillBuffer(3);                               // bunch length
	buffer[iDDL]->WriteTrailer(3, iZ, iX, 0);  // trailer
      }
      pulse.SetAmplitude(energy);
      pulse.SetTZero(time);
      pulse.MakeSamples();
      pulse.GetSamples(adcValuesHigh, adcValuesLow) ; 
      //       printf("digit E=%.4f GeV, t=%g s, (mod,iZ,iX)=(%d,%d,%d)\n",
      //  	     energy,time,module-1,iZ,iX);
      buffer[iDDL]->WriteChannel(iZ, iX, 0, 
				 pulse.GetRawFormatTimeBins(), 
				 adcValuesLow , kAdcThreshold);
      buffer[iDDL]->WriteChannel(iZ, iX, 1, 
				 pulse.GetRawFormatTimeBins(), 
				 adcValuesHigh, kAdcThreshold);
    }
  }
  // write real header and close last file
  for (Int_t iDDL=0; iDDL<maxDDL; iDDL++) {
    if (buffer[iDDL]) {
      buffer[iDDL]->Flush();
      buffer[iDDL]->WriteDataHeader(kFALSE, kFALSE);
      delete buffer[iDDL];
      if (mapping[iDDL]) delete mapping[iDDL];
    }
  }

  // move DDL files to directory raw0
  gSystem->Exec("mkdir -p raw0; mv *.ddl raw0");
}
//-----------------------------------------------------------------------------
PlotRawDDL()
{
  // Macro to read raw data from the DDL files 
  // and fill histogram with fired channels.
  // Yuri Kharlov. 19 October 2006

  AliRawReaderFile* rf = new AliRawReaderFile(".");
  AliCaloRawStream in(rf,"PHOS");
  in.SetOldRCUFormat(kFALSE); // Set to kTRUE for beam test 2006 only
  Int_t iBin = 0;
  Int_t iEvent=0;

  TFile *file = new TFile("PlotRawDDL.root","recreate");
  TH2F *hXY = new TH2F("hXY","X,Y of raw data",64,0.,64.,56,0.,56.);
  TH2F *hXYmodule[5];
  for (Int_t iMod=0; iMod<5; iMod++) {
    TString name="hXY";
    TString title="X,Y of raw data in module ";
    hXYmodule[iMod] = new TH2F(name+iMod,title+iMod,64,0.,64.,56,0.,56.);
  }

  // Loop over events
  while (rf->NextEvent()) {
    Int_t runNum = rf->GetRunNumber();
    cout << "Run "<<runNum<<", event "<<iEvent<<" of type " 
	 << rf->GetType() << endl;

    // Loop over channels within this event
    
    while ( in.Next() ) { 
      if (in.IsNewHWAddress()) {
	  hXY->Fill((Double_t)in.GetRow(),(Double_t)in.GetColumn());
	  hXYmodule[in.GetModule()]->Fill((Double_t)in.GetRow(),(Double_t)in.GetColumn());
      }
    }
    iEvent++;
  }
  file->Write();
  file->Close();
}
 AliPHOSMakeRaw.C:1
 AliPHOSMakeRaw.C:2
 AliPHOSMakeRaw.C:3
 AliPHOSMakeRaw.C:4
 AliPHOSMakeRaw.C:5
 AliPHOSMakeRaw.C:6
 AliPHOSMakeRaw.C:7
 AliPHOSMakeRaw.C:8
 AliPHOSMakeRaw.C:9
 AliPHOSMakeRaw.C:10
 AliPHOSMakeRaw.C:11
 AliPHOSMakeRaw.C:12
 AliPHOSMakeRaw.C:13
 AliPHOSMakeRaw.C:14
 AliPHOSMakeRaw.C:15
 AliPHOSMakeRaw.C:16
 AliPHOSMakeRaw.C:17
 AliPHOSMakeRaw.C:18
 AliPHOSMakeRaw.C:19
 AliPHOSMakeRaw.C:20
 AliPHOSMakeRaw.C:21
 AliPHOSMakeRaw.C:22
 AliPHOSMakeRaw.C:23
 AliPHOSMakeRaw.C:24
 AliPHOSMakeRaw.C:25
 AliPHOSMakeRaw.C:26
 AliPHOSMakeRaw.C:27
 AliPHOSMakeRaw.C:28
 AliPHOSMakeRaw.C:29
 AliPHOSMakeRaw.C:30
 AliPHOSMakeRaw.C:31
 AliPHOSMakeRaw.C:32
 AliPHOSMakeRaw.C:33
 AliPHOSMakeRaw.C:34
 AliPHOSMakeRaw.C:35
 AliPHOSMakeRaw.C:36
 AliPHOSMakeRaw.C:37
 AliPHOSMakeRaw.C:38
 AliPHOSMakeRaw.C:39
 AliPHOSMakeRaw.C:40
 AliPHOSMakeRaw.C:41
 AliPHOSMakeRaw.C:42
 AliPHOSMakeRaw.C:43
 AliPHOSMakeRaw.C:44
 AliPHOSMakeRaw.C:45
 AliPHOSMakeRaw.C:46
 AliPHOSMakeRaw.C:47
 AliPHOSMakeRaw.C:48
 AliPHOSMakeRaw.C:49
 AliPHOSMakeRaw.C:50
 AliPHOSMakeRaw.C:51
 AliPHOSMakeRaw.C:52
 AliPHOSMakeRaw.C:53
 AliPHOSMakeRaw.C:54
 AliPHOSMakeRaw.C:55
 AliPHOSMakeRaw.C:56
 AliPHOSMakeRaw.C:57
 AliPHOSMakeRaw.C:58
 AliPHOSMakeRaw.C:59
 AliPHOSMakeRaw.C:60
 AliPHOSMakeRaw.C:61
 AliPHOSMakeRaw.C:62
 AliPHOSMakeRaw.C:63
 AliPHOSMakeRaw.C:64
 AliPHOSMakeRaw.C:65
 AliPHOSMakeRaw.C:66
 AliPHOSMakeRaw.C:67
 AliPHOSMakeRaw.C:68
 AliPHOSMakeRaw.C:69
 AliPHOSMakeRaw.C:70
 AliPHOSMakeRaw.C:71
 AliPHOSMakeRaw.C:72
 AliPHOSMakeRaw.C:73
 AliPHOSMakeRaw.C:74
 AliPHOSMakeRaw.C:75
 AliPHOSMakeRaw.C:76
 AliPHOSMakeRaw.C:77
 AliPHOSMakeRaw.C:78
 AliPHOSMakeRaw.C:79
 AliPHOSMakeRaw.C:80
 AliPHOSMakeRaw.C:81
 AliPHOSMakeRaw.C:82
 AliPHOSMakeRaw.C:83
 AliPHOSMakeRaw.C:84
 AliPHOSMakeRaw.C:85
 AliPHOSMakeRaw.C:86
 AliPHOSMakeRaw.C:87
 AliPHOSMakeRaw.C:88
 AliPHOSMakeRaw.C:89
 AliPHOSMakeRaw.C:90
 AliPHOSMakeRaw.C:91
 AliPHOSMakeRaw.C:92
 AliPHOSMakeRaw.C:93
 AliPHOSMakeRaw.C:94
 AliPHOSMakeRaw.C:95
 AliPHOSMakeRaw.C:96
 AliPHOSMakeRaw.C:97
 AliPHOSMakeRaw.C:98
 AliPHOSMakeRaw.C:99
 AliPHOSMakeRaw.C:100
 AliPHOSMakeRaw.C:101
 AliPHOSMakeRaw.C:102
 AliPHOSMakeRaw.C:103
 AliPHOSMakeRaw.C:104
 AliPHOSMakeRaw.C:105
 AliPHOSMakeRaw.C:106
 AliPHOSMakeRaw.C:107
 AliPHOSMakeRaw.C:108
 AliPHOSMakeRaw.C:109
 AliPHOSMakeRaw.C:110
 AliPHOSMakeRaw.C:111
 AliPHOSMakeRaw.C:112
 AliPHOSMakeRaw.C:113
 AliPHOSMakeRaw.C:114
 AliPHOSMakeRaw.C:115
 AliPHOSMakeRaw.C:116
 AliPHOSMakeRaw.C:117
 AliPHOSMakeRaw.C:118
 AliPHOSMakeRaw.C:119
 AliPHOSMakeRaw.C:120
 AliPHOSMakeRaw.C:121
 AliPHOSMakeRaw.C:122
 AliPHOSMakeRaw.C:123
 AliPHOSMakeRaw.C:124
 AliPHOSMakeRaw.C:125
 AliPHOSMakeRaw.C:126
 AliPHOSMakeRaw.C:127
 AliPHOSMakeRaw.C:128
 AliPHOSMakeRaw.C:129
 AliPHOSMakeRaw.C:130
 AliPHOSMakeRaw.C:131