Ejemplo n.º 1
0
    def Copy(self, name):

        # Initializing the JobWriter
        jobber = JobWriter(self.main, self.path, False)

        # Writing process
        logging.getLogger('MA5').info("   Creating folder '" + self.path +
                                      "'...")
        if not jobber.Open():
            logging.getLogger('MA5').error("job submission aborted.")
            return False

        # Copying SampleAnalyzer
        logging.getLogger('MA5').info(
            "   Copying required 'SampleAnalyzer' source files...")
        if not jobber.CopyLHEAnalysis():
            logging.getLogger('MA5').error("   job submission aborted.")
            return False

        # Writing an empty analysis
        if name == "":
            logging.getLogger('MA5').info(
                "Please enter a name for your analysis")
            title = raw_input("Answer: ")
            if title == "":
                title = "user"
            title = title.replace(' ', '_')
            name = title.replace('-', '_')
        logging.getLogger('MA5').info("   Writing an empty analysis...")
        os.system("cd " + self.path +
                  "/Build/SampleAnalyzer; python newAnalyzer.py " + name +
                  " 1")

        # Extracting analysis name
        file = open(self.path +
                    "/Build/SampleAnalyzer/User/Analyzer/analysisList.h")
        title = ""
        for line in file:
            if "Add" not in line:
                continue
            words = line.split('"')
            if len(words) >= 3:
                title = words[1]
                break
        file.close()

        # Writing a Makefile
        logging.getLogger('MA5').info("   Writing a 'Makefile'...")
        if not jobber.WriteMakefiles():
            logging.getLogger('MA5').error("job submission aborted.")
            return False

        # Writing Main
        if not jobber.CreateBldDir(analysisName=title, outputName="user.saf"):
            logging.getLogger('MA5').error("   job submission aborted.")
            return False

        # adding the CLs script if available

        return True
Ejemplo n.º 2
0
    def do(self, args, myinterpreter, history):

        # Checking argument number
        if len(args) != 3 and len(args) != 1:
            self.logger.error(
                "wrong number of arguments for the command 'import'.")
            self.help()
            return

        # Getting dataset name
        if len(args) == 3:
            if not args[1] == 'as':
                self.logger.error("syntax error with the command 'import'.")
                self.help()
                return

        # Getting filename
        filename = os.path.expanduser(args[0])

        # Normalize path
        filename = os.path.normpath(filename)

        # Checking if a directory
        if len(args) == 3:
            if os.path.isdir(filename):
                filename += '/*'
                filename = os.path.normpath(filename)
            self.ImportDataset(filename, args[2])

        elif len(args) == 1 and os.path.isdir(filename):
            if JobWriter.CheckJobStructureMute(
                    filename, (self.main.recasting.status == 'on')):
                self.ImportJob(filename, myinterpreter, history)
                return
            elif UFOReader.CheckStructure(filename):
                self.ImportUFO(filename)
                return
            else:
                filename += '/*'
                filename = os.path.normpath(filename)
                self.ImportDataset(filename, "defaultset")
                return
        else:
            self.ImportDataset(filename, "defaultset")
            return
Ejemplo n.º 3
0
    def submit(self,dirname,history):

        # Initializing the JobWriter
        jobber = JobWriter(self.main,dirname,self.resubmit)
        
        # Writing process
        if not self.resubmit:
            logging.info("   Creating folder '"+dirname.split('/')[-1] \
                +"'...")
        else:
            logging.info("   Checking the structure of the folder '"+\
               dirname.split('/')[-1]+"'...")
        if not jobber.Open():
            logging.error("job submission aborted.")
            return False
        
        if not self.resubmit:
            logging.info("   Copying 'SampleAnalyzer' source files...")
            if not jobber.CopyLHEAnalysis():
                logging.error("   job submission aborted.")
                return False
            if not jobber.CreateBldDir():
                logging.error("   job submission aborted.")
                return False
            if self.main.shower.enable:
                 mode=self.main.shower.type
                 if self.main.shower.type=='auto':
                     mode = commands.getstatusoutput('less ' + self.main.datasets[0].filenames[0] + ' | grep parton_shower ')
                     if mode[0]!=0:
                         logging.error('Cannot retrieve the showering information from the LHE files')
                         return False
                     mode = (mode[1].split())[0]
                 if not jobber.CreateShowerDir(mode):
                    logging.error("   job submission aborted.")
                    return False

        logging.info("   Inserting your selection into 'SampleAnalyzer'...")
        if not jobber.WriteSelectionHeader(self.main):
            logging.error("job submission aborted.")
            return False
        if not jobber.WriteSelectionSource(self.main):
            logging.error("job submission aborted.")
            return False

        logging.info("   Writing the list of datasets...")
        for item in self.main.datasets:
            jobber.WriteDatasetList(item)

        logging.info("   Writing the command line history...")
        jobber.WriteHistory(history,self.main.firstdir)
        layouter = LayoutWriter(self.main, dirname)
        layouter.WriteLayoutConfig()

        if not self.resubmit:
            logging.info("   Creating Makefiles...")
            if not jobber.WriteMakefiles():
                logging.error("job submission aborted.")
                return False

        #edit the delphes cards
        if self.main.fastsim.package in ["delphes","delfes"]:
            self.editDelphesCard(dirname)

        if self.resubmit:
            logging.info("   Cleaning 'SampleAnalyzer'...")
            if not jobber.MrproperJob():
                logging.error("job submission aborted.")
                return False

        logging.info("   Compiling 'SampleAnalyzer'...")
        if not jobber.CompileJob():
            logging.error("job submission aborted.")
            return False

        logging.info("   Linking 'SampleAnalyzer'...")
        if not jobber.LinkJob():
            logging.error("job submission aborted.")
            return False

        for item in self.main.datasets:
            logging.info("   Running 'SampleAnalyzer' over dataset '"
                         +item.name+"'...")
            logging.info("    *******************************************************")
            if not jobber.RunJob(item):
                logging.error("run over '"+item.name+"' aborted.")
            logging.info("    *******************************************************")
    
        return True   
