ROOT logo

//**************************************************************************
//* This file is property of and copyright by the ALICE HLT Project        * 
//* ALICE Experiment at CERN, All rights reserved.                         *
//*                                                                        *
//* Primary Authors Kenneth Aamodt <kenneth.aamodt@cern.ch>                *
//*                  for The ALICE HLT Project.                            *
//*                                                                        *
//* 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.                  *
//**************************************************************************

/** 
 * @file   activePadsTest.C
 * @author Kenneth.Aamodt@cern.ch
 * @date   
 * @brief  Test macro of the active pad selection
 *
 * The macro reads the simulated TPC digits from the RunLoader and
 * prints the digit info to stout.
 *
 * The macro reads ddl data and apply zerosuppression on it. The zerosuppression
 * component then ships out a list of pads in addition to the zerosuppressed data.
 * This list of pads is here used in combination with the original raw data to
 * remove all pads with no data surviving the zerosuppression with the altro 
 * selection component. This is to study undershoot of signals etc. The output of
 * altro selection component is the NON zerosuppressed data of all the pads which
 * there should be a signal in. To test this the macro runs in several steps. 
 * Point 3 and 4 has to be done in this way to avoid confusion in what ddl data is 
 * read by the component. 
 * 1. read the data.
 * 2. dump it to file. (will be compared to the zerosuppressed data later)
 * 3. apply zerosuppression producing activepads list
 * 4. apply zerosuppression producing zerosuppressed data.
 * 5. dump the data from 4. to file
 * 6. send the active pad list together with the original data to the altro selection component
 * 7. dump the reduced data to file
 * 8. again apply zero suppression to this reduced data
 * 9. dump the result from zero suppression from 8.(on the reduced data)
 * 10. compare the outputs from 2 and 7 at see that they are different (if not; this is not a good test) (diff dump1/ev.... dump2/ev...)
 * 11. compare the outputs from 5. and 9. to see that they are alike. (diff dump3/ev... dump4/ev..)
 *
 * NB: 10. and 11. must by now be done manually.... will change soon 
 * aliroot -b -q activePadsTest.C
 *
 */

