/**
 * @file   hdstrealdata.cc
 * @author Simon Lang
 * @date   Fri May  5 16:15:16 2006
 * 
 * @brief  This Class provides Functions for a DST Production from real Data
 *         of Sep05 Beamtime
 * 
 * $Id: hdstrealdatasep05.cc,v 1.9 2007-06-25 19:03:44 slang Exp $
 *
 */

// Root headers
#include "TString.h"
#include "TSystem.h"

// Hydra headers
#include "hades.h"
#include "hdstrealdatasep05.h"
#include "hdstutilities.h"
#include "hkicktaskset.h"
#include "hkicktrackbaseF.h"
#include "hmdcbitflipcor.h"
#include "hmdcsetup.h"
#include "hmdctaskset.h"
#include "hmdclookuptb.h"
#include "hmdc34clfinder.h"
#include "hpairfiller.h"
#include "hpairfilter.h"
#include "hpidalgstandcuts.h"
#include "hpidparticlefiller.h"
#include "hpidpdfmaker.h"
#include "hpidreconstructor.h"
#include "hpidskiptrigger.h"
#include "hpidtrackfiller.h"
#include "hpidevtinfofiller.h"
#include "hqamaker.h"
#include "hrichIPUtaskset.h"
#include "hrichtaskset.h"
#include "hrktrackBF.h"
#include "hshowertaskset.h"
#include "hsplinetaskset.h"
#include "hstarttaskset.h"
#include "htaskset.h"
#include "htofinotaskset.h"
#include "htoftaskset.h"
#include "htriggertaskset.h"

using namespace std;

//_HADES_CLASS_DESCRIPTION 
////////////////////////////////////////////////////////////////////////////////
//
//  Functions for a DST Production from real Data.
//
////////////////////////////////////////////////////////////////////////////////
ClassImp(HDstRealDataSep05)


void HDstRealDataSep05::setupTaskListGen0()
{
   HTriggerTaskSet* trigger_task_set  = new HTriggerTaskSet();
   HStartTaskSet*   start_task_set    = new HStartTaskSet();
   HTofTaskSet*     tof_task_set      = new HTofTaskSet();
   HTofinoTaskSet*  tofino_task_set   = new HTofinoTaskSet();
   HRichTaskSet*    rich_task_set     = new HRichTaskSet();
   HRichIPUTaskSet* rich_ipu_task_set = new HRichIPUTaskSet();
   HShowerTaskSet*  shower_task_set   = new HShowerTaskSet();
   HSplineTaskSet*  spline_task_set   = new HSplineTaskSet( "", "" );
   HKickTaskSet*    kick_task_set     = new HKickTaskSet();

   HTaskSet* mdc_bit_flip_correction_task =
      new HTaskSet( "mdc bitflipcor", "mdc bitflipcor" );
   mdc_bit_flip_correction_task->connect(
      new HMdcBitFlipCor( "mdcbitflipcor", "mdcbitflipcor" ) );  

   // override database settings of wome MDC parameter for test purposes
   Int_t mdc_level[4]    = { 15, 50, 10, 30 };
   Int_t mdc_layer[6][4] = { { 4, 5, 6, 6 }, 
			     { 4, 5, 6, 6 }, 
			     { 4, 5, 6, 6 },
			     { 4, 5, 6, 6 }, 
			     { 4, 5, 6, 6 }, 
			     { 4, 5, 6, 6 } };
   HMdcTaskSet* mdc_task_set = new HMdcTaskSet();
   HMdcSetup*   mdc_setup    = mdc_task_set->getMdcSetup();
   mdc_setup->getMdcTrackFinderSet()->setNLayers( &mdc_layer[0][0] );
   mdc_setup->getMdc12FitSet()->setMdc12FitSet( 1, 1, 0, kTRUE, kFALSE );
   mdc_setup->getMdcTrackFinderSet()->setNLevel( mdc_level );

   HTaskSet* kick_track_task_set =
      new HTaskSet( "kicktracktask", "kicktracktask" );
   kick_track_task_set->connect(
      new HKickTrackBaseF( "kicktrackbase", "kicktrackbase" ) );

   // High resolution Runge Kutta tracking:
   //     Initial momentum is taken from:
   //     0 - self guess (use this, if neither kick plane nor spline tracking
   //         available
   //     1 - from kick plane tracking
   //     2 - from spline tracking (default)
   HTaskSet* runge_kutta_task_set = new HTaskSet( "rkTrack", "rkTrack" );
   runge_kutta_task_set->connect( new HRKTrackBF( "RK-tracking" ) );
 
   HQAMaker* qa_report_task = new HQAMaker( "qa.maker", "qa.maker" );
   qa_report_task->setOutputDir( const_cast<char*>(dstCfg.qaOutputDir.Data()));
   qa_report_task->setSamplingRate( 1 );
   qa_report_task->setIntervalSize( dstCfg.qaEventInterval );

   HPidPdfMaker* pdf_maker_task = NULL;
   if (dstCfg.createControlNTuple)
   {
      TString ntuple_filename = 
	 dstCfg.qaOutputDir.IsNull()  ?  dstCfg.outputDir : dstCfg.qaOutputDir;

      ntuple_filename += gSystem->BaseName(
	 const_cast<char*>(dstCfg.inputUrl.Data()) );
      ntuple_filename.ReplaceAll( ".hld", 4, "_ntuple.root", 12 );

      pdf_maker_task = new HPidPdfMaker( ntuple_filename.Data(), kFALSE );
   }

   ////// now link together the task lists

   HTaskSet* tasks = gHades->getTaskSet( "real" );

   tasks->add( start_task_set->make( "", "controlhists" ) );
   tasks->add( trigger_task_set->make( "real" ) );
   tasks->add( tof_task_set->make( "real", "clust" ) );
   tasks->add( tofino_task_set->make() );
   tasks->add( rich_task_set->make( "real", "" ) );
   tasks->add( rich_ipu_task_set->make( "real" ) );
   tasks->add( shower_task_set->make() );
   tasks->add( mdc_bit_flip_correction_task );
   tasks->add( mdc_task_set->make( "", "real, fit, magneton, "
				   "CombinedClusters, timecuts, startandcal"));
   tasks->add( spline_task_set->make( "", "spline" ) );
   tasks->add( kick_task_set->make("", "reslowb&old, tofclust") );
   tasks->add( kick_track_task_set );
   tasks->add( runge_kutta_task_set );
   tasks->add( new HPidTrackFiller( "SKIPNOLEPTON,NOCHI2SEG1" ) );
   tasks->add( qa_report_task );
   if (pdf_maker_task)
   {
      tasks->add( pdf_maker_task );
   }
   
   // each of the tasks should track its execution time
   tasks->isTimed( kTRUE );
}