Ejemplo n.º 4
0
    def submit(self, dirname, history):

        # Initializing the JobWriter
        jobber = JobWriter(self.main.ma5dir,\
                           dirname,self.resubmit, self.main.libZIP)

        # Writing process
        if not self.resubmit:
            logging.info("   Creating folder '" + dirname + "'...")
        else:
            logging.info("   Checking the structure of the folder '" +
                         dirname + "'...")
        if not jobber.Open():
            logging.error("job submission aborted.")
            return False

        if not self.resubmit:
            logging.info("   Copying 'SampleAnalyzer' source files...")
            if not jobber.CopyLHEAnalysis():
                logging.error("   job submission aborted.")
                return False

        logging.info("   Inserting your selection into 'SampleAnalyzer'...")
        if not jobber.WriteSelectionHeader(self.main):
            logging.error("job submission aborted.")
            return False
        if not jobber.WriteSelectionSource(self.main):
            logging.error("job submission aborted.")
            return False

        logging.info("   Writing the list of datasets...")
        for item in self.main.datasets:
            jobber.WriteDatasetList(item)

        logging.info("   Writing the command line history...")
        jobber.WriteHistory(history, self.main.firstdir)

        if not self.resubmit:
            logging.info("   Creating a 'Makefile'...")
            if not jobber.WriteMakefile():
                logging.error("job submission aborted.")
                return False

        logging.info("   Compiling 'SampleAnalyzer'...")
        if not jobber.CompileJob():
            logging.error("job submission aborted.")
            return False

        logging.info("   Linking 'SampleAnalyzer'...")
        if not jobber.LinkJob():
            logging.error("job submission aborted.")
            return False

        for item in self.main.datasets:
            logging.info("   Running 'SampleAnalyzer' over dataset '" +
                         item.name + "'...")
            logging.info(
                "    *******************************************************")
            if not jobber.RunJob(item):
                logging.error("run over '" + item.name + "' aborted.")
            logging.info(
                "    *******************************************************")

        return True