void activePadsTest(const char* input="./"){
  
  if (!input) {
    cerr << "please specify input or run without arguments" << endl;
    return;
  }
  
  
  /////////////////////////////////////////////////////////////////////////////////////////////////
  // 
  // init the HLT system in order to define the analysis chain below
  //
  AliHLTSystem* gHLT=AliHLTPluginBase::GetInstance();

//   AliCDBManager* pManager=AliCDBManager::Instance(NULL, 0);
//   pManager->SetRun(0);

  ///////////////////////////////////////////////////////////////////////////////////////////////////
  //
  // define the analysis chain to be run
  //
    
  int iMinSlice=8; 
  int iMaxSlice=8;
  int iMinPart=2;
  int iMaxPart=2;
  TString digitDumpInput_OriginalData;
  TString digitDumpInput_AfterAPSelection;
  TString digitDumpInput_ZeroSuppressedOriginalData;
  TString digitDumpInput_ZerosuppressedAPSelectionData;
  TString dumpHwAddressInput;

  for (int slice=iMinSlice; slice<=iMaxSlice; slice++) {
    for (int part=iMinPart; part<=iMaxPart; part++) {
      TString arg, publisher, inputAltroSelection, zsactivepadlist, zsoriginaldata, altroChannelSelector, zsACSdata, zsACSdataOutput;
      // digit publisher components
      int ddlno=768;
      if (part>1) ddlno+=72+4*slice+(part-2);
      else ddlno+=2*slice+part;
      arg.Form("-minid %d -datatype 'DDL_RAW ' 'TPC '  -dataspec 0x%02x%02x%02x%02x -verbose", ddlno, slice, slice, part, part);

      publisher.Form("DP_%02d_%d", slice, part);
      AliHLTConfiguration pubconf(publisher.Data(), "AliRawReaderPublisher", NULL , arg.Data());
      if(digitDumpInput_OriginalData.Length() >0) digitDumpInput_OriginalData += " ";
      digitDumpInput_OriginalData += publisher;
      if(inputAltroSelection.Length() >0) inputAltroSelection += " ";
      inputAltroSelection += publisher;

      // zero suppression component (3.)
      zsactivepadlist.Form("ZSAP_%02d_%d", slice, part);
      AliHLTConfiguration cfconf(zsactivepadlist.Data(), "TPCZeroSuppression", publisher.Data(), "signal-threshold 2 start-timebin 70 end-timebin 900 -skip-sending-data -send-hw-list");
      if (inputAltroSelection.Length()>0) inputAltroSelection+=" ";
      inputAltroSelection+=zsactivepadlist;
      if (dumpHwAddressInput.Length()>0) dumpHwAddressInput+=" ";
      dumpHwAddressInput+=zsactivepadlist;
    
      // zero suppression component (4.)
      zsoriginaldata.Form("ZSDDL_%02d_%d", slice, part);
      AliHLTConfiguration cfconf(zsoriginaldata.Data(), "TPCZeroSuppression", publisher.Data(), "signal-threshold 2 start-timebin 70 end-timebin 900");
      if(digitDumpInput_ZeroSuppressedOriginalData.Length() >0) digitDumpInput_ZeroSuppressedOriginalData += " ";
      digitDumpInput_ZeroSuppressedOriginalData += zsoriginaldata;

      //altro channel selector
      altroChannelSelector.Form("ACS_%02d_%d", slice, part);
      AliHLTConfiguration cfconf(altroChannelSelector.Data(), "AltroChannelSelector", inputAltroSelection.Data(), "");
      if(zsACSdata.Length() >0) zsACSdata += " ";
      zsACSdata+= altroChannelSelector;
      if(digitDumpInput_AfterAPSelection.Length() >0) digitDumpInput_AfterAPSelection += " ";
      digitDumpInput_AfterAPSelection += altroChannelSelector;

      // zero suppression component (8.)
      zsACSdataOutput.Form("ZSACS_%02d_%d", slice, part);
      AliHLTConfiguration cfconf(zsACSdataOutput.Data(), "TPCZeroSuppression", zsACSdata.Data(), "signal-threshold 2 start-timebin 70 end-timebin 900");
      if(digitDumpInput_ZerosuppressedAPSelectionData.Length() >0) digitDumpInput_ZerosuppressedAPSelectionData += " ";
      digitDumpInput_ZerosuppressedAPSelectionData += zsACSdataOutput;
      
    }
  }
  //Dumping data (2.)
  AliHLTConfiguration dump1("Dump1", "TPCDigitDump", digitDumpInput_OriginalData.Data() , "-digitreader decoder -directory dump1 -unsorted -concatenate-blocks");
  //Dumping data (7.)
  AliHLTConfiguration dump2("Dump2", "TPCDigitDump", digitDumpInput_AfterAPSelection.Data() , "-digitreader decoder -directory dump2 -unsorted -concatenate-blocks");
  //Dumping data (5.)
  AliHLTConfiguration dump3("Dump3", "TPCDigitDump", digitDumpInput_ZeroSuppressedOriginalData.Data() , "-digitreader decoder -directory dump3 -unsorted -concatenate-blocks");
  //Dumping data (9.)
  AliHLTConfiguration dump4("Dump4", "TPCDigitDump", digitDumpInput_ZerosuppressedAPSelectionData.Data() , "-digitreader decoder -directory dump4 -unsorted -concatenate-blocks");
  //Dumping hw lists
  AliHLTConfiguration dump5("Dump5", "FileWriter", dumpHwAddressInput.Data() , "-directory hwlists");


  ///////////////////////////////////////////////////////////////////////////////////////////////////
  //
  // Init and run the reconstruction
  // All but HLT reconstruction is switched off
  //
  AliReconstruction rec;
  rec.SetInput(input);
  rec.SetRunVertexFinder(kFALSE);
  rec.SetRunLocalReconstruction("HLT");
  rec.SetRunTracking("");
  rec.SetLoadAlignFromCDB(0);
  rec.SetRunQA(":");
  //rec.SetFillESD("HLT");
  rec.SetFillESD("");
  rec.SetFillTriggerESD(false);
  rec.SetOption("HLT", "libAliHLTUtil.so libAliHLTRCU.so libAliHLTTPC.so loglevel=0x7c chains=Dump1,Dump2,Dump3,Dump4,Dump5");
  rec.Run();
}
 activePadsTest.C:1
 activePadsTest.C:2
 activePadsTest.C:3
 activePadsTest.C:4
 activePadsTest.C:5
 activePadsTest.C:6
 activePadsTest.C:7
 activePadsTest.C:8
 activePadsTest.C:9
 activePadsTest.C:10
 activePadsTest.C:11
 activePadsTest.C:12
 activePadsTest.C:13
 activePadsTest.C:14
 activePadsTest.C:15
 activePadsTest.C:16
 activePadsTest.C:17
 activePadsTest.C:18
 activePadsTest.C:19
 activePadsTest.C:20
 activePadsTest.C:21
 activePadsTest.C:22
 activePadsTest.C:23
 activePadsTest.C:24
 activePadsTest.C:25
 activePadsTest.C:26
 activePadsTest.C:27
 activePadsTest.C:28
 activePadsTest.C:29
 activePadsTest.C:30
 activePadsTest.C:31
 activePadsTest.C:32
 activePadsTest.C:33
 activePadsTest.C:34
 activePadsTest.C:35
 activePadsTest.C:36
 activePadsTest.C:37
 activePadsTest.C:38
 activePadsTest.C:39
 activePadsTest.C:40
 activePadsTest.C:41
 activePadsTest.C:42
 activePadsTest.C:43
 activePadsTest.C:44
 activePadsTest.C:45
 activePadsTest.C:46
 activePadsTest.C:47
 activePadsTest.C:48
 activePadsTest.C:49
 activePadsTest.C:50
 activePadsTest.C:51
 activePadsTest.C:52
 activePadsTest.C:53
 activePadsTest.C:54
 activePadsTest.C:55
 activePadsTest.C:56
 activePadsTest.C:57
 activePadsTest.C:58
 activePadsTest.C:59
 activePadsTest.C:60
 activePadsTest.C:61
 activePadsTest.C:62
 activePadsTest.C:63
 activePadsTest.C:64
 activePadsTest.C:65
 activePadsTest.C:66
 activePadsTest.C:67
 activePadsTest.C:68
 activePadsTest.C:69
 activePadsTest.C:70
 activePadsTest.C:71
 activePadsTest.C:72
 activePadsTest.C:73
 activePadsTest.C:74
 activePadsTest.C:75
 activePadsTest.C:76
 activePadsTest.C:77
 activePadsTest.C:78
 activePadsTest.C:79
 activePadsTest.C:80
 activePadsTest.C:81
 activePadsTest.C:82
 activePadsTest.C:83
 activePadsTest.C:84
 activePadsTest.C:85
 activePadsTest.C:86
 activePadsTest.C:87
 activePadsTest.C:88
 activePadsTest.C:89
 activePadsTest.C:90
 activePadsTest.C:91
 activePadsTest.C:92
 activePadsTest.C:93
 activePadsTest.C:94
 activePadsTest.C:95
 activePadsTest.C:96
 activePadsTest.C:97
 activePadsTest.C:98
 activePadsTest.C:99
 activePadsTest.C:100
 activePadsTest.C:101
 activePadsTest.C:102
 activePadsTest.C:103
 activePadsTest.C:104
 activePadsTest.C:105
 activePadsTest.C:106
 activePadsTest.C:107
 activePadsTest.C:108
 activePadsTest.C:109
 activePadsTest.C:110
 activePadsTest.C:111
 activePadsTest.C:112
 activePadsTest.C:113
 activePadsTest.C:114
 activePadsTest.C:115
 activePadsTest.C:116
 activePadsTest.C:117
 activePadsTest.C:118
 activePadsTest.C:119
 activePadsTest.C:120
 activePadsTest.C:121
 activePadsTest.C:122
 activePadsTest.C:123
 activePadsTest.C:124
 activePadsTest.C:125
 activePadsTest.C:126
 activePadsTest.C:127
 activePadsTest.C:128
 activePadsTest.C:129
 activePadsTest.C:130
 activePadsTest.C:131
 activePadsTest.C:132
 activePadsTest.C:133
 activePadsTest.C:134
 activePadsTest.C:135
 activePadsTest.C:136
 activePadsTest.C:137
 activePadsTest.C:138
 activePadsTest.C:139
 activePadsTest.C:140
 activePadsTest.C:141
 activePadsTest.C:142
 activePadsTest.C:143
 activePadsTest.C:144
 activePadsTest.C:145
 activePadsTest.C:146
 activePadsTest.C:147
 activePadsTest.C:148
 activePadsTest.C:149
 activePadsTest.C:150
 activePadsTest.C:151
 activePadsTest.C:152
 activePadsTest.C:153
 activePadsTest.C:154
 activePadsTest.C:155
 activePadsTest.C:156
 activePadsTest.C:157
 activePadsTest.C:158
 activePadsTest.C:159
 activePadsTest.C:160
 activePadsTest.C:161