void HDstRealDataSep05::setupTaskListPostGen0()
{
   Short_t             nParticles[2]       = { 2, 3 };
   HTaskSet*           tasks               = gHades->getTaskSet( "real" );
   HTaskSet*           pair_analysis_tasks = NULL;
   HPidReconstructor*  pid_rec             = NULL;
   HPidParticleFiller* part_filler         = NULL;
   HPairFiller*        pair_filler         = NULL;
   HPairFilter*        pair_filter         = NULL;
   TString             pid_ntuple;
   TString             pair_ntuple;

   // derive output and NTuple file name from input file name
   pid_ntuple = gSystem->BaseName( dstCfg.inputUrl.Data() );
   pid_ntuple.ReplaceAll( ".root", 5, "_lep_nt.root", 12 );
   pid_ntuple.Prepend( "/" );
   pid_ntuple.Prepend( dstCfg.outputDir );

   pair_ntuple = gSystem->BaseName( dstCfg.inputUrl.Data() );
   pair_ntuple.ReplaceAll( ".root", 5, "_pair_nt.root", 13 );
   pair_ntuple.Prepend( "/" );
   pair_ntuple.Prepend( dstCfg.outputDir );

   if (dstCfg.dstId.Contains( "LVL2", TString::kIgnoreCase ))
   {
      HPidSkipTrigger *pSkipLVL1 = new HPidSkipTrigger(
	 "skip trigger", "skip trigger" );
      tasks->add( pSkipLVL1 );
   }

   if (dstCfg.dstId.Contains( "KICK", TString::kIgnoreCase ))
   {
      pid_rec     = new HPidReconstructor( "pdf,CL,merge,ALG_KICK" );
      part_filler = new HPidParticleFiller( "KICK" );
   }

   if (dstCfg.dstId.Contains( "SPLINE", TString::kIgnoreCase ))
   {
      pid_rec     = new HPidReconstructor ( "pdf,CL,merge,ALG_SPLINE" );
      part_filler = new HPidParticleFiller( "SPLINE" );
   }

   if (dstCfg.dstId.Contains( "RUNGEKUTTA", TString::kIgnoreCase ) ||
       dstCfg.dstId.Contains( "RK",         TString::kIgnoreCase ))
   {
      pid_rec     = new HPidReconstructor ( "pdf,CL,merge,ALG_RUNGEKUTTA" );
      part_filler = new HPidParticleFiller( "RUNGEKUTTA" );
   }

   if (dstCfg.dstId.Contains( "STANDARDCUTS",  TString::kIgnoreCase ) ||
       dstCfg.dstId.Contains( "STANDARD CUTS", TString::kIgnoreCase ) ||
       dstCfg.dstId.Contains( "STANDCUTS",     TString::kIgnoreCase ))
   {
      if (pid_rec)
      {
	 pid_rec->addAlgorithm(new HPidAlgStandCuts( pid_ntuple ));
      }
      if (part_filler)
      {
	 part_filler->setAlgorithm( 7 ); // only standard cuts
      }
   }

   pid_rec->setParticleIds( nParticles, sizeof(nParticles) / sizeof(Short_t) );
   part_filler->print();

   if (dstCfg.dstId.Contains( "PAIR", TString::kIgnoreCase ))
   {
      pair_analysis_tasks = new HTaskSet( "Pair Analysis", "Pair Analysis" );
      pair_filler         = new HPairFiller( "HPairFiller", "HPairFiller" );
      pair_filter         = new HPairFilter( "HPairFilter", "HPairFilter" );

      pair_filter->setQAFileName( (Char_t *)pair_ntuple.Data() );
      pair_analysis_tasks->add( pair_filler );
      pair_analysis_tasks->add( pair_filter );
   }

   if (pid_rec && part_filler)
   {
      tasks->add( pid_rec     );
      tasks->add( part_filler );
   }

   if (pair_filler)
   {
      tasks->add( pair_analysis_tasks );
   }

   tasks->isTimed( kTRUE );
   tasks->print();
}