Ejemplo n.º 5
0
    def submit(self,dirname,history):
        # checking if the needed version of delphes is activated
        forced_bkp = self.main.forced
        self.main.forced=True
        if self.main.fastsim.package == 'delphes' and not self.main.archi_info.has_delphes:
            installer=InstallManager(self.main)
            if self.main.archi_info.has_delphesMA5tune:
                if not installer.Deactivate('delphesMA5tune'):
                    return False
            if installer.Activate('delphes')==-1:
                return False
        if self.main.fastsim.package == 'delphesMA5tune' and not self.main.archi_info.has_delphesMA5tune:
            installer=InstallManager(self.main)
            if self.main.archi_info.has_delphes:
                if not installer.Deactivate('delphes'):
                    return False
            if installer.Activate('delphesMA5tune')==-1:
                return False
        self.main.forced=forced_bkp

        # Initializing the JobWriter
        jobber = JobWriter(self.main,dirname,self.resubmit)

        # Writing process
        if not self.resubmit:
            self.logger.info("   Creating folder '"+dirname.split('/')[-1] \
                +"'...")
        else:
            self.logger.info("   Checking the structure of the folder '"+\
               dirname.split('/')[-1]+"'...")
        if not jobber.Open():
            self.logger.error("job submission aborted.")
            return False

        if not self.resubmit:
            if self.main.recasting.status != 'on':
                self.logger.info("   Copying 'SampleAnalyzer' source files...")
            if not jobber.CopyLHEAnalysis():
                self.logger.error("   job submission aborted.")
                return False
            if self.main.recasting.status != 'on' and not jobber.CreateBldDir():
                self.logger.error("   job submission aborted.")
                return False
            if self.main.recasting.status == 'on':
                if not FolderWriter.CreateDirectory(dirname+'/Events'):
                    return False

        # In the case of recasting, there is no need to create a standard Job
        if self.main.recasting.status == "on":

            ### First, the analyses to take care off
            self.editRecastingCard(dirname)
            self.logger.info("   Getting the list of delphes simulation to be performed...")

            ### Second, which delphes run must be performed, and running them
            if not self.main.recasting.GetDelphesRuns(dirname+"/Input/recasting_card.dat"):
                return False
            firstv11 = True
            firstv13 = True
            forced_bkp = self.main.forced
            self.main.forced=True
            if len(self.main.recasting.delphesruns)==0:
                self.logger.warning('No recasting to do... Please check the recasting card')
                return False
            for mydelphescard in sorted(self.main.recasting.delphesruns):
                version=mydelphescard[:4]
                card=mydelphescard[5:]
                if version=="v1.1":
                    if not self.main.recasting.ma5tune:
                        self.logger.error('The DelphesMA5tune library is not present... v1.1 analyses cannot be used')
                        return False

                    if firstv11:
                        self.logger.info("   **********************************************************")
                        self.logger.info("   "+StringTools.Center('v1.1 detector simulations',57))
                        self.logger.info("   **********************************************************")
                        firstv11=False

                    ## Deactivating delphes
                    installer=InstallManager(self.main)
                    if not installer.Deactivate('delphes'):
                        return False

                    ## Activating and compile the MA5Tune
                    if installer.Activate('delphesMA5tune')==-1:
                        return False

                    ## running delphesMA5tune
                    for item in self.main.datasets:
                        if not os.path.isfile(dirname + '/Events/' + item.name + '_v1x1_' + \
                             card.replace('.tcl','')+'.root'):
                            self.main.recasting.status="off"
                            self.main.fastsim.package="delphesMA5tune"
                            self.main.fastsim.clustering=0
                            self.main.fastsim.delphes=0
                            self.main.fastsim.delphesMA5tune = DelphesMA5tuneConfiguration()
                            self.main.fastsim.delphesMA5tune.card = os.path.normpath("../../../../PADForMA5tune/Input/Cards/"+card)
                            self.submit(dirname+'_DelphesForMa5tuneRun',[])
                            self.main.recasting.status="on"
                            self.main.fastsim.package="none"
                            ## saving the output
                            shutil.move(dirname+'_DelphesForMa5tuneRun/Output/_'+item.name+'/TheMouth.root',\
                              dirname+'/Events/'+item.name+'_v1x1_'+card.replace('.tcl','')+'.root')
                        if not FolderWriter.RemoveDirectory(os.path.normpath(dirname+'_DelphesForMa5tuneRun')):
                            return False
                elif version in ['v1.2', 'v1.3']:
                    if not self.main.recasting.delphes:
                        self.logger.error('The Delphes library is not present... v1.2+ analyses cannot be used')
                        return False

                    if firstv13:
                        self.logger.info("   **********************************************************")
                        self.logger.info("   "+StringTools.Center('v1.2+ detector simulations',57))
                        self.logger.info("   **********************************************************")
                        firstv13=False

                    ## Deactivating delphesMA5tune
                    installer=InstallManager(self.main)
                    if not installer.Deactivate('delphesMA5tune'):
                        return False

                    ## Activating and compile Delphes
                    if installer.Activate('delphes')==-1:
                        return False

                    ## running delphesMA5tune
                    for item in self.main.datasets:
                        if not os.path.isfile(dirname+'/Events/' + item.name +\
                         '_v1x2_'+card.replace('.tcl','')+'.root'):
                            self.main.recasting.status="off"
                            self.main.fastsim.package="delphes"
                            self.main.fastsim.clustering=0
                            self.main.fastsim.delphesMA5tune=0
                            self.main.fastsim.delphes = DelphesConfiguration()
                            self.main.fastsim.delphes.card = os.path.normpath("../../../../PAD/Input/Cards/"+card)
                            self.submit(dirname+'_DelphesRun',[])
                            self.main.recasting.status="on"
                            self.main.fastsim.package="none"
                            ## saving the output
                            shutil.move(dirname+'_DelphesRun/Output/_'+item.name+'/TheMouth.root',\
                              dirname+'/Events/'+item.name+'_v1x2_'+card.replace('.tcl','')+'.root')
                        if not FolderWriter.RemoveDirectory(os.path.normpath(dirname+'_DelphesRun')):
                            return False
                else:
                    self.logger.error('An analysis can only be compatible with ma5 v1.1, v1.2 or v1.3...')
                    return False
            self.main.forced=forced_bkp

            ### Third, executing the analyses
            if not self.main.recasting.GetAnalysisRuns(dirname+"/Input/recasting_card.dat"):
                return False
            forced_bkp = self.main.forced
            self.main.forced=True
            for mydelphescard in list(set(sorted(self.main.recasting.delphesruns))):
                ## checking the PAD Version
                myversion  = mydelphescard[:4]
                if myversion=='v1.2':
                    PADdir = self.main.archi_info.ma5dir+'/PAD'
                elif myversion=='v1.1':
                    PADdir = self.main.archi_info.ma5dir+'/PADForMA5tune'
                else:
                    self.logger.error('Unknown PAD version')
                    self.main.forced=forced_bkp
                    return False
                ## current delphes card
                mycard     = mydelphescard[5:]
                ## print out
                self.logger.info("   **********************************************************")
                self.logger.info("   "+StringTools.Center(myversion+' running of the PAD'+\
                       ' on events generated with',57))
                self.logger.info("   "+StringTools.Center(mycard,57))
                self.logger.info("   **********************************************************")
                ## setting up Delphes
                installer=InstallManager(self.main)
                if myversion=='v1.1':
                    if not installer.Deactivate('delphes'):
                        self.main.forced=forced_bkp
                        return False
                    if installer.Activate('delphesMA5tune')==-1:
                        self.main.forced=forced_bkp
                        return False
                elif myversion=='v1.2':
                    if not installer.Deactivate('delphesMA5tune'):
                        self.main.forced=forced_bkp
                        return False
                    if installer.Activate('delphes')==-1:
                        self.main.forced=forced_bkp
                        return False
                ## Analyses
                myanalyses = self.main.recasting.analysisruns
                myanalyses = [ x for x in myanalyses if myversion in x ]
                myanalyses = [ x.replace(myversion+'_','') for x in myanalyses ]
                for card,analysislist in self.main.recasting.DelphesDic.items():
                      if card == mycard:
                          tmpanalyses=analysislist
                          break
                myanalyses = [ x for x in myanalyses if x in tmpanalyses]
                ## event file
                for myset in self.main.datasets:
                    myevents=os.path.normpath(dirname + '/Events/' + myset.name + '_' +\
                       myversion.replace('.','x')+'_' + mycard.replace('.tcl','')+'.root')
                    ## preparing and running the PAD
                    if not self.main.recasting.UpdatePADMain(myanalyses,PADdir):
                        self.main.forced=forced_bkp
                        return False
                    time.sleep(1.);
                    if not self.main.recasting.MakePAD(PADdir,dirname,self.main):
                        self.main.forced=forced_bkp
                        return False
                    time.sleep(1.);
                    if not self.main.recasting.RunPAD(PADdir,myevents):
                        self.main.forced=forced_bkp
                        return False
                    time.sleep(1.);
                    ## Restoring the PAD as it was before
                    if not self.main.recasting.RestorePADMain(PADdir,dirname,self.main):
                        self.main.forced=forced_bkp
                        return False
                    time.sleep(1.);
                    ## saving the output
                    if not self.main.recasting.SavePADOutput(PADdir,dirname,myanalyses,myset.name):
                        self.main.forced=forced_bkp
                        return False
                    if not self.main.recasting.store_root:
                        os.remove(os.path.normpath(dirname + '/Events/' + myset.name + '_' +\
                       myversion.replace('.','x')+'_' + mycard.replace('.tcl','')+'.root'))
                    time.sleep(1.);
                    ## Running the CLs exclusion script (if available)
                    if not self.main.recasting.GetCLs(PADdir,dirname,myanalyses,myset.name,myset.xsection,myset.name):
                        self.main.forced=forced_bkp
                        return False
                    ## Saving the results
            self.main.forced=forced_bkp
        else:
            self.logger.info("   Inserting your selection into 'SampleAnalyzer'...")
            if not jobber.WriteSelectionHeader(self.main):
                self.logger.error("job submission aborted.")
                return False
            if not jobber.WriteSelectionSource(self.main):
                self.logger.error("job submission aborted.")
                return False

        self.logger.info("   Writing the list of datasets...")
        for item in self.main.datasets:
            jobber.WriteDatasetList(item)

        self.logger.info("   Writing the command line history...")
        jobber.WriteHistory(history,self.main.firstdir)
        if self.main.recasting.status == "on":
            self.main.recasting.collect_outputs(dirname,self.main.datasets)
            self.logger.info('    -> the results can be found in:') 
            self.logger.info('       '+ dirname + '/Output/CLs_output_summary.dat')
            for item in self.main.datasets:
                self.logger.info('       '+ dirname + '/Output/'+ item.name + '/CLs_output.dat')
        else:
            layouter = LayoutWriter(self.main, dirname)
            layouter.WriteLayoutConfig()

        if not self.main.recasting.status=='on' and not self.resubmit:
            self.logger.info("   Creating Makefiles...")
            if not jobber.WriteMakefiles():
                self.logger.error("job submission aborted.")
                return False

        # Edit the delphes or recasting cards
        if self.main.fastsim.package in ["delphes","delphesMA5tune"]:
            self.editDelphesCard(dirname)

        if self.resubmit and not self.main.recasting.status=='on':
            self.logger.info("   Cleaning 'SampleAnalyzer'...")
            if not jobber.MrproperJob():
                self.logger.error("job submission aborted.")
                return False

        if not self.main.recasting.status=='on':
            self.logger.info("   Compiling 'SampleAnalyzer'...")
            if not jobber.CompileJob():
                self.logger.error("job submission aborted.")
                return False

            self.logger.info("   Linking 'SampleAnalyzer'...")
            if not jobber.LinkJob():
                self.logger.error("job submission aborted.")
                return False

            for item in self.main.datasets:
                self.logger.info("   Running 'SampleAnalyzer' over dataset '"
                             +item.name+"'...")
                self.logger.info("    *******************************************************")
                if not jobber.RunJob(item):
                    self.logger.error("run over '"+item.name+"' aborted.")
                self.logger.info("    *******************************************************")
        return True
Ejemplo n.º 6
0
    def run_delphes(self,dataset,card):
        # Initializing the JobWriter
        jobber = JobWriter(self.main,self.dirname+'_FastSimRun')

        # Writing process
        logging.getLogger('MA5').info("   Creating folder '"+self.dirname.split('/')[-1]  + "'...")
        if not jobber.Open():
            return False
        logging.getLogger('MA5').info("   Copying 'SampleAnalyzer' source files...")
        if not jobber.CopyLHEAnalysis():
            return False
        if not jobber.CreateBldDir():
            return False
        logging.getLogger('MA5').info("   Inserting your selection into 'SampleAnalyzer'...")
        if not jobber.WriteSelectionHeader(self.main):
            return False
        if not jobber.WriteSelectionSource(self.main):
            return False
        logging.getLogger('MA5').info("   Writing the list of datasets...")
        jobber.WriteDatasetList(dataset)
        logging.getLogger('MA5').info("   Creating Makefiles...")
        if not jobber.WriteMakefiles():
            return False
        logging.getLogger('MA5').debug("   Fixing the pileup path...")
        self.fix_pileup(self.dirname+'_FastSimRun/Input/'+card)

        # Creating executable
        logging.getLogger('MA5').info("   Compiling 'SampleAnalyzer'...")
        if not jobber.CompileJob():
            return False
        logging.getLogger('MA5').info("   Linking 'SampleAnalyzer'...")
        if not jobber.LinkJob():
            return False

        # Running
        logging.getLogger('MA5').info("   Running 'SampleAnalyzer' over dataset '" +dataset.name+"'...")
        logging.getLogger('MA5').info("    *******************************************************")
        if not jobber.RunJob(dataset):
            logging.getLogger('MA5').error("run over '"+dataset.name+"' aborted.")
        logging.getLogger('MA5').info("    *******************************************************")

        # Exit
        return True