void HDstRealDataSep05::setupTaskListGen1()
{
   HTriggerTaskSet* trigger_task_set  = new HTriggerTaskSet();
   HStartTaskSet*   start_task_set    = new HStartTaskSet();
   HTofTaskSet*     tof_task_set      = new HTofTaskSet();
   HTofinoTaskSet*  tofino_task_set   = new HTofinoTaskSet();
   HRichTaskSet*    rich_task_set     = new HRichTaskSet();
   HRichIPUTaskSet* rich_ipu_task_set = new HRichIPUTaskSet();
   HShowerTaskSet*  shower_task_set   = new HShowerTaskSet();
   HSplineTaskSet*  spline_task_set   = new HSplineTaskSet( "", "" );
   HKickTaskSet*    kick_task_set     = new HKickTaskSet();
   HMdcTaskSet*     mdc_task_set      = new HMdcTaskSet();

   HTaskSet* mdc_bit_flip_correction_task =
      new HTaskSet( "mdc bitflipcor", "mdc bitflipcor" );
   mdc_bit_flip_correction_task->connect(
      new HMdcBitFlipCor( "mdcbitflipcor", "mdcbitflipcor" ) );  

   // override database settings of wome MDC parameter for test purposes
   // Int_t mdc_level[4] = { 15, 50, 10, 70 };
   Int_t mdc_layer[6][4] = { { 5, 5, 5, 5 },
			     { 5, 5, 5, 5 },
			     { 5, 5, 5, 6 },
			     { 5, 5, 5, 5 },
			     { 5, 5, 5, 5 },
			     { 5, 5, 5, 6 } };
  // HMdcTaskSet* mdc_task_set = new HMdcTaskSet();
   HMdcSetup* mdc_setup = mdc_task_set->getMdcSetup();
   mdc_setup->getMdcTrackFinderSet()->setNLayers( &mdc_layer[0][0] );
   mdc_setup->getMdc12FitSet()->setMdc12FitSet( 2, 1, 0, kFALSE, kFALSE );

   HTaskSet* kick_track_task_set =
      new HTaskSet( "kicktracktask", "kicktracktask" );
   kick_track_task_set->connect(
      new HKickTrackBaseF( "kicktrackbase", "kicktrackbase" ) );

   HTaskSet* runge_kutta_task_set = new HTaskSet( "rkTrack", "rkTrack" );
   runge_kutta_task_set->connect( new HRKTrackBF( "RK-tracking" ) );
 
   HQAMaker* qa_report_task = new HQAMaker( "qa.maker", "qa.maker" );
   qa_report_task->setOutputDir( const_cast<char*>(dstCfg.qaOutputDir.Data()));
   qa_report_task->setSamplingRate( 1 );
   qa_report_task->setIntervalSize( dstCfg.qaEventInterval );

   HPidPdfMaker* pdf_maker_task = NULL;
   //if (dstCfg.createControlNTuple)
   if(0)
   {
      TString ntuple_filename = 
	 dstCfg.qaOutputDir.IsNull()  ?  dstCfg.outputDir : dstCfg.qaOutputDir;

      ntuple_filename += gSystem->BaseName(
	 const_cast<char*>(dstCfg.inputUrl.Data()) );
      ntuple_filename.ReplaceAll( ".hld", 4, "_ntuple.root", 12 );

      pdf_maker_task = new HPidPdfMaker( ntuple_filename.Data(), kFALSE );
   }

   ////// now link together the task lists

   HTaskSet* tasks = gHades->getTaskSet( "real" );

   tasks->add( start_task_set->make( "", "" ) );
   tasks->add( trigger_task_set->make( "real" ) );
   tasks->add( tof_task_set->make( "real", "clust" ) );
   tasks->add( tofino_task_set->make() );
   tasks->add( rich_task_set->make( "real", "" ) );
   tasks->add( rich_ipu_task_set->make( "real" ) );
   tasks->add( shower_task_set->make("","leprecognition,lowshowerefficiency"));
   tasks->add( mdc_bit_flip_correction_task );
   //tasks->add( mdc_task_set->make( "rtdb" ) );
   tasks->add( mdc_task_set->make( "", "real, fit, magneton, "
				  "CombinedClusters, timecuts, startandcal"));
   //tasks->add( mdc_task_set->make( "", "real, fit, magneton, "
   //     			  "MixedClusters, timecuts, startandcal"));
   tasks->add( spline_task_set->make( "", "spline" ) );
   tasks->add( kick_task_set->make("", "reslowb&old, tofclust") );
   tasks->add( kick_track_task_set );
   tasks->add( runge_kutta_task_set );
   tasks->add( new HPidTrackFiller( "NOCHI2SEG1,NOCHI2SEG2" ) );
   tasks->add( qa_report_task );
   if (pdf_maker_task)
   {
      tasks->add( pdf_maker_task );
   }
   
   // each of the tasks should track its execution time
   tasks->isTimed( kTRUE );
}