Ejemplo n.º 7
0
    def submit(self, dirname, history):

        # checking if delphes is needed and installing/activating it if relevant
        detector_handler = DetectorManager(self.main)
        if not detector_handler.manage('delphes'):
            logging.getLogger('MA5').error(
                'Problem with the handling of delphes/delphesMA5tune')
            return False
        if not detector_handler.manage('delphesMA5tune'):
            logging.getLogger('MA5').error(
                'Problem with the handling of delphes/delphesMA5tune')
            return False

        # Initializing the JobWriter
        jobber = JobWriter(self.main, dirname, self.resubmit)

        # Writing process
        if not self.resubmit:
            self.logger.info("   Creating folder '"+dirname.split('/')[-1] \
                +"'...")
        else:
            self.logger.info("   Checking the structure of the folder '"+\
               dirname.split('/')[-1]+"'...")
        if not jobber.Open():
            self.logger.error("job submission aborted.")
            return False

        if not self.resubmit:
            if self.main.recasting.status != 'on':
                self.logger.info("   Copying 'SampleAnalyzer' source files...")
            if not jobber.CopyLHEAnalysis():
                self.logger.error("   job submission aborted.")
                return False
            if self.main.recasting.status != 'on' and not jobber.CreateBldDir(
            ):
                self.logger.error("   job submission aborted.")
                return False

        # In the case of recasting, there is no need to create a standard Job
        if self.main.recasting.status == "on":
            Recaster = RunRecast(self.main, dirname)
            ### Initialization
            if not Recaster.init():
                return False
            self.main.recasting.delphesruns = Recaster.delphes_runcard
            ### fastsim
            if not Recaster.fastsim():
                self.logger.error("job submission aborted.")
                return False
            ### Analyses
            if not Recaster.analysis():
                self.logger.error("job submission aborted.")
                return False
        # Otherwise, standard job
        else:
            self.logger.info(
                "   Inserting your selection into 'SampleAnalyzer'...")
            if not jobber.WriteSelectionHeader(self.main):
                self.logger.error("job submission aborted.")
                return False
            if not jobber.WriteSelectionSource(self.main):
                self.logger.error("job submission aborted.")
                return False

        self.logger.info("   Writing the list of datasets...")
        for item in self.main.datasets:
            jobber.WriteDatasetList(item)

        self.logger.info("   Writing the command line history...")
        jobber.WriteHistory(history, self.main.firstdir)
        if self.main.recasting.status == "on":
            self.main.recasting.collect_outputs(dirname, self.main.datasets)
            self.logger.info('    -> the results can be found in:')
            self.logger.info('       ' + dirname +
                             '/Output/CLs_output_summary.dat')
            for item in self.main.datasets:
                self.logger.info('       ' + dirname + '/Output/' + item.name +
                                 '/CLs_output.dat')
        else:
            layouter = LayoutWriter(self.main, dirname)
            layouter.WriteLayoutConfig()

        if not self.main.recasting.status == 'on' and not self.resubmit:
            self.logger.info("   Creating Makefiles...")
            if not jobber.WriteMakefiles():
                self.logger.error("job submission aborted.")
                return False

        # Edit & check the delphes or recasting cards
        if self.main.fastsim.package in ["delphes", "delphesMA5tune"]:
            delphesCheck = DelphesCardChecker(dirname, self.main)
            if not delphesCheck.checkPresenceCard():
                self.logger.error("job submission aborted.")
                return False
            if not delphesCheck.editCard():
                self.logger.error("job submission aborted.")
                return False
            self.logger.info("   Checking the content of the Delphes card...")
            if not delphesCheck.checkContentCard():
                self.logger.error("job submission aborted.")
                return False

        if self.resubmit and not self.main.recasting.status == 'on':
            self.logger.info("   Cleaning 'SampleAnalyzer'...")
            if not jobber.MrproperJob():
                self.logger.error("job submission aborted.")
                return False

        if not self.main.recasting.status == 'on':
            self.logger.info("   Compiling 'SampleAnalyzer'...")
            if not jobber.CompileJob():
                self.logger.error("job submission aborted.")
                return False

            self.logger.info("   Linking 'SampleAnalyzer'...")
            if not jobber.LinkJob():
                self.logger.error("job submission aborted.")
                return False

            for item in self.main.datasets:
                self.logger.info("   Running 'SampleAnalyzer' over dataset '" +
                                 item.name + "'...")
                self.logger.info(
                    "    *******************************************************"
                )
                if not jobber.RunJob(item):
                    self.logger.error("run over '" + item.name + "' aborted.")
                self.logger.info(
                    "    *******************************************************"
                )
        return True
Ejemplo n.º 8
0
    def Copy(self):

        # Initializing the JobWriter
        jobber = JobWriter(self.main, self.path, False)

        # Writing process
        logging.info("   Creating folder '" + self.path + "'...")
        if not jobber.Open():
            logging.error("job submission aborted.")
            return False

        # Copying SampleAnalyzer
        logging.info("   Copying required 'SampleAnalyzer' source files...")
        if not jobber.CopyLHEAnalysis():
            logging.error("   job submission aborted.")
            return False

        # Writing an empty analysis
        logging.info("Please enter a name for your analysis")
        title = raw_input("Answer: ")
        if title == "":
            title = "user"
        title = title.replace(' ', '_')
        title = title.replace('-', '_')
        logging.info("   Writing an empty analysis...")
        os.system("cd " + self.path +
                  "/Build/SampleAnalyzer; python newAnalyzer.py " + title +
                  " 1")

        # Extracting analysis name
        file = open(self.path +
                    "/Build/SampleAnalyzer/Analyzer/analysisList.h")
        title = ""
        for line in file:
            if "Add" not in line:
                continue
            words = line.split('"')
            if len(words) >= 3:
                title = words[1]
                break
        file.close()

        # Writing a Makefile
        logging.info("   Writing a 'Makefile'...")
        if not jobber.WriteMakefiles():
            logging.error("job submission aborted.")
            return False

        # Writing Main
        if not jobber.CreateBldDir(analysisName=title, outputName="user.saf"):
            logging.error("   job submission aborted.")
            return False
        if self.main.shower.enable:
            mode = self.main.shower.type
            if self.main.shower.type == 'auto':
                mode = commands.getstatusoutput(
                    'less ' + self.main.datasets[0].filenames[0] +
                    ' | grep parton_shower ')
                if mode[0] != 0:
                    logging.error(
                        'Cannot retrieve the showering information from the LHE files'
                    )
                    return False
                mode = (mode[1].split())[0]
            if not jobber.CreateShowerDir(mode):
                logging.error("   job submission aborted.")
                return False

        return True