void HDstRealDataSep05::setupTaskListGen2()
{
   // Task list for DST production 'gen2' - based on Hydra 8.13

   HTriggerTaskSet* trigger_task_set  = new HTriggerTaskSet();
   HStartTaskSet*   start_task_set    = new HStartTaskSet();
   HTofTaskSet*     tof_task_set      = new HTofTaskSet();
   HTofinoTaskSet*  tofino_task_set   = new HTofinoTaskSet();
   HRichTaskSet*    rich_task_set     = new HRichTaskSet();
   HRichIPUTaskSet* rich_ipu_task_set = new HRichIPUTaskSet();
   HMdcTaskSet*     mdc_task_set      = new HMdcTaskSet();
   HShowerTaskSet*  shower_task_set   = new HShowerTaskSet();
   HSplineTaskSet*  spline_task_set   = new HSplineTaskSet( "", "" );

   HTaskSet* mdc_bit_flip_correction_task =
      new HTaskSet( "mdc bitflipcor", "mdc bitflipcor" );
   mdc_bit_flip_correction_task->connect(
      new HMdcBitFlipCor( "mdcbitflipcor", "mdcbitflipcor" ) );  

   // use new MDC cluster finder with level adaption
   HMdcLookUpTb::setUseFloatLevel();        // inner MDCs
   HMdc34ClFinder::setUseFloatLevel();      // outer MDCs

   // this includes the following tasks:
   // Kick Tracking, Kick Track Clustering,
   // Spline Tracking, Spline Clustering,
   // Runge-Kutta Tracking, MetaMatch Procedure
   HTask* tracking_tasks = spline_task_set->make(
      "", "spline,reslowb,&old,tofclust,runge" );
 
   HQAMaker* qa_report_task = new HQAMaker( "qa.maker", "qa.maker" );
   qa_report_task->setOutputDir( const_cast<char*>(dstCfg.qaOutputDir.Data()));
   qa_report_task->setSamplingRate( 1 );
   qa_report_task->setIntervalSize( dstCfg.qaEventInterval );

   HPidPdfMaker* pdf_maker_task = NULL;
   if (dstCfg.createControlNTuple)
      pdf_maker_task = new HPidPdfMaker(
	 HDstUtilities::GetFileStem( dstCfg.outputDir, dstCfg.inputUrl )
	 + "_ntuple.root", kFALSE );


   ////// now link together the task lists

   HTaskSet* tasks = gHades->getTaskSet( "real" );

   tasks->add( start_task_set->make( "", "controlhists" ) );
   tasks->add( trigger_task_set->make( "real" ) );
   tasks->add( tof_task_set->make( "real", "clust" ) );
   tasks->add( tofino_task_set->make() );
   tasks->add( rich_task_set->make("real", "") );
   tasks->add( rich_ipu_task_set->make( "real" ) );
   tasks->add( shower_task_set->make("","leprecognition,lowshowerefficiency"));
   tasks->add( mdc_bit_flip_correction_task );
   tasks->add( mdc_task_set->make( "rtdb" ) );
   tasks->add( tracking_tasks );
   tasks->add( new HPidTrackFiller( "NOCHI2SEG1" ) );
   tasks->add( new HPidEvtInfoFiller ); 
   tasks->add( qa_report_task );
   if (pdf_maker_task)
      tasks->add( pdf_maker_task );

   // each of the tasks should track its execution time
   tasks->isTimed( kTRUE );
}

Last change: Sat May 22 12:54:57 2010
Last generated: 2010-05-22 12:54

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.