Ejemplo n.º 9
0
    def WriteMakefile(self, option=""):

        # Open the file
        file = open(self.path + "/SampleAnalyzer/Makefile", "w")

        # Header
        file.write(StringTools.Fill('#', 80) + '\n')
        file.write('#' + StringTools.Center(
            'MAKEFILE DEVOTED TO SAMPLE ANALYZER LIBRARY', 78) + '#\n')
        file.write(StringTools.Fill('#', 80) + '\n')
        file.write('\n')

        # Compilators
        file.write('# Compilators\n')
        file.write('CXX = g++\n')
        if self.fortran:
            file.write('FC = gfortran\n')
        file.write('\n')

        # Options for compilation
        file.write('# Options for compilation\n')
        #        if self.libFastJet:
        #            file.write('CXXFASTJET = $(shell fastjet-config --cxxflags --plugins)\n')
        # BENJ FIX file.write('CXXFLAGS = -Wall -O3 -fPIC $(shell root-config --cflags) -I./../')
        file.write('CXXFLAGS = -Wall -O3 -DROOT_USE -fPIC -I' +
                   self.main.configLinux.root_inc_path + ' -I./../')
        if self.libZIP:
            file.write(' -DZIP_USE')
        if self.libDelphes:
            file.write(' -DDELPHES_USE')
        if self.libDelfes:
            file.write(' -DDELFES_USE')
        if self.libFastJet:
            file.write(' -DFASTJET_USE')
#           file.write(' $(CXXFASTJET)')
        file.write('\n')
        if self.fortran:
            file.write('FC = gfortran\n')
            file.write('FCFLAGS = -O2\n')
        file.write('\n')

        # Files for analyzers
        file.write('# Files\n')
        file.write('SRCS = $(wildcard */*.cpp)\n')
        #        file.write('SRCS += $(wildcard */*/*.cpp)\n')
        file.write('HDRS = $(wildcard */*.h)\n')
        file.write('OBJS = $(SRCS:.cpp=.o)\n')
        if self.fortran:
            file.write('FORTRAN_SRCS = $(wildcard */*.f)\n')
            file.write('FORTRAN_OBJS = $(FORTRAN_SRCS:.f=.o)\n')
        file.write('\n')

        # Name of the library
        file.write('# Name of the library\n')
        file.write('PROGRAM = SampleAnalyzer\n')
        file.write('\n')

        # Defining colours for shell
        file.write('# Defining colours\n')
        file.write('GREEN  = "\\\\033[1;32m"\n')
        file.write('RED    = "\\\\033[1;31m"\n')
        file.write('PINK   = "\\\\033[1;35m"\n')
        file.write('BLUE   = "\\\\033[1;34m"\n')
        file.write('YELLOW = "\\\\033[1;33m"\n')
        file.write('CYAN   = "\\\\033[1;36m"\n')
        file.write('NORMAL = "\\\\033[0;39m"\n')
        file.write('\n')

        # All
        file.write('# All target\n')
        file.write('all: header compile_header compile link_header link\n')
        file.write('\n')

        # Header target
        file.write('# Header target\n')
        file.write('header:\n')
        file.write('\t@echo -e $(YELLOW)"' + StringTools.Fill('-', 50) + '"\n')
        file.write('\t@echo -e "' +
                   StringTools.Center('Building SampleAnalyzer library', 50) +
                   '"\n')
        file.write('\t@echo -e "' + StringTools.Fill('-', 50) + '"$(NORMAL)\n')
        file.write('\n')

        # Compile_header target
        file.write('# Compile_header target\n')
        file.write('compile_header:\n')
        file.write('\t@echo -e $(YELLOW)"' + StringTools.Fill('-', 50) + '"\n')
        file.write('\t@echo -e "' + StringTools.Center('Compilation', 50) +
                   '"\n')
        file.write('\t@echo -e "' + StringTools.Fill('-', 50) + '"$(NORMAL)\n')
        file.write('\n')

        # Linking_header target
        file.write('# Link_header target\n')
        file.write('link_header:\n')
        file.write('\t@echo -e $(YELLOW)"' + StringTools.Fill('-', 50) + '"\n')
        file.write('\t@echo -e "' + StringTools.Center('Final linking', 50) +
                   '"\n')
        file.write('\t@echo -e "' + StringTools.Fill('-', 50) + '"$(NORMAL)\n')
        file.write('\n')

        # Clean_header target
        file.write('# clean_header target\n')
        file.write('clean_header:\n')
        file.write('\t@echo -e $(YELLOW)"' + StringTools.Fill('-', 50) + '"\n')
        file.write('\t@echo -e "' + StringTools.Center(
            'Removing intermediate files from building', 50) + '"\n')
        file.write('\t@echo -e "' + StringTools.Fill('-', 50) + '"$(NORMAL)\n')
        file.write('\n')

        # Mrproper_header target
        file.write('# mrproper_header target\n')
        file.write('mrproper_header:\n')
        file.write('\t@echo -e $(YELLOW)"' + StringTools.Fill('-', 50) + '"\n')
        file.write('\t@echo -e "' +
                   StringTools.Center('Cleaning all the project', 50) + '"\n')
        file.write('\t@echo -e "' + StringTools.Fill('-', 50) + '"$(NORMAL)\n')
        file.write('\n')

        # Precompile
        file.write('# Precompile target\n')
        file.write('precompile:\n')
        file.write('\n')

        # Precompile
        file.write('# Compile target\n')
        if self.fortran:
            file.write('compile: precompile $(OBJS) $(FORTRAN_OBJS)\n')
        else:
            file.write('compile: precompile $(OBJS)\n')
        file.write('\n')

        # Precompile
        file.write('# Link target\n')
        if self.fortran:
            file.write('link: $(OBJS) $(FORTRAN_OBJS)\n')
            if self.main.isMAC:
                file.write(
                    '\t$(CXX) -shared -flat_namespace -dynamiclib -undefined suppress -o Lib/lib$(PROGRAM).so $(OBJS) $(FORTRAN_OBJS)\n'
                )
            else:
                file.write(
                    '\t$(CXX) -shared -o Lib/lib$(PROGRAM).so $(OBJS) $(FORTRAN_OBJS)\n'
                )
        else:
            file.write('link: $(OBJS)\n')
            if self.main.isMAC:
                file.write(
                    '\t$(CXX) -shared -flat_namespace -dynamiclib -undefined suppress -o Lib/lib$(PROGRAM).so $(OBJS)\n'
                )
            else:
                file.write(
                    '\t$(CXX) -shared -o Lib/lib$(PROGRAM).so $(OBJS)\n')

#            file.write('\tar -ruc Lib/lib$(PROGRAM).a $(OBJS)\n')
        file.write('\n')

        # Phony target
        file.write('# Phony target\n')
        file.write('.PHONY: do_clean header compile_header link_header\n')
        file.write('\n')

        # Cleaning
        file.write('# Clean target\n')
        file.write('clean: clean_header do_clean\n')
        file.write('\n')
        file.write('# Do clean target\n')
        file.write('do_clean: \n')
        file.write('\t@rm -f $(OBJS)\n')
        file.write('\n')

        # Mr Proper
        file.write('# Mr Proper target \n')
        file.write('mrproper: mrproper_header do_mrproper\n')
        file.write('\n')
        file.write('# Do Mr Proper target \n')
        file.write('do_mrproper: do_clean\n')
        file.write('\t@rm -f Lib/lib$(PROGRAM).so\n')
        file.write(
            '\t@rm -f compilation.log linking.log cleanup.log mrproper.log *~ */*~\n'
        )
        file.write('\n')

        # Closing the file
        file.close()

        JobWriter.WriteSetupFile(True, self.path + '/SampleAnalyzer',
                                 self.ma5dir, False, self.main.configLinux,
                                 self.main.isMAC)
        JobWriter.WriteSetupFile(False, self.path + '/SampleAnalyzer',
                                 self.ma5dir, False, self.main.configLinux,
                                 self.main.isMAC)

        